# Generated from /data/Coding/LLM4DB/antlr_gram/oracle/PlSqlParser.g4 by ANTLR 4.13.1
# encoding: utf-8
from antlr4 import *
from io import StringIO
import sys
if sys.version_info[1] > 5:
	from typing import TextIO
else:
	from typing.io import TextIO

if "." in __name__:
    from .PlSqlParserBase import PlSqlParserBase
else:
    from PlSqlParserBase import PlSqlParserBase

def serializedATN():
    return [
        4,1,2380,20380,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,
        6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,
        7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,
        2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,
        7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,
        2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,
        7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,
        2,46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,
        7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,
        2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,
        7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,
        2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,
        7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,
        2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,
        7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,
        2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,
        103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,
        2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,
        7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119,
        2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125,
        7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130,
        2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136,
        7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141,
        2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147,
        7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152,
        2,153,7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158,
        7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163,
        2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169,
        7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,
        2,175,7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,
        7,180,2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185,
        2,186,7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191,
        7,191,2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196,
        2,197,7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202,
        7,202,2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207,
        2,208,7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213,
        7,213,2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218,
        2,219,7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224,
        7,224,2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229,
        2,230,7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235,
        7,235,2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240,
        2,241,7,241,2,242,7,242,2,243,7,243,2,244,7,244,2,245,7,245,2,246,
        7,246,2,247,7,247,2,248,7,248,2,249,7,249,2,250,7,250,2,251,7,251,
        2,252,7,252,2,253,7,253,2,254,7,254,2,255,7,255,2,256,7,256,2,257,
        7,257,2,258,7,258,2,259,7,259,2,260,7,260,2,261,7,261,2,262,7,262,
        2,263,7,263,2,264,7,264,2,265,7,265,2,266,7,266,2,267,7,267,2,268,
        7,268,2,269,7,269,2,270,7,270,2,271,7,271,2,272,7,272,2,273,7,273,
        2,274,7,274,2,275,7,275,2,276,7,276,2,277,7,277,2,278,7,278,2,279,
        7,279,2,280,7,280,2,281,7,281,2,282,7,282,2,283,7,283,2,284,7,284,
        2,285,7,285,2,286,7,286,2,287,7,287,2,288,7,288,2,289,7,289,2,290,
        7,290,2,291,7,291,2,292,7,292,2,293,7,293,2,294,7,294,2,295,7,295,
        2,296,7,296,2,297,7,297,2,298,7,298,2,299,7,299,2,300,7,300,2,301,
        7,301,2,302,7,302,2,303,7,303,2,304,7,304,2,305,7,305,2,306,7,306,
        2,307,7,307,2,308,7,308,2,309,7,309,2,310,7,310,2,311,7,311,2,312,
        7,312,2,313,7,313,2,314,7,314,2,315,7,315,2,316,7,316,2,317,7,317,
        2,318,7,318,2,319,7,319,2,320,7,320,2,321,7,321,2,322,7,322,2,323,
        7,323,2,324,7,324,2,325,7,325,2,326,7,326,2,327,7,327,2,328,7,328,
        2,329,7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333,2,334,
        7,334,2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339,7,339,
        2,340,7,340,2,341,7,341,2,342,7,342,2,343,7,343,2,344,7,344,2,345,
        7,345,2,346,7,346,2,347,7,347,2,348,7,348,2,349,7,349,2,350,7,350,
        2,351,7,351,2,352,7,352,2,353,7,353,2,354,7,354,2,355,7,355,2,356,
        7,356,2,357,7,357,2,358,7,358,2,359,7,359,2,360,7,360,2,361,7,361,
        2,362,7,362,2,363,7,363,2,364,7,364,2,365,7,365,2,366,7,366,2,367,
        7,367,2,368,7,368,2,369,7,369,2,370,7,370,2,371,7,371,2,372,7,372,
        2,373,7,373,2,374,7,374,2,375,7,375,2,376,7,376,2,377,7,377,2,378,
        7,378,2,379,7,379,2,380,7,380,2,381,7,381,2,382,7,382,2,383,7,383,
        2,384,7,384,2,385,7,385,2,386,7,386,2,387,7,387,2,388,7,388,2,389,
        7,389,2,390,7,390,2,391,7,391,2,392,7,392,2,393,7,393,2,394,7,394,
        2,395,7,395,2,396,7,396,2,397,7,397,2,398,7,398,2,399,7,399,2,400,
        7,400,2,401,7,401,2,402,7,402,2,403,7,403,2,404,7,404,2,405,7,405,
        2,406,7,406,2,407,7,407,2,408,7,408,2,409,7,409,2,410,7,410,2,411,
        7,411,2,412,7,412,2,413,7,413,2,414,7,414,2,415,7,415,2,416,7,416,
        2,417,7,417,2,418,7,418,2,419,7,419,2,420,7,420,2,421,7,421,2,422,
        7,422,2,423,7,423,2,424,7,424,2,425,7,425,2,426,7,426,2,427,7,427,
        2,428,7,428,2,429,7,429,2,430,7,430,2,431,7,431,2,432,7,432,2,433,
        7,433,2,434,7,434,2,435,7,435,2,436,7,436,2,437,7,437,2,438,7,438,
        2,439,7,439,2,440,7,440,2,441,7,441,2,442,7,442,2,443,7,443,2,444,
        7,444,2,445,7,445,2,446,7,446,2,447,7,447,2,448,7,448,2,449,7,449,
        2,450,7,450,2,451,7,451,2,452,7,452,2,453,7,453,2,454,7,454,2,455,
        7,455,2,456,7,456,2,457,7,457,2,458,7,458,2,459,7,459,2,460,7,460,
        2,461,7,461,2,462,7,462,2,463,7,463,2,464,7,464,2,465,7,465,2,466,
        7,466,2,467,7,467,2,468,7,468,2,469,7,469,2,470,7,470,2,471,7,471,
        2,472,7,472,2,473,7,473,2,474,7,474,2,475,7,475,2,476,7,476,2,477,
        7,477,2,478,7,478,2,479,7,479,2,480,7,480,2,481,7,481,2,482,7,482,
        2,483,7,483,2,484,7,484,2,485,7,485,2,486,7,486,2,487,7,487,2,488,
        7,488,2,489,7,489,2,490,7,490,2,491,7,491,2,492,7,492,2,493,7,493,
        2,494,7,494,2,495,7,495,2,496,7,496,2,497,7,497,2,498,7,498,2,499,
        7,499,2,500,7,500,2,501,7,501,2,502,7,502,2,503,7,503,2,504,7,504,
        2,505,7,505,2,506,7,506,2,507,7,507,2,508,7,508,2,509,7,509,2,510,
        7,510,2,511,7,511,2,512,7,512,2,513,7,513,2,514,7,514,2,515,7,515,
        2,516,7,516,2,517,7,517,2,518,7,518,2,519,7,519,2,520,7,520,2,521,
        7,521,2,522,7,522,2,523,7,523,2,524,7,524,2,525,7,525,2,526,7,526,
        2,527,7,527,2,528,7,528,2,529,7,529,2,530,7,530,2,531,7,531,2,532,
        7,532,2,533,7,533,2,534,7,534,2,535,7,535,2,536,7,536,2,537,7,537,
        2,538,7,538,2,539,7,539,2,540,7,540,2,541,7,541,2,542,7,542,2,543,
        7,543,2,544,7,544,2,545,7,545,2,546,7,546,2,547,7,547,2,548,7,548,
        2,549,7,549,2,550,7,550,2,551,7,551,2,552,7,552,2,553,7,553,2,554,
        7,554,2,555,7,555,2,556,7,556,2,557,7,557,2,558,7,558,2,559,7,559,
        2,560,7,560,2,561,7,561,2,562,7,562,2,563,7,563,2,564,7,564,2,565,
        7,565,2,566,7,566,2,567,7,567,2,568,7,568,2,569,7,569,2,570,7,570,
        2,571,7,571,2,572,7,572,2,573,7,573,2,574,7,574,2,575,7,575,2,576,
        7,576,2,577,7,577,2,578,7,578,2,579,7,579,2,580,7,580,2,581,7,581,
        2,582,7,582,2,583,7,583,2,584,7,584,2,585,7,585,2,586,7,586,2,587,
        7,587,2,588,7,588,2,589,7,589,2,590,7,590,2,591,7,591,2,592,7,592,
        2,593,7,593,2,594,7,594,2,595,7,595,2,596,7,596,2,597,7,597,2,598,
        7,598,2,599,7,599,2,600,7,600,2,601,7,601,2,602,7,602,2,603,7,603,
        2,604,7,604,2,605,7,605,2,606,7,606,2,607,7,607,2,608,7,608,2,609,
        7,609,2,610,7,610,2,611,7,611,2,612,7,612,2,613,7,613,2,614,7,614,
        2,615,7,615,2,616,7,616,2,617,7,617,2,618,7,618,2,619,7,619,2,620,
        7,620,2,621,7,621,2,622,7,622,2,623,7,623,2,624,7,624,2,625,7,625,
        2,626,7,626,2,627,7,627,2,628,7,628,2,629,7,629,2,630,7,630,2,631,
        7,631,2,632,7,632,2,633,7,633,2,634,7,634,2,635,7,635,2,636,7,636,
        2,637,7,637,2,638,7,638,2,639,7,639,2,640,7,640,2,641,7,641,2,642,
        7,642,2,643,7,643,2,644,7,644,2,645,7,645,2,646,7,646,2,647,7,647,
        2,648,7,648,2,649,7,649,2,650,7,650,2,651,7,651,2,652,7,652,2,653,
        7,653,2,654,7,654,2,655,7,655,2,656,7,656,2,657,7,657,2,658,7,658,
        2,659,7,659,2,660,7,660,2,661,7,661,2,662,7,662,2,663,7,663,2,664,
        7,664,2,665,7,665,2,666,7,666,2,667,7,667,2,668,7,668,2,669,7,669,
        2,670,7,670,2,671,7,671,2,672,7,672,2,673,7,673,2,674,7,674,2,675,
        7,675,2,676,7,676,2,677,7,677,2,678,7,678,2,679,7,679,2,680,7,680,
        2,681,7,681,2,682,7,682,2,683,7,683,2,684,7,684,2,685,7,685,2,686,
        7,686,2,687,7,687,2,688,7,688,2,689,7,689,2,690,7,690,2,691,7,691,
        2,692,7,692,2,693,7,693,2,694,7,694,2,695,7,695,2,696,7,696,2,697,
        7,697,2,698,7,698,2,699,7,699,2,700,7,700,2,701,7,701,2,702,7,702,
        2,703,7,703,2,704,7,704,2,705,7,705,2,706,7,706,2,707,7,707,2,708,
        7,708,2,709,7,709,2,710,7,710,2,711,7,711,2,712,7,712,2,713,7,713,
        2,714,7,714,2,715,7,715,2,716,7,716,2,717,7,717,2,718,7,718,2,719,
        7,719,2,720,7,720,2,721,7,721,2,722,7,722,2,723,7,723,2,724,7,724,
        2,725,7,725,2,726,7,726,2,727,7,727,2,728,7,728,2,729,7,729,2,730,
        7,730,2,731,7,731,2,732,7,732,2,733,7,733,2,734,7,734,2,735,7,735,
        2,736,7,736,2,737,7,737,2,738,7,738,2,739,7,739,2,740,7,740,2,741,
        7,741,2,742,7,742,2,743,7,743,2,744,7,744,2,745,7,745,2,746,7,746,
        2,747,7,747,2,748,7,748,2,749,7,749,2,750,7,750,2,751,7,751,2,752,
        7,752,2,753,7,753,2,754,7,754,2,755,7,755,2,756,7,756,2,757,7,757,
        2,758,7,758,2,759,7,759,2,760,7,760,2,761,7,761,2,762,7,762,2,763,
        7,763,2,764,7,764,2,765,7,765,2,766,7,766,2,767,7,767,2,768,7,768,
        2,769,7,769,2,770,7,770,2,771,7,771,2,772,7,772,2,773,7,773,2,774,
        7,774,2,775,7,775,2,776,7,776,2,777,7,777,2,778,7,778,2,779,7,779,
        2,780,7,780,2,781,7,781,2,782,7,782,2,783,7,783,2,784,7,784,2,785,
        7,785,2,786,7,786,2,787,7,787,2,788,7,788,2,789,7,789,2,790,7,790,
        2,791,7,791,2,792,7,792,2,793,7,793,2,794,7,794,2,795,7,795,2,796,
        7,796,2,797,7,797,2,798,7,798,2,799,7,799,2,800,7,800,2,801,7,801,
        2,802,7,802,2,803,7,803,2,804,7,804,2,805,7,805,2,806,7,806,2,807,
        7,807,2,808,7,808,2,809,7,809,2,810,7,810,2,811,7,811,2,812,7,812,
        2,813,7,813,2,814,7,814,2,815,7,815,2,816,7,816,2,817,7,817,2,818,
        7,818,2,819,7,819,2,820,7,820,2,821,7,821,2,822,7,822,2,823,7,823,
        2,824,7,824,2,825,7,825,2,826,7,826,2,827,7,827,2,828,7,828,2,829,
        7,829,2,830,7,830,2,831,7,831,2,832,7,832,2,833,7,833,2,834,7,834,
        2,835,7,835,2,836,7,836,2,837,7,837,2,838,7,838,2,839,7,839,2,840,
        7,840,2,841,7,841,2,842,7,842,2,843,7,843,2,844,7,844,2,845,7,845,
        2,846,7,846,2,847,7,847,2,848,7,848,2,849,7,849,2,850,7,850,2,851,
        7,851,2,852,7,852,2,853,7,853,2,854,7,854,2,855,7,855,2,856,7,856,
        2,857,7,857,2,858,7,858,2,859,7,859,2,860,7,860,2,861,7,861,2,862,
        7,862,2,863,7,863,2,864,7,864,2,865,7,865,2,866,7,866,2,867,7,867,
        2,868,7,868,2,869,7,869,2,870,7,870,2,871,7,871,2,872,7,872,2,873,
        7,873,2,874,7,874,2,875,7,875,2,876,7,876,2,877,7,877,2,878,7,878,
        2,879,7,879,2,880,7,880,2,881,7,881,2,882,7,882,2,883,7,883,2,884,
        7,884,2,885,7,885,2,886,7,886,2,887,7,887,2,888,7,888,2,889,7,889,
        2,890,7,890,2,891,7,891,2,892,7,892,2,893,7,893,2,894,7,894,2,895,
        7,895,2,896,7,896,2,897,7,897,2,898,7,898,2,899,7,899,2,900,7,900,
        2,901,7,901,2,902,7,902,2,903,7,903,2,904,7,904,2,905,7,905,2,906,
        7,906,2,907,7,907,2,908,7,908,2,909,7,909,2,910,7,910,2,911,7,911,
        2,912,7,912,2,913,7,913,2,914,7,914,2,915,7,915,2,916,7,916,2,917,
        7,917,2,918,7,918,2,919,7,919,2,920,7,920,2,921,7,921,2,922,7,922,
        2,923,7,923,2,924,7,924,2,925,7,925,2,926,7,926,2,927,7,927,2,928,
        7,928,2,929,7,929,2,930,7,930,2,931,7,931,2,932,7,932,2,933,7,933,
        2,934,7,934,2,935,7,935,2,936,7,936,2,937,7,937,2,938,7,938,2,939,
        7,939,2,940,7,940,2,941,7,941,2,942,7,942,2,943,7,943,2,944,7,944,
        2,945,7,945,2,946,7,946,2,947,7,947,2,948,7,948,2,949,7,949,2,950,
        7,950,2,951,7,951,2,952,7,952,2,953,7,953,2,954,7,954,2,955,7,955,
        2,956,7,956,2,957,7,957,2,958,7,958,2,959,7,959,2,960,7,960,2,961,
        7,961,2,962,7,962,2,963,7,963,2,964,7,964,2,965,7,965,2,966,7,966,
        2,967,7,967,2,968,7,968,2,969,7,969,2,970,7,970,2,971,7,971,2,972,
        7,972,2,973,7,973,2,974,7,974,2,975,7,975,2,976,7,976,2,977,7,977,
        2,978,7,978,2,979,7,979,2,980,7,980,2,981,7,981,2,982,7,982,2,983,
        7,983,2,984,7,984,2,985,7,985,2,986,7,986,2,987,7,987,2,988,7,988,
        2,989,7,989,2,990,7,990,2,991,7,991,2,992,7,992,2,993,7,993,2,994,
        7,994,2,995,7,995,2,996,7,996,2,997,7,997,2,998,7,998,2,999,7,999,
        2,1000,7,1000,2,1001,7,1001,2,1002,7,1002,2,1003,7,1003,2,1004,7,
        1004,2,1005,7,1005,2,1006,7,1006,2,1007,7,1007,2,1008,7,1008,2,1009,
        7,1009,2,1010,7,1010,2,1011,7,1011,2,1012,7,1012,2,1013,7,1013,2,
        1014,7,1014,2,1015,7,1015,2,1016,7,1016,2,1017,7,1017,2,1018,7,1018,
        2,1019,7,1019,2,1020,7,1020,2,1021,7,1021,2,1022,7,1022,2,1023,7,
        1023,2,1024,7,1024,2,1025,7,1025,2,1026,7,1026,2,1027,7,1027,2,1028,
        7,1028,2,1029,7,1029,2,1030,7,1030,2,1031,7,1031,2,1032,7,1032,2,
        1033,7,1033,2,1034,7,1034,2,1035,7,1035,2,1036,7,1036,2,1037,7,1037,
        2,1038,7,1038,2,1039,7,1039,2,1040,7,1040,2,1041,7,1041,2,1042,7,
        1042,2,1043,7,1043,2,1044,7,1044,2,1045,7,1045,2,1046,7,1046,2,1047,
        7,1047,2,1048,7,1048,2,1049,7,1049,2,1050,7,1050,2,1051,7,1051,2,
        1052,7,1052,2,1053,7,1053,2,1054,7,1054,2,1055,7,1055,2,1056,7,1056,
        2,1057,7,1057,2,1058,7,1058,2,1059,7,1059,2,1060,7,1060,2,1061,7,
        1061,2,1062,7,1062,2,1063,7,1063,2,1064,7,1064,2,1065,7,1065,2,1066,
        7,1066,2,1067,7,1067,2,1068,7,1068,2,1069,7,1069,2,1070,7,1070,2,
        1071,7,1071,2,1072,7,1072,2,1073,7,1073,2,1074,7,1074,2,1075,7,1075,
        2,1076,7,1076,2,1077,7,1077,2,1078,7,1078,2,1079,7,1079,2,1080,7,
        1080,2,1081,7,1081,2,1082,7,1082,2,1083,7,1083,2,1084,7,1084,2,1085,
        7,1085,2,1086,7,1086,2,1087,7,1087,2,1088,7,1088,2,1089,7,1089,2,
        1090,7,1090,2,1091,7,1091,2,1092,7,1092,2,1093,7,1093,2,1094,7,1094,
        2,1095,7,1095,2,1096,7,1096,2,1097,7,1097,2,1098,7,1098,2,1099,7,
        1099,2,1100,7,1100,2,1101,7,1101,2,1102,7,1102,2,1103,7,1103,2,1104,
        7,1104,2,1105,7,1105,2,1106,7,1106,2,1107,7,1107,2,1108,7,1108,2,
        1109,7,1109,2,1110,7,1110,2,1111,7,1111,2,1112,7,1112,2,1113,7,1113,
        2,1114,7,1114,2,1115,7,1115,2,1116,7,1116,2,1117,7,1117,2,1118,7,
        1118,2,1119,7,1119,2,1120,7,1120,2,1121,7,1121,2,1122,7,1122,2,1123,
        7,1123,2,1124,7,1124,2,1125,7,1125,2,1126,7,1126,2,1127,7,1127,2,
        1128,7,1128,2,1129,7,1129,2,1130,7,1130,2,1131,7,1131,2,1132,7,1132,
        2,1133,7,1133,2,1134,7,1134,2,1135,7,1135,2,1136,7,1136,2,1137,7,
        1137,2,1138,7,1138,2,1139,7,1139,2,1140,7,1140,2,1141,7,1141,2,1142,
        7,1142,2,1143,7,1143,2,1144,7,1144,2,1145,7,1145,2,1146,7,1146,2,
        1147,7,1147,2,1148,7,1148,2,1149,7,1149,2,1150,7,1150,2,1151,7,1151,
        2,1152,7,1152,2,1153,7,1153,2,1154,7,1154,2,1155,7,1155,2,1156,7,
        1156,2,1157,7,1157,2,1158,7,1158,2,1159,7,1159,2,1160,7,1160,2,1161,
        7,1161,2,1162,7,1162,2,1163,7,1163,2,1164,7,1164,2,1165,7,1165,2,
        1166,7,1166,2,1167,7,1167,2,1168,7,1168,2,1169,7,1169,2,1170,7,1170,
        2,1171,7,1171,2,1172,7,1172,2,1173,7,1173,2,1174,7,1174,2,1175,7,
        1175,2,1176,7,1176,2,1177,7,1177,2,1178,7,1178,2,1179,7,1179,2,1180,
        7,1180,2,1181,7,1181,2,1182,7,1182,2,1183,7,1183,2,1184,7,1184,2,
        1185,7,1185,2,1186,7,1186,2,1187,7,1187,2,1188,7,1188,2,1189,7,1189,
        2,1190,7,1190,1,0,3,0,2384,8,0,1,0,1,0,3,0,2388,8,0,1,0,1,0,3,0,
        2392,8,0,1,0,1,0,3,0,2396,8,0,5,0,2398,8,0,10,0,12,0,2401,9,0,1,
        0,3,0,2404,8,0,1,0,3,0,2407,8,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,3,1,2550,8,1,1,2,1,2,1,2,1,2,1,2,4,2,2557,8,
        2,11,2,12,2,2558,1,2,3,2,2562,8,2,1,2,3,2,2565,8,2,1,2,1,2,1,2,1,
        2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,
        2,3,2,2587,8,2,3,2,2589,8,2,1,2,1,2,1,2,5,2,2594,8,2,10,2,12,2,2597,
        9,2,1,2,3,2,2600,8,2,1,2,1,2,1,2,3,2,2605,8,2,3,2,2607,8,2,1,3,1,
        3,1,3,3,3,2612,8,3,1,3,3,3,2615,8,3,1,3,1,3,3,3,2619,8,3,1,3,1,3,
        1,3,1,3,5,3,2625,8,3,10,3,12,3,2628,9,3,4,3,2630,8,3,11,3,12,3,2631,
        1,4,1,4,3,4,2636,8,4,1,4,1,4,1,4,3,4,2641,8,4,1,4,1,4,1,4,3,4,2646,
        8,4,5,4,2648,8,4,10,4,12,4,2651,9,4,1,4,1,4,1,4,3,4,2656,8,4,1,4,
        1,4,1,4,3,4,2661,8,4,1,4,1,4,1,4,3,4,2666,8,4,5,4,2668,8,4,10,4,
        12,4,2671,9,4,3,4,2673,8,4,1,5,1,5,1,5,1,5,3,5,2679,8,5,1,6,1,6,
        1,6,1,6,1,6,1,6,3,6,2687,8,6,1,6,1,6,1,6,1,6,1,6,3,6,2694,8,6,5,
        6,2696,8,6,10,6,12,6,2699,9,6,1,6,1,6,3,6,2703,8,6,1,6,3,6,2706,
        8,6,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,2720,8,8,
        10,8,12,8,2723,9,8,1,8,1,8,3,8,2727,8,8,1,9,1,9,3,9,2731,8,9,1,9,
        1,9,1,9,1,9,5,9,2737,8,9,10,9,12,9,2740,9,9,1,9,1,9,1,9,3,9,2745,
        8,9,1,9,1,9,1,9,1,9,5,9,2751,8,9,10,9,12,9,2754,9,9,4,9,2756,8,9,
        11,9,12,9,2757,1,9,3,9,2761,8,9,1,9,1,9,3,9,2765,8,9,1,9,3,9,2768,
        8,9,1,10,1,10,3,10,2772,8,10,1,10,1,10,1,10,1,10,5,10,2778,8,10,
        10,10,12,10,2781,9,10,1,10,1,10,1,10,3,10,2786,8,10,1,10,1,10,1,
        10,1,10,5,10,2792,8,10,10,10,12,10,2795,9,10,3,10,2797,8,10,1,10,
        3,10,2800,8,10,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,4,12,2810,
        8,12,11,12,12,12,2811,3,12,2814,8,12,1,12,1,12,1,12,1,12,3,12,2820,
        8,12,1,12,1,12,1,12,3,12,2825,8,12,3,12,2827,8,12,1,13,1,13,1,14,
        1,14,3,14,2833,8,14,1,14,3,14,2836,8,14,1,15,1,15,1,15,1,15,1,15,
        1,15,1,15,1,15,5,15,2846,8,15,10,15,12,15,2849,9,15,1,15,1,15,1,
        15,1,15,1,15,5,15,2856,8,15,10,15,12,15,2859,9,15,3,15,2861,8,15,
        1,16,1,16,1,16,3,16,2866,8,16,1,16,3,16,2869,8,16,1,16,1,16,1,17,
        1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,20,1,20,1,20,5,20,2884,8,20,
        10,20,12,20,2887,9,20,1,20,1,20,1,20,1,20,3,20,2893,8,20,1,20,1,
        20,1,20,3,20,2898,8,20,5,20,2900,8,20,10,20,12,20,2903,9,20,1,20,
        1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,5,20,2915,8,20,10,20,
        12,20,2918,9,20,3,20,2920,8,20,1,21,1,21,1,22,1,22,1,22,1,22,1,22,
        1,22,1,22,1,22,1,22,5,22,2933,8,22,10,22,12,22,2936,9,22,1,22,1,
        22,1,22,1,22,1,22,5,22,2943,8,22,10,22,12,22,2946,9,22,1,22,1,22,
        1,22,1,22,1,22,1,22,1,22,1,22,1,22,5,22,2957,8,22,10,22,12,22,2960,
        9,22,3,22,2962,8,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,
        1,23,1,23,3,23,2975,8,23,1,24,1,24,1,24,1,24,1,24,1,24,3,24,2983,
        8,24,1,24,1,24,1,24,1,24,3,24,2989,8,24,1,24,1,24,3,24,2993,8,24,
        1,25,1,25,1,25,1,25,1,25,3,25,3000,8,25,1,25,1,25,3,25,3004,8,25,
        1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,
        1,27,1,27,1,27,1,27,1,27,1,27,1,27,5,27,3026,8,27,10,27,12,27,3029,
        9,27,1,28,1,28,1,29,1,29,1,29,1,29,1,29,5,29,3038,8,29,10,29,12,
        29,3041,9,29,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,
        31,1,31,1,31,5,31,3056,8,31,10,31,12,31,3059,9,31,1,31,1,31,1,31,
        1,31,1,31,1,31,1,31,1,31,5,31,3069,8,31,10,31,12,31,3072,9,31,1,
        31,1,31,1,31,3,31,3077,8,31,1,32,1,32,1,32,1,32,1,32,5,32,3084,8,
        32,10,32,12,32,3087,9,32,1,32,1,32,1,32,1,32,1,32,5,32,3094,8,32,
        10,32,12,32,3097,9,32,1,32,3,32,3100,8,32,1,32,1,32,1,32,1,32,1,
        32,1,32,1,32,1,32,1,32,5,32,3111,8,32,10,32,12,32,3114,9,32,3,32,
        3116,8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,3125,8,33,1,33,
        1,33,1,33,1,33,1,33,1,33,3,33,3133,8,33,5,33,3135,8,33,10,33,12,
        33,3138,9,33,1,33,1,33,1,33,1,33,1,33,5,33,3145,8,33,10,33,12,33,
        3148,9,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,5,34,3159,
        8,34,10,34,12,34,3162,9,34,1,34,1,34,1,34,1,34,1,34,5,34,3169,8,
        34,10,34,12,34,3172,9,34,1,35,1,35,1,35,1,35,1,35,3,35,3179,8,35,
        1,35,3,35,3182,8,35,1,35,1,35,3,35,3186,8,35,1,35,3,35,3189,8,35,
        1,35,3,35,3192,8,35,1,35,3,35,3195,8,35,1,36,1,36,1,36,1,36,1,36,
        1,36,1,36,1,36,3,36,3205,8,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,
        1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,3224,8,36,
        1,37,1,37,1,38,1,38,1,39,1,39,1,39,1,39,3,39,3234,8,39,1,40,1,40,
        1,40,1,40,1,40,1,40,3,40,3242,8,40,1,40,1,40,1,40,3,40,3247,8,40,
        1,40,1,40,1,40,1,40,3,40,3253,8,40,1,41,1,41,1,41,1,41,1,41,1,41,
        1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,
        3,43,3274,8,43,1,44,1,44,1,45,1,45,1,45,1,46,1,46,3,46,3283,8,46,
        1,46,3,46,3286,8,46,1,46,1,46,3,46,3290,8,46,3,46,3292,8,46,1,47,
        1,47,1,47,1,47,1,47,5,47,3299,8,47,10,47,12,47,3302,9,47,1,47,3,
        47,3305,8,47,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,
        49,1,49,1,49,1,49,3,49,3321,8,49,1,49,1,49,1,49,1,49,1,49,1,49,1,
        49,1,49,1,49,1,49,1,49,1,49,3,49,3335,8,49,3,49,3337,8,49,1,49,3,
        49,3340,8,49,1,49,1,49,3,49,3344,8,49,1,50,1,50,1,50,1,50,1,50,3,
        50,3351,8,50,1,50,1,50,1,50,1,50,1,50,3,50,3358,8,50,1,51,1,51,1,
        51,1,51,1,51,1,51,1,51,3,51,3367,8,51,1,51,5,51,3370,8,51,10,51,
        12,51,3373,9,51,1,51,1,51,3,51,3377,8,51,3,51,3379,8,51,1,52,1,52,
        1,52,1,52,1,52,1,52,3,52,3387,8,52,1,52,1,52,1,52,1,52,1,52,1,52,
        3,52,3395,8,52,1,52,1,52,3,52,3399,8,52,1,52,1,52,4,52,3403,8,52,
        11,52,12,52,3404,1,52,1,52,3,52,3409,8,52,1,52,1,52,1,52,3,52,3414,
        8,52,1,53,1,53,1,54,1,54,1,54,3,54,3421,8,54,1,54,3,54,3424,8,54,
        1,54,1,54,1,54,1,54,1,54,1,54,5,54,3432,8,54,10,54,12,54,3435,9,
        54,1,54,1,54,3,54,3439,8,54,1,54,1,54,1,54,1,54,1,54,3,54,3446,8,
        54,1,54,1,54,1,54,1,54,1,54,1,54,1,54,5,54,3455,8,54,10,54,12,54,
        3458,9,54,1,54,1,54,3,54,3462,8,54,1,54,3,54,3465,8,54,1,54,1,54,
        3,54,3469,8,54,1,54,1,54,1,54,3,54,3474,8,54,1,55,1,55,1,55,1,55,
        1,55,1,55,1,55,1,55,1,56,1,56,3,56,3486,8,56,1,57,1,57,1,57,1,57,
        1,57,1,57,1,57,3,57,3495,8,57,1,57,3,57,3498,8,57,1,57,1,57,1,58,
        1,58,3,58,3504,8,58,1,58,1,58,1,58,1,58,3,58,3510,8,58,1,59,1,59,
        1,59,1,59,1,59,1,59,5,59,3518,8,59,10,59,12,59,3521,9,59,1,59,1,
        59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,62,1,62,1,62,3,62,3536,
        8,62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,5,64,
        3549,8,64,10,64,12,64,3552,9,64,1,64,1,64,1,65,1,65,1,65,1,65,1,
        65,1,66,1,66,1,66,3,66,3564,8,66,1,66,1,66,4,66,3568,8,66,11,66,
        12,66,3569,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,3,67,
        3582,8,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,3591,8,68,1,68,
        1,68,1,68,3,68,3596,8,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,
        1,69,1,69,1,69,1,69,1,69,1,69,3,69,3612,8,69,3,69,3614,8,69,1,70,
        1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,
        3,70,3630,8,70,3,70,3632,8,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,
        1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,3,71,
        3653,8,71,3,71,3655,8,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,
        1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,72,3,72,3675,8,72,
        3,72,3677,8,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,1,73,
        1,73,4,73,3690,8,73,11,73,12,73,3691,1,73,1,73,1,73,1,73,1,73,1,
        73,1,73,3,73,3701,8,73,3,73,3703,8,73,1,74,1,74,1,74,1,74,1,74,1,
        74,1,74,1,74,1,74,3,74,3714,8,74,1,75,1,75,1,75,5,75,3719,8,75,10,
        75,12,75,3722,9,75,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,78,1,78,
        1,78,3,78,3734,8,78,1,78,1,78,1,78,3,78,3739,8,78,1,78,1,78,1,79,
        1,79,1,79,1,79,1,79,3,79,3748,8,79,1,79,3,79,3751,8,79,1,79,5,79,
        3754,8,79,10,79,12,79,3757,9,79,1,79,1,79,3,79,3761,8,79,1,80,1,
        80,1,80,3,80,3766,8,80,1,80,3,80,3769,8,80,1,80,1,80,1,80,1,80,3,
        80,3775,8,80,1,80,1,80,3,80,3779,8,80,1,80,1,80,5,80,3783,8,80,10,
        80,12,80,3786,9,80,1,80,1,80,3,80,3790,8,80,1,81,1,81,1,81,3,81,
        3795,8,81,1,81,3,81,3798,8,81,1,81,1,81,1,81,1,81,1,81,3,81,3805,
        8,81,1,81,1,81,1,81,5,81,3810,8,81,10,81,12,81,3813,9,81,1,81,1,
        81,1,81,1,81,4,81,3819,8,81,11,81,12,81,3820,3,81,3823,8,81,3,81,
        3825,8,81,1,81,1,81,3,81,3829,8,81,1,82,1,82,1,82,1,82,1,82,1,82,
        1,82,1,82,3,82,3839,8,82,1,83,1,83,1,83,1,83,1,83,1,83,5,83,3847,
        8,83,10,83,12,83,3850,9,83,1,83,1,83,3,83,3854,8,83,1,83,1,83,5,
        83,3858,8,83,10,83,12,83,3861,9,83,1,83,1,83,1,84,1,84,1,84,1,84,
        1,84,1,84,5,84,3871,8,84,10,84,12,84,3874,9,84,1,84,1,84,3,84,3878,
        8,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,5,84,3887,8,84,10,84,12,
        84,3890,9,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,85,1,
        85,1,85,1,85,3,85,3905,8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,
        86,1,86,1,86,3,86,3917,8,86,1,86,1,86,3,86,3921,8,86,1,86,3,86,3924,
        8,86,1,86,3,86,3927,8,86,1,87,1,87,1,87,1,87,1,87,3,87,3934,8,87,
        1,87,1,87,3,87,3938,8,87,1,87,3,87,3941,8,87,1,88,1,88,1,88,1,88,
        1,89,1,89,1,89,1,89,1,89,3,89,3952,8,89,1,89,5,89,3955,8,89,10,89,
        12,89,3958,9,89,1,89,1,89,3,89,3962,8,89,1,90,1,90,1,90,1,90,1,90,
        1,90,5,90,3970,8,90,10,90,12,90,3973,9,90,1,90,1,90,3,90,3977,8,
        90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,3987,8,90,10,90,
        12,90,3990,9,90,1,90,1,90,3,90,3994,8,90,1,90,3,90,3997,8,90,1,90,
        1,90,3,90,4001,8,90,1,90,1,90,1,90,3,90,4006,8,90,1,90,1,90,1,91,
        1,91,1,91,1,91,1,91,1,91,5,91,4016,8,91,10,91,12,91,4019,9,91,1,
        91,1,91,3,91,4023,8,91,1,91,1,91,5,91,4027,8,91,10,91,12,91,4030,
        9,91,1,91,1,91,3,91,4034,8,91,1,91,3,91,4037,8,91,1,91,1,91,1,91,
        3,91,4042,8,91,1,91,1,91,1,92,1,92,1,92,3,92,4049,8,92,1,92,1,92,
        1,92,1,92,1,92,1,92,5,92,4057,8,92,10,92,12,92,4060,9,92,1,92,1,
        92,3,92,4064,8,92,1,92,3,92,4067,8,92,1,92,3,92,4070,8,92,1,92,1,
        92,3,92,4074,8,92,1,92,3,92,4077,8,92,1,92,1,92,1,92,3,92,4082,8,
        92,1,93,1,93,1,93,1,93,1,93,4,93,4089,8,93,11,93,12,93,4090,1,94,
        1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,95,
        3,95,4107,8,95,3,95,4109,8,95,1,96,1,96,1,96,1,96,1,96,1,96,1,96,
        1,96,3,96,4119,8,96,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,
        1,99,1,99,1,99,1,99,1,99,4,99,4135,8,99,11,99,12,99,4136,1,100,1,
        100,1,100,1,100,1,100,3,100,4144,8,100,1,100,1,100,1,100,3,100,4149,
        8,100,1,101,1,101,1,102,1,102,3,102,4155,8,102,1,102,1,102,1,102,
        1,102,1,102,1,102,5,102,4163,8,102,10,102,12,102,4166,9,102,1,103,
        1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,
        1,104,3,104,4181,8,104,1,104,5,104,4184,8,104,10,104,12,104,4187,
        9,104,1,104,1,104,3,104,4191,8,104,3,104,4193,8,104,1,105,1,105,
        1,105,3,105,4198,8,105,1,105,1,105,1,105,1,105,1,105,3,105,4205,
        8,105,1,105,3,105,4208,8,105,1,105,3,105,4211,8,105,1,105,3,105,
        4214,8,105,1,105,1,105,1,106,1,106,1,106,1,106,5,106,4222,8,106,
        10,106,12,106,4225,9,106,1,107,1,107,1,107,1,107,1,107,1,108,1,108,
        1,108,1,108,3,108,4236,8,108,1,108,1,108,3,108,4240,8,108,1,108,
        3,108,4243,8,108,1,109,1,109,1,109,1,109,1,110,1,110,1,110,3,110,
        4252,8,110,1,111,1,111,1,111,1,111,5,111,4258,8,111,10,111,12,111,
        4261,9,111,1,111,1,111,1,111,1,111,1,111,3,111,4268,8,111,1,111,
        3,111,4271,8,111,1,112,1,112,1,112,1,112,3,112,4277,8,112,1,113,
        1,113,3,113,4281,8,113,1,114,1,114,1,114,3,114,4286,8,114,1,114,
        4,114,4289,8,114,11,114,12,114,4290,1,114,1,114,3,114,4295,8,114,
        1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,
        1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,
        1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,
        1,115,1,115,1,115,3,115,4333,8,115,1,116,1,116,1,116,1,116,1,116,
        1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,
        1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,3,116,
        4361,8,116,1,117,1,117,1,117,5,117,4366,8,117,10,117,12,117,4369,
        9,117,1,117,1,117,3,117,4373,8,117,1,117,1,117,1,118,1,118,1,118,
        3,118,4380,8,118,1,119,1,119,1,119,1,119,1,119,1,120,1,120,1,120,
        3,120,4390,8,120,1,120,5,120,4393,8,120,10,120,12,120,4396,9,120,
        1,121,1,121,1,121,1,122,1,122,1,122,3,122,4404,8,122,1,122,1,122,
        3,122,4408,8,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,
        1,123,3,123,4419,8,123,1,123,3,123,4422,8,123,1,124,1,124,3,124,
        4426,8,124,1,124,3,124,4429,8,124,1,124,5,124,4432,8,124,10,124,
        12,124,4435,9,124,1,124,1,124,3,124,4439,8,124,1,125,1,125,3,125,
        4443,8,125,1,125,1,125,1,125,1,125,1,125,1,125,5,125,4451,8,125,
        10,125,12,125,4454,9,125,1,125,1,125,1,126,1,126,1,126,5,126,4461,
        8,126,10,126,12,126,4464,9,126,1,127,1,127,1,127,3,127,4469,8,127,
        1,128,1,128,1,128,1,128,1,128,1,128,1,128,5,128,4478,8,128,10,128,
        12,128,4481,9,128,1,128,1,128,3,128,4485,8,128,1,129,1,129,3,129,
        4489,8,129,1,130,1,130,1,130,1,130,1,130,1,130,3,130,4497,8,130,
        1,131,1,131,1,131,1,131,1,131,1,131,3,131,4505,8,131,1,131,1,131,
        1,131,3,131,4510,8,131,1,131,3,131,4513,8,131,3,131,4515,8,131,1,
        132,3,132,4518,8,132,1,132,1,132,1,132,1,132,1,133,1,133,1,133,3,
        133,4527,8,133,1,133,1,133,1,133,3,133,4532,8,133,1,134,1,134,1,
        134,3,134,4537,8,134,1,134,3,134,4540,8,134,1,134,3,134,4543,8,134,
        1,135,3,135,4546,8,135,1,135,1,135,3,135,4550,8,135,1,135,3,135,
        4553,8,135,1,135,1,135,1,135,1,135,5,135,4559,8,135,10,135,12,135,
        4562,9,135,1,135,1,135,3,135,4566,8,135,1,135,5,135,4569,8,135,10,
        135,12,135,4572,9,135,1,136,1,136,1,136,1,136,3,136,4578,8,136,1,
        137,1,137,1,137,1,138,1,138,1,138,1,138,1,138,3,138,4588,8,138,1,
        139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140,1,140,1,140,
        1,140,4,140,4602,8,140,11,140,12,140,4603,1,140,1,140,1,141,1,141,
        1,141,3,141,4611,8,141,1,142,1,142,1,142,1,142,1,143,1,143,1,143,
        1,143,3,143,4621,8,143,1,144,1,144,1,144,1,144,1,144,1,144,5,144,
        4629,8,144,10,144,12,144,4632,9,144,1,144,1,144,1,144,1,144,3,144,
        4638,8,144,1,144,3,144,4641,8,144,1,144,1,144,1,144,3,144,4646,8,
        144,1,145,1,145,1,145,1,145,1,145,1,145,5,145,4654,8,145,10,145,
        12,145,4657,9,145,1,145,1,145,3,145,4661,8,145,1,145,1,145,1,145,
        1,145,1,145,3,145,4668,8,145,1,145,3,145,4671,8,145,1,145,1,145,
        1,145,3,145,4676,8,145,1,146,3,146,4679,8,146,1,146,3,146,4682,8,
        146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,
        1,146,1,146,1,146,5,146,4697,8,146,10,146,12,146,4700,9,146,1,146,
        1,146,3,146,4704,8,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,
        3,146,4713,8,146,1,146,3,146,4716,8,146,1,146,1,146,1,146,3,146,
        4721,8,146,1,147,3,147,4724,8,147,1,147,1,147,1,148,1,148,1,148,
        3,148,4731,8,148,1,148,3,148,4734,8,148,1,149,1,149,1,149,1,149,
        1,150,3,150,4741,8,150,1,150,4,150,4744,8,150,11,150,12,150,4745,
        1,150,1,150,3,150,4750,8,150,1,151,1,151,1,151,3,151,4755,8,151,
        1,152,1,152,1,152,3,152,4760,8,152,1,153,1,153,1,153,1,153,1,154,
        1,154,1,154,1,154,1,154,1,154,5,154,4772,8,154,10,154,12,154,4775,
        9,154,1,154,1,154,3,154,4779,8,154,1,154,1,154,1,154,1,154,1,154,
        3,154,4786,8,154,1,154,3,154,4789,8,154,1,154,1,154,3,154,4793,8,
        154,1,154,3,154,4796,8,154,1,154,3,154,4799,8,154,1,154,3,154,4802,
        8,154,1,155,1,155,1,155,1,155,1,155,1,155,5,155,4810,8,155,10,155,
        12,155,4813,9,155,1,155,1,155,1,155,3,155,4818,8,155,1,156,1,156,
        1,156,1,156,1,156,1,156,5,156,4826,8,156,10,156,12,156,4829,9,156,
        1,156,1,156,3,156,4833,8,156,1,156,1,156,1,156,1,156,1,156,3,156,
        4840,8,156,1,156,1,156,1,156,1,156,3,156,4846,8,156,1,156,1,156,
        3,156,4850,8,156,1,157,3,157,4853,8,157,1,157,3,157,4856,8,157,1,
        157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,1,157,
        1,157,1,157,5,157,4871,8,157,10,157,12,157,4874,9,157,1,157,1,157,
        3,157,4878,8,157,1,157,1,157,1,157,1,157,1,157,1,157,3,157,4886,
        8,157,1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,159,1,159,1,159,
        5,159,4898,8,159,10,159,12,159,4901,9,159,1,159,1,159,1,160,1,160,
        3,160,4907,8,160,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,163,
        1,163,1,163,1,163,4,163,4920,8,163,11,163,12,163,4921,1,164,1,164,
        1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,1,164,
        1,164,1,164,1,164,1,164,1,164,3,164,4942,8,164,1,164,1,164,1,164,
        1,164,1,164,3,164,4949,8,164,3,164,4951,8,164,1,164,1,164,3,164,
        4955,8,164,1,165,1,165,1,165,1,165,4,165,4961,8,165,11,165,12,165,
        4962,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,3,165,
        4974,8,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,
        3,165,4985,8,165,3,165,4987,8,165,1,166,1,166,1,166,1,166,1,166,
        5,166,4994,8,166,10,166,12,166,4997,9,166,1,167,1,167,1,167,1,167,
        1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,
        1,167,3,167,5015,8,167,1,168,1,168,1,168,1,168,1,169,1,169,1,169,
        3,169,5024,8,169,1,169,3,169,5027,8,169,1,169,1,169,1,169,1,169,
        1,169,1,169,3,169,5035,8,169,1,169,5,169,5038,8,169,10,169,12,169,
        5041,9,169,1,169,3,169,5044,8,169,1,169,3,169,5047,8,169,1,169,3,
        169,5050,8,169,1,169,3,169,5053,8,169,1,169,3,169,5056,8,169,1,169,
        3,169,5059,8,169,1,169,3,169,5062,8,169,1,169,3,169,5065,8,169,1,
        170,1,170,3,170,5069,8,170,1,170,3,170,5072,8,170,1,170,3,170,5075,
        8,170,1,170,5,170,5078,8,170,10,170,12,170,5081,9,170,1,170,3,170,
        5084,8,170,1,170,3,170,5087,8,170,1,170,4,170,5090,8,170,11,170,
        12,170,5091,3,170,5094,8,170,1,171,1,171,1,171,1,172,1,172,1,172,
        1,173,1,173,1,173,1,173,3,173,5106,8,173,1,173,1,173,3,173,5110,
        8,173,1,174,1,174,3,174,5114,8,174,1,175,1,175,1,175,1,175,3,175,
        5120,8,175,1,175,1,175,3,175,5124,8,175,1,175,3,175,5127,8,175,1,
        175,3,175,5130,8,175,1,176,1,176,1,176,1,176,1,176,1,176,5,176,5138,
        8,176,10,176,12,176,5141,9,176,1,176,1,176,1,177,1,177,5,177,5147,
        8,177,10,177,12,177,5150,9,177,1,177,1,177,1,177,1,177,1,177,3,177,
        5157,8,177,1,177,1,177,1,177,1,177,1,177,3,177,5164,8,177,1,177,
        5,177,5167,8,177,10,177,12,177,5170,9,177,1,177,1,177,1,177,1,177,
        1,177,3,177,5177,8,177,1,177,3,177,5180,8,177,1,177,1,177,3,177,
        5184,8,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,3,177,
        5194,8,177,1,177,1,177,1,177,1,177,1,177,5,177,5201,8,177,10,177,
        12,177,5204,9,177,1,177,1,177,1,178,1,178,1,178,3,178,5211,8,178,
        1,178,1,178,3,178,5215,8,178,1,178,3,178,5218,8,178,1,179,1,179,
        1,179,3,179,5223,8,179,1,179,1,179,3,179,5227,8,179,1,179,3,179,
        5230,8,179,1,179,3,179,5233,8,179,1,180,1,180,1,180,1,180,1,180,
        5,180,5240,8,180,10,180,12,180,5243,9,180,1,180,1,180,1,181,1,181,
        1,181,3,181,5250,8,181,1,182,1,182,1,182,3,182,5255,8,182,1,183,
        1,183,1,183,1,183,1,184,1,184,1,184,1,184,1,184,1,185,1,185,1,185,
        1,185,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,5,187,
        5279,8,187,10,187,12,187,5282,9,187,1,188,1,188,1,188,1,188,1,188,
        1,188,1,188,5,188,5291,8,188,10,188,12,188,5294,9,188,1,188,1,188,
        1,188,1,188,5,188,5300,8,188,10,188,12,188,5303,9,188,3,188,5305,
        8,188,1,189,1,189,1,189,1,189,1,189,5,189,5312,8,189,10,189,12,189,
        5315,9,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,3,190,5324,
        8,190,1,190,1,190,1,190,3,190,5329,8,190,1,190,1,190,1,190,1,191,
        1,191,1,191,1,191,1,191,1,191,3,191,5340,8,191,1,191,3,191,5343,
        8,191,3,191,5345,8,191,1,192,1,192,1,192,1,192,3,192,5351,8,192,
        1,192,1,192,1,192,3,192,5356,8,192,1,192,5,192,5359,8,192,10,192,
        12,192,5362,9,192,3,192,5364,8,192,1,193,1,193,1,193,1,193,3,193,
        5370,8,193,1,194,1,194,1,194,3,194,5375,8,194,1,194,3,194,5378,8,
        194,1,194,1,194,1,194,1,194,1,194,3,194,5385,8,194,1,194,1,194,1,
        194,1,194,3,194,5391,8,194,1,194,5,194,5394,8,194,10,194,12,194,
        5397,9,194,1,194,1,194,1,194,3,194,5402,8,194,1,194,1,194,1,194,
        4,194,5407,8,194,11,194,12,194,5408,1,194,3,194,5412,8,194,1,195,
        1,195,1,195,1,195,5,195,5418,8,195,10,195,12,195,5421,9,195,1,195,
        5,195,5424,8,195,10,195,12,195,5427,9,195,1,196,1,196,1,196,3,196,
        5432,8,196,1,196,1,196,3,196,5436,8,196,1,196,3,196,5439,8,196,1,
        196,3,196,5442,8,196,1,197,1,197,1,197,1,197,1,197,1,197,1,198,1,
        198,1,198,5,198,5453,8,198,10,198,12,198,5456,9,198,1,199,1,199,
        1,199,3,199,5461,8,199,1,199,1,199,1,199,1,199,1,199,3,199,5468,
        8,199,1,199,1,199,1,200,1,200,1,200,1,200,1,200,5,200,5477,8,200,
        10,200,12,200,5480,9,200,1,200,1,200,1,201,1,201,1,201,3,201,5487,
        8,201,1,201,1,201,3,201,5491,8,201,1,201,3,201,5494,8,201,1,201,
        5,201,5497,8,201,10,201,12,201,5500,9,201,1,202,1,202,1,202,1,202,
        1,202,1,202,1,202,3,202,5509,8,202,1,202,1,202,1,202,3,202,5514,
        8,202,1,202,5,202,5517,8,202,10,202,12,202,5520,9,202,1,202,1,202,
        3,202,5524,8,202,1,202,1,202,1,202,3,202,5529,8,202,1,202,1,202,
        1,202,3,202,5534,8,202,1,202,1,202,1,202,3,202,5539,8,202,1,202,
        1,202,1,202,3,202,5544,8,202,1,202,1,202,1,202,3,202,5549,8,202,
        1,202,5,202,5552,8,202,10,202,12,202,5555,9,202,3,202,5557,8,202,
        1,202,1,202,1,202,1,202,1,202,5,202,5564,8,202,10,202,12,202,5567,
        9,202,1,202,1,202,3,202,5571,8,202,1,203,1,203,1,203,1,203,1,203,
        1,203,5,203,5579,8,203,10,203,12,203,5582,9,203,1,203,1,203,3,203,
        5586,8,203,1,204,1,204,1,204,1,205,1,205,3,205,5593,8,205,1,205,
        1,205,3,205,5597,8,205,1,206,1,206,1,206,1,206,1,206,1,206,1,206,
        3,206,5606,8,206,1,206,1,206,1,206,1,206,1,206,3,206,5613,8,206,
        1,206,1,206,3,206,5617,8,206,1,207,1,207,1,207,1,207,1,207,3,207,
        5624,8,207,1,207,3,207,5627,8,207,1,207,3,207,5630,8,207,1,207,1,
        207,1,207,1,207,1,207,1,207,3,207,5638,8,207,1,207,1,207,3,207,5642,
        8,207,1,207,3,207,5645,8,207,1,208,1,208,1,208,1,208,5,208,5651,
        8,208,10,208,12,208,5654,9,208,1,209,1,209,1,209,4,209,5659,8,209,
        11,209,12,209,5660,1,210,1,210,1,210,1,210,5,210,5667,8,210,10,210,
        12,210,5670,9,210,1,211,1,211,1,211,1,211,5,211,5676,8,211,10,211,
        12,211,5679,9,211,1,212,1,212,3,212,5683,8,212,1,212,1,212,1,212,
        1,212,1,212,3,212,5690,8,212,1,212,1,212,1,212,3,212,5695,8,212,
        1,212,3,212,5698,8,212,1,212,1,212,3,212,5702,8,212,3,212,5704,8,
        212,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1,214,1,214,3,214,
        5715,8,214,1,215,1,215,1,215,1,215,1,215,1,215,1,215,5,215,5724,
        8,215,10,215,12,215,5727,9,215,1,215,1,215,1,215,1,215,1,215,1,215,
        1,215,1,215,1,215,5,215,5738,8,215,10,215,12,215,5741,9,215,1,215,
        1,215,3,215,5745,8,215,1,216,1,216,1,217,1,217,1,217,1,217,5,217,
        5753,8,217,10,217,12,217,5756,9,217,1,218,1,218,1,218,3,218,5761,
        8,218,1,218,3,218,5764,8,218,1,218,1,218,1,218,3,218,5769,8,218,
        1,218,1,218,1,218,1,218,1,218,5,218,5776,8,218,10,218,12,218,5779,
        9,218,3,218,5781,8,218,1,218,5,218,5784,8,218,10,218,12,218,5787,
        9,218,1,218,3,218,5790,8,218,1,219,1,219,1,219,1,219,1,219,1,219,
        1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,219,
        1,219,1,219,1,219,1,219,1,219,3,219,5814,8,219,3,219,5816,8,219,
        1,220,1,220,3,220,5820,8,220,1,220,3,220,5823,8,220,1,220,1,220,
        1,220,3,220,5828,8,220,1,220,3,220,5831,8,220,1,220,5,220,5834,8,
        220,10,220,12,220,5837,9,220,1,221,1,221,1,221,1,221,1,222,1,222,
        3,222,5845,8,222,1,223,1,223,1,223,1,223,1,223,1,223,1,223,1,223,
        1,223,3,223,5856,8,223,1,223,3,223,5859,8,223,1,223,3,223,5862,8,
        223,1,223,3,223,5865,8,223,1,223,1,223,3,223,5869,8,223,1,223,1,
        223,1,223,1,223,5,223,5875,8,223,10,223,12,223,5878,9,223,4,223,
        5880,8,223,11,223,12,223,5881,1,223,1,223,1,223,1,223,1,223,1,223,
        1,223,1,223,5,223,5892,8,223,10,223,12,223,5895,9,223,3,223,5897,
        8,223,1,224,1,224,1,224,3,224,5902,8,224,1,224,1,224,3,224,5906,
        8,224,1,224,3,224,5909,8,224,1,225,1,225,1,225,1,225,1,225,1,225,
        1,225,3,225,5918,8,225,1,226,1,226,1,226,1,226,3,226,5924,8,226,
        1,226,1,226,1,226,1,226,3,226,5930,8,226,1,226,3,226,5933,8,226,
        1,226,1,226,3,226,5937,8,226,1,226,1,226,1,227,1,227,1,227,1,227,
        1,228,1,228,1,228,1,228,1,229,1,229,1,229,3,229,5952,8,229,1,229,
        3,229,5955,8,229,1,229,3,229,5958,8,229,1,229,1,229,1,229,1,229,
        3,229,5964,8,229,1,229,1,229,1,229,1,229,3,229,5970,8,229,1,229,
        5,229,5973,8,229,10,229,12,229,5976,9,229,1,229,1,229,1,229,3,229,
        5981,8,229,1,230,1,230,1,230,1,230,3,230,5987,8,230,1,230,1,230,
        1,231,1,231,1,231,1,231,3,231,5995,8,231,4,231,5997,8,231,11,231,
        12,231,5998,1,231,1,231,1,232,1,232,1,232,1,232,1,232,1,232,1,233,
        1,233,5,233,6011,8,233,10,233,12,233,6014,9,233,1,234,1,234,1,235,
        1,235,3,235,6020,8,235,1,235,1,235,1,235,1,235,1,235,3,235,6027,
        8,235,1,235,1,235,1,235,1,235,3,235,6033,8,235,1,235,3,235,6036,
        8,235,1,235,1,235,3,235,6040,8,235,1,236,1,236,1,236,3,236,6045,
        8,236,1,237,1,237,1,237,3,237,6050,8,237,1,237,1,237,1,238,1,238,
        3,238,6056,8,238,1,238,1,238,1,238,3,238,6061,8,238,1,238,1,238,
        1,238,3,238,6066,8,238,5,238,6068,8,238,10,238,12,238,6071,9,238,
        1,238,1,238,3,238,6075,8,238,1,239,1,239,1,239,1,239,3,239,6081,
        8,239,1,239,1,239,3,239,6085,8,239,1,239,1,239,1,239,3,239,6090,
        8,239,1,239,1,239,3,239,6094,8,239,5,239,6096,8,239,10,239,12,239,
        6099,9,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,5,239,
        6109,8,239,10,239,12,239,6112,9,239,1,239,1,239,3,239,6116,8,239,
        1,239,3,239,6119,8,239,1,240,1,240,3,240,6123,8,240,1,241,1,241,
        1,241,4,241,6128,8,241,11,241,12,241,6129,1,241,1,241,1,241,1,241,
        3,241,6136,8,241,3,241,6138,8,241,1,242,1,242,3,242,6142,8,242,1,
        242,3,242,6145,8,242,1,242,1,242,1,242,1,242,1,242,3,242,6152,8,
        242,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,3,243,
        6163,8,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,1,243,3,243,
        6173,8,243,5,243,6175,8,243,10,243,12,243,6178,9,243,1,243,1,243,
        3,243,6182,8,243,1,244,1,244,3,244,6186,8,244,1,244,1,244,3,244,
        6190,8,244,1,244,3,244,6193,8,244,1,245,1,245,1,245,1,245,1,245,
        1,245,1,245,5,245,6202,8,245,10,245,12,245,6205,9,245,1,245,1,245,
        3,245,6209,8,245,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,
        5,246,6219,8,246,10,246,12,246,6222,9,246,1,246,1,246,1,246,1,246,
        1,246,5,246,6229,8,246,10,246,12,246,6232,9,246,1,246,1,246,1,246,
        1,246,1,246,1,246,1,246,5,246,6241,8,246,10,246,12,246,6244,9,246,
        1,246,1,246,1,246,3,246,6249,8,246,3,246,6251,8,246,1,247,1,247,
        3,247,6255,8,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,3,247,
        6264,8,247,1,248,1,248,1,248,5,248,6269,8,248,10,248,12,248,6272,
        9,248,1,248,1,248,1,248,1,248,1,248,5,248,6279,8,248,10,248,12,248,
        6282,9,248,3,248,6284,8,248,1,249,1,249,1,249,1,249,1,249,3,249,
        6291,8,249,1,250,1,250,1,250,1,250,5,250,6297,8,250,10,250,12,250,
        6300,9,250,1,250,1,250,1,251,1,251,1,251,1,251,5,251,6308,8,251,
        10,251,12,251,6311,9,251,1,251,1,251,1,252,1,252,3,252,6317,8,252,
        1,252,1,252,5,252,6321,8,252,10,252,12,252,6324,9,252,1,252,3,252,
        6327,8,252,1,253,1,253,1,253,1,253,1,253,1,253,5,253,6335,8,253,
        10,253,12,253,6338,9,253,1,253,1,253,1,253,1,253,1,253,1,253,5,253,
        6346,8,253,10,253,12,253,6349,9,253,1,253,1,253,3,253,6353,8,253,
        1,254,1,254,3,254,6357,8,254,1,254,1,254,3,254,6361,8,254,1,254,
        3,254,6364,8,254,1,254,3,254,6367,8,254,1,255,1,255,1,255,1,255,
        1,255,1,255,5,255,6375,8,255,10,255,12,255,6378,9,255,1,255,1,255,
        3,255,6382,8,255,1,255,1,255,1,255,1,255,5,255,6388,8,255,10,255,
        12,255,6391,9,255,1,255,1,255,1,256,1,256,3,256,6397,8,256,1,256,
        1,256,5,256,6401,8,256,10,256,12,256,6404,9,256,1,256,1,256,3,256,
        6408,8,256,1,257,1,257,1,257,1,257,1,257,1,257,5,257,6416,8,257,
        10,257,12,257,6419,9,257,1,257,1,257,1,257,1,257,1,257,1,257,5,257,
        6427,8,257,10,257,12,257,6430,9,257,1,257,1,257,3,257,6434,8,257,
        1,258,1,258,3,258,6438,8,258,1,258,1,258,3,258,6442,8,258,1,258,
        3,258,6445,8,258,1,258,3,258,6448,8,258,1,259,1,259,1,260,1,260,
        1,260,3,260,6455,8,260,1,260,1,260,1,261,1,261,1,261,1,261,1,261,
        3,261,6464,8,261,1,262,1,262,1,262,1,262,1,262,1,262,4,262,6472,
        8,262,11,262,12,262,6473,1,263,1,263,1,263,1,263,1,263,1,263,1,263,
        1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,1,263,
        1,263,1,263,1,263,3,263,6497,8,263,1,264,1,264,1,265,1,265,1,266,
        1,266,1,266,1,266,1,266,1,266,1,266,3,266,6510,8,266,1,266,1,266,
        1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,266,1,266,5,266,
        6524,8,266,10,266,12,266,6527,9,266,1,267,1,267,1,267,1,267,1,267,
        1,267,1,267,1,267,3,267,6537,8,267,1,268,1,268,1,268,1,268,1,268,
        1,268,3,268,6545,8,268,1,268,1,268,1,268,1,268,3,268,6551,8,268,
        1,268,3,268,6554,8,268,1,269,1,269,1,269,3,269,6559,8,269,1,269,
        1,269,3,269,6563,8,269,1,269,3,269,6566,8,269,1,269,3,269,6569,8,
        269,1,270,1,270,1,270,3,270,6574,8,270,1,271,1,271,1,271,1,271,4,
        271,6580,8,271,11,271,12,271,6581,1,271,1,271,1,271,1,271,1,271,
        1,271,1,271,1,271,1,271,1,271,3,271,6594,8,271,1,272,1,272,1,272,
        1,272,1,272,3,272,6601,8,272,1,273,1,273,1,273,1,273,1,273,3,273,
        6608,8,273,1,273,1,273,1,273,1,274,1,274,1,274,1,274,1,275,1,275,
        1,275,1,275,1,275,1,275,1,275,1,275,5,275,6625,8,275,10,275,12,275,
        6628,9,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,3,275,
        6638,8,275,1,275,3,275,6641,8,275,1,276,1,276,1,276,1,276,4,276,
        6647,8,276,11,276,12,276,6648,1,276,1,276,1,276,1,276,1,276,3,276,
        6656,8,276,1,276,3,276,6659,8,276,3,276,6661,8,276,1,277,1,277,1,
        277,1,277,1,277,1,277,3,277,6669,8,277,1,278,1,278,1,279,1,279,1,
        280,1,280,1,281,1,281,1,281,1,281,1,281,1,281,1,281,3,281,6684,8,
        281,1,281,1,281,1,281,1,281,1,281,1,281,3,281,6692,8,281,1,281,1,
        281,1,281,1,281,1,281,1,281,1,282,1,282,1,282,1,282,1,282,1,282,
        3,282,6706,8,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,
        1,282,4,282,6717,8,282,11,282,12,282,6718,1,283,1,283,1,283,1,283,
        1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,1,283,4,283,
        6735,8,283,11,283,12,283,6736,1,283,1,283,1,283,5,283,6742,8,283,
        10,283,12,283,6745,9,283,1,283,1,283,3,283,6749,8,283,1,284,1,284,
        1,284,1,284,1,284,3,284,6756,8,284,1,284,3,284,6759,8,284,1,285,
        1,285,1,285,3,285,6764,8,285,1,286,1,286,1,286,1,286,1,287,1,287,
        1,287,1,287,3,287,6774,8,287,1,288,1,288,1,288,1,288,1,289,1,289,
        1,289,3,289,6783,8,289,1,289,1,289,1,289,1,290,1,290,1,290,1,291,
        1,291,1,291,5,291,6794,8,291,10,291,12,291,6797,9,291,1,291,1,291,
        1,291,1,291,1,291,5,291,6804,8,291,10,291,12,291,6807,9,291,5,291,
        6809,8,291,10,291,12,291,6812,9,291,3,291,6814,8,291,1,292,1,292,
        1,292,1,292,3,292,6820,8,292,1,293,1,293,1,293,1,294,1,294,1,294,
        1,295,1,295,1,295,1,296,1,296,1,296,1,296,1,296,5,296,6836,8,296,
        10,296,12,296,6839,9,296,3,296,6841,8,296,1,296,3,296,6844,8,296,
        1,297,1,297,1,297,1,297,1,297,1,297,3,297,6852,8,297,1,297,1,297,
        1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,297,3,297,6865,
        8,297,3,297,6867,8,297,1,297,1,297,3,297,6871,8,297,1,297,1,297,
        1,297,1,297,1,297,1,297,3,297,6879,8,297,3,297,6881,8,297,3,297,
        6883,8,297,3,297,6885,8,297,1,298,1,298,1,298,1,298,5,298,6891,8,
        298,10,298,12,298,6894,9,298,1,298,1,298,1,299,1,299,1,299,1,299,
        1,299,1,299,3,299,6904,8,299,1,300,1,300,1,300,1,300,1,300,1,301,
        1,301,1,301,1,301,3,301,6915,8,301,3,301,6917,8,301,1,302,1,302,
        1,302,1,302,1,302,1,302,1,302,3,302,6926,8,302,1,303,1,303,1,303,
        1,303,1,303,1,303,1,303,1,303,1,303,3,303,6937,8,303,1,304,1,304,
        1,304,1,304,3,304,6943,8,304,1,304,1,304,1,304,1,304,1,304,3,304,
        6950,8,304,1,304,1,304,1,304,1,304,1,305,1,305,1,305,1,305,3,305,
        6960,8,305,1,305,1,305,3,305,6964,8,305,1,306,1,306,1,306,1,307,
        1,307,1,307,1,307,3,307,6973,8,307,1,307,3,307,6976,8,307,1,308,
        1,308,1,308,1,308,3,308,6982,8,308,1,308,3,308,6985,8,308,1,308,
        1,308,1,308,3,308,6990,8,308,1,309,1,309,1,309,1,309,3,309,6996,
        8,309,1,309,1,309,1,309,1,309,1,309,1,309,3,309,7004,8,309,1,310,
        1,310,1,310,1,310,3,310,7010,8,310,1,310,1,310,1,310,1,310,3,310,
        7016,8,310,1,310,1,310,1,310,1,310,1,310,1,310,1,311,1,311,1,311,
        1,311,3,311,7028,8,311,1,311,1,311,1,311,1,311,1,311,1,311,3,311,
        7036,8,311,1,312,3,312,7039,8,312,1,312,1,312,1,312,1,312,1,312,
        1,312,1,312,1,312,1,312,3,312,7050,8,312,1,312,1,312,3,312,7054,
        8,312,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,1,313,3,313,
        7065,8,313,1,313,1,313,3,313,7069,8,313,1,314,1,314,1,314,1,314,
        1,314,1,314,1,314,1,314,1,314,3,314,7080,8,314,1,315,1,315,3,315,
        7084,8,315,1,315,1,315,1,315,1,315,3,315,7090,8,315,1,315,3,315,
        7093,8,315,1,315,3,315,7096,8,315,1,315,3,315,7099,8,315,1,315,3,
        315,7102,8,315,1,315,1,315,3,315,7106,8,315,1,315,3,315,7109,8,315,
        1,316,1,316,3,316,7113,8,316,1,316,1,316,1,316,1,316,3,316,7119,
        8,316,1,316,3,316,7122,8,316,1,316,3,316,7125,8,316,1,316,3,316,
        7128,8,316,1,316,3,316,7131,8,316,1,316,1,316,3,316,7135,8,316,1,
        316,3,316,7138,8,316,1,317,1,317,1,318,1,318,1,319,1,319,3,319,7146,
        8,319,1,319,1,319,1,319,3,319,7151,8,319,1,319,3,319,7154,8,319,
        1,319,1,319,3,319,7158,8,319,1,320,1,320,1,320,1,320,1,320,1,320,
        3,320,7166,8,320,1,320,1,320,3,320,7170,8,320,1,321,1,321,3,321,
        7174,8,321,1,321,1,321,1,321,1,321,1,321,1,321,1,321,3,321,7183,
        8,321,1,321,1,321,1,321,1,321,1,321,1,321,1,321,5,321,7192,8,321,
        10,321,12,321,7195,9,321,1,321,1,321,1,321,1,321,3,321,7201,8,321,
        3,321,7203,8,321,1,322,1,322,3,322,7207,8,322,1,322,1,322,1,322,
        1,322,1,322,1,322,1,322,3,322,7216,8,322,1,322,1,322,3,322,7220,
        8,322,1,323,1,323,3,323,7224,8,323,1,323,1,323,1,323,1,323,1,323,
        3,323,7231,8,323,1,323,1,323,1,323,1,323,3,323,7237,8,323,1,324,
        1,324,3,324,7241,8,324,1,324,1,324,1,324,1,324,1,324,3,324,7248,
        8,324,1,324,1,324,1,324,1,324,1,324,1,325,1,325,3,325,7257,8,325,
        1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,3,325,
        7269,8,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,1,325,
        1,325,5,325,7281,8,325,10,325,12,325,7284,9,325,1,325,3,325,7287,
        8,325,3,325,7289,8,325,1,325,3,325,7292,8,325,1,326,1,326,1,326,
        1,326,1,326,3,326,7299,8,326,1,327,1,327,1,327,1,327,1,328,1,328,
        1,328,1,328,1,329,1,329,1,329,1,329,3,329,7313,8,329,1,330,1,330,
        1,330,1,330,1,330,1,330,1,330,3,330,7322,8,330,1,330,3,330,7325,
        8,330,1,330,3,330,7328,8,330,1,330,3,330,7331,8,330,1,331,1,331,
        1,331,1,331,1,331,1,331,3,331,7339,8,331,1,331,1,331,3,331,7343,
        8,331,1,332,1,332,1,332,1,332,1,332,1,332,1,332,3,332,7352,8,332,
        1,332,1,332,3,332,7356,8,332,1,332,1,332,1,332,1,332,1,333,1,333,
        1,333,1,333,1,333,1,333,1,333,1,333,1,333,3,333,7371,8,333,1,333,
        1,333,1,333,1,333,1,334,1,334,3,334,7379,8,334,1,334,1,334,1,334,
        1,334,1,334,1,334,1,335,1,335,1,335,1,335,3,335,7391,8,335,1,336,
        1,336,1,336,1,336,1,337,1,337,1,338,1,338,1,339,1,339,1,340,1,340,
        1,340,1,340,1,340,3,340,7408,8,340,1,340,3,340,7411,8,340,1,340,
        1,340,1,340,3,340,7416,8,340,1,340,1,340,1,340,1,340,1,340,3,340,
        7423,8,340,1,340,1,340,3,340,7427,8,340,1,340,3,340,7430,8,340,1,
        341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,5,341,
        7442,8,341,10,341,12,341,7445,9,341,1,341,1,341,3,341,7449,8,341,
        1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,1,341,5,341,
        7461,8,341,10,341,12,341,7464,9,341,1,341,1,341,3,341,7468,8,341,
        3,341,7470,8,341,1,342,1,342,1,342,1,342,1,342,1,342,1,342,3,342,
        7479,8,342,1,342,1,342,1,342,1,342,1,342,1,342,3,342,7487,8,342,
        1,342,3,342,7490,8,342,1,342,3,342,7493,8,342,1,342,3,342,7496,8,
        342,1,342,3,342,7499,8,342,3,342,7501,8,342,1,343,1,343,3,343,7505,
        8,343,1,343,1,343,3,343,7509,8,343,1,344,1,344,1,344,5,344,7514,
        8,344,10,344,12,344,7517,9,344,1,344,1,344,3,344,7521,8,344,1,344,
        1,344,1,344,3,344,7526,8,344,1,344,5,344,7529,8,344,10,344,12,344,
        7532,9,344,1,344,3,344,7535,8,344,1,344,3,344,7538,8,344,1,344,1,
        344,1,344,3,344,7543,8,344,1,344,1,344,1,344,1,344,4,344,7549,8,
        344,11,344,12,344,7550,1,344,5,344,7554,8,344,10,344,12,344,7557,
        9,344,3,344,7559,8,344,1,345,1,345,1,346,1,346,3,346,7565,8,346,
        1,347,1,347,1,347,3,347,7570,8,347,1,348,1,348,1,348,3,348,7575,
        8,348,1,349,1,349,1,349,1,349,1,349,3,349,7582,8,349,1,349,3,349,
        7585,8,349,1,350,1,350,1,350,1,350,1,350,1,350,1,350,1,350,1,350,
        5,350,7596,8,350,10,350,12,350,7599,9,350,1,350,1,350,1,351,1,351,
        1,351,1,351,5,351,7607,8,351,10,351,12,351,7610,9,351,1,351,1,351,
        1,351,1,351,5,351,7616,8,351,10,351,12,351,7619,9,351,1,351,1,351,
        1,351,1,351,5,351,7625,8,351,10,351,12,351,7628,9,351,1,351,1,351,
        1,351,1,351,5,351,7634,8,351,10,351,12,351,7637,9,351,1,351,1,351,
        1,351,1,351,5,351,7643,8,351,10,351,12,351,7646,9,351,3,351,7648,
        8,351,1,351,1,351,1,351,1,351,3,351,7654,8,351,1,351,1,351,1,351,
        3,351,7659,8,351,3,351,7661,8,351,1,352,1,352,1,353,1,353,1,353,
        3,353,7668,8,353,1,354,1,354,1,355,1,355,1,355,1,355,1,355,1,355,
        1,355,1,355,1,355,1,355,1,356,1,356,1,357,1,357,1,358,1,358,1,359,
        1,359,1,359,1,359,1,360,1,360,1,361,1,361,1,361,1,361,1,361,1,361,
        1,362,1,362,1,362,1,362,1,362,1,362,1,362,1,362,5,362,7708,8,362,
        10,362,12,362,7711,9,362,3,362,7713,8,362,1,362,1,362,3,362,7717,
        8,362,1,362,3,362,7720,8,362,1,362,1,362,1,362,1,362,1,362,1,362,
        1,362,5,362,7729,8,362,10,362,12,362,7732,9,362,1,362,1,362,1,362,
        1,362,5,362,7738,8,362,10,362,12,362,7741,9,362,3,362,7743,8,362,
        3,362,7745,8,362,1,363,1,363,1,364,1,364,1,364,1,364,1,364,1,364,
        3,364,7755,8,364,1,364,1,364,1,364,3,364,7760,8,364,1,364,1,364,
        3,364,7764,8,364,1,364,1,364,3,364,7768,8,364,1,364,3,364,7771,8,
        364,1,364,3,364,7774,8,364,1,365,1,365,1,365,1,365,1,366,1,366,1,
        366,1,366,1,366,1,367,1,367,1,367,3,367,7788,8,367,3,367,7790,8,
        367,1,367,1,367,1,367,1,367,3,367,7796,8,367,3,367,7798,8,367,5,
        367,7800,8,367,10,367,12,367,7803,9,367,1,367,1,367,1,367,3,367,
        7808,8,367,1,367,1,367,1,367,1,367,3,367,7814,8,367,5,367,7816,8,
        367,10,367,12,367,7819,9,367,3,367,7821,8,367,1,368,1,368,1,368,
        1,368,5,368,7827,8,368,10,368,12,368,7830,9,368,1,369,1,369,1,370,
        1,370,1,370,5,370,7837,8,370,10,370,12,370,7840,9,370,1,370,3,370,
        7843,8,370,1,370,1,370,1,371,1,371,1,372,1,372,1,372,1,372,1,372,
        1,372,1,372,1,372,1,372,1,372,1,372,1,372,1,372,3,372,7862,8,372,
        1,373,1,373,1,373,3,373,7867,8,373,1,373,1,373,1,374,1,374,1,374,
        3,374,7874,8,374,1,374,1,374,1,375,1,375,1,375,3,375,7881,8,375,
        1,375,1,375,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,1,376,
        1,376,1,376,1,376,1,376,1,376,1,376,3,376,7955,8,376,1,377,1,377,
        1,377,1,377,1,377,3,377,7962,8,377,1,378,1,378,1,378,1,378,1,378,
        1,378,1,378,3,378,7971,8,378,1,378,1,378,1,378,1,378,1,378,1,378,
        1,378,3,378,7980,8,378,1,378,1,378,1,378,1,378,5,378,7986,8,378,
        10,378,12,378,7989,9,378,1,378,1,378,1,378,1,378,3,378,7995,8,378,
        1,378,1,378,1,378,1,378,1,378,3,378,8002,8,378,1,378,5,378,8005,
        8,378,10,378,12,378,8008,9,378,1,378,1,378,1,378,1,378,3,378,8014,
        8,378,1,378,1,378,1,378,1,378,1,378,3,378,8021,8,378,1,378,5,378,
        8024,8,378,10,378,12,378,8027,9,378,1,378,1,378,1,378,1,378,3,378,
        8033,8,378,1,378,1,378,1,378,1,378,1,378,3,378,8040,8,378,1,378,
        5,378,8043,8,378,10,378,12,378,8046,9,378,1,378,1,378,1,378,1,378,
        3,378,8052,8,378,1,378,1,378,1,378,1,378,1,378,3,378,8059,8,378,
        1,378,5,378,8062,8,378,10,378,12,378,8065,9,378,1,378,1,378,1,378,
        1,378,3,378,8071,8,378,1,378,1,378,1,378,1,378,1,378,3,378,8078,
        8,378,1,378,5,378,8081,8,378,10,378,12,378,8084,9,378,3,378,8086,
        8,378,1,378,3,378,8089,8,378,1,379,1,379,1,379,1,379,1,379,3,379,
        8096,8,379,1,379,1,379,3,379,8100,8,379,1,380,1,380,1,380,1,380,
        1,380,1,380,1,380,3,380,8109,8,380,1,380,1,380,1,381,1,381,1,381,
        1,381,1,381,5,381,8118,8,381,10,381,12,381,8121,9,381,1,381,1,381,
        1,381,1,381,1,381,1,381,3,381,8129,8,381,1,381,1,381,3,381,8133,
        8,381,1,381,1,381,1,381,1,381,1,381,3,381,8140,8,381,3,381,8142,
        8,381,1,382,1,382,1,382,5,382,8147,8,382,10,382,12,382,8150,9,382,
        1,383,1,383,1,383,1,383,1,383,3,383,8157,8,383,1,383,1,383,1,383,
        3,383,8162,8,383,1,383,1,383,3,383,8166,8,383,1,384,1,384,1,384,
        3,384,8171,8,384,1,384,1,384,1,384,1,384,1,384,3,384,8178,8,384,
        3,384,8180,8,384,1,384,1,384,3,384,8184,8,384,1,384,3,384,8187,8,
        384,1,384,3,384,8190,8,384,1,385,1,385,1,385,1,385,1,385,1,386,1,
        386,3,386,8199,8,386,1,386,1,386,1,386,1,386,3,386,8205,8,386,3,
        386,8207,8,386,4,386,8209,8,386,11,386,12,386,8210,1,386,1,386,3,
        386,8215,8,386,1,386,1,386,1,386,3,386,8220,8,386,1,386,1,386,1,
        386,3,386,8225,8,386,5,386,8227,8,386,10,386,12,386,8230,9,386,1,
        386,1,386,1,386,3,386,8235,8,386,1,386,1,386,1,386,3,386,8240,8,
        386,1,386,1,386,1,386,3,386,8245,8,386,1,386,3,386,8248,8,386,1,
        387,1,387,1,387,1,387,1,388,1,388,1,388,3,388,8257,8,388,1,388,3,
        388,8260,8,388,1,388,3,388,8263,8,388,1,389,1,389,1,389,1,389,3,
        389,8269,8,389,1,389,1,389,1,389,1,390,1,390,3,390,8276,8,390,1,
        390,1,390,1,390,3,390,8281,8,390,5,390,8283,8,390,10,390,12,390,
        8286,9,390,1,391,1,391,1,391,3,391,8291,8,391,3,391,8293,8,391,1,
        391,1,391,1,391,1,391,3,391,8299,8,391,3,391,8301,8,391,5,391,8303,
        8,391,10,391,12,391,8306,9,391,1,391,1,391,1,391,1,391,1,391,1,391,
        3,391,8314,8,391,1,392,1,392,1,392,1,392,3,392,8320,8,392,1,392,
        1,392,1,392,1,392,1,392,5,392,8327,8,392,10,392,12,392,8330,9,392,
        1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,1,392,3,392,8341,
        8,392,1,392,1,392,1,392,1,392,1,392,1,392,3,392,8349,8,392,1,392,
        1,392,1,392,1,392,1,392,1,392,1,392,3,392,8358,8,392,1,392,3,392,
        8361,8,392,1,393,1,393,1,393,5,393,8366,8,393,10,393,12,393,8369,
        9,393,1,393,3,393,8372,8,393,1,393,1,393,1,393,1,393,5,393,8378,
        8,393,10,393,12,393,8381,9,393,1,394,1,394,1,394,1,394,3,394,8387,
        8,394,1,394,1,394,1,395,1,395,1,395,1,395,4,395,8395,8,395,11,395,
        12,395,8396,1,395,1,395,1,395,4,395,8402,8,395,11,395,12,395,8403,
        1,396,1,396,1,396,3,396,8409,8,396,1,396,1,396,1,396,1,396,1,396,
        3,396,8416,8,396,1,396,1,396,1,396,1,397,1,397,1,398,1,398,1,399,
        1,399,1,399,1,399,1,399,1,399,1,399,3,399,8432,8,399,1,399,1,399,
        1,399,1,399,1,399,3,399,8439,8,399,1,399,1,399,1,399,1,399,1,399,
        1,399,1,399,1,399,3,399,8449,8,399,1,399,1,399,1,399,1,399,1,399,
        4,399,8456,8,399,11,399,12,399,8457,1,399,1,399,1,400,1,400,1,400,
        1,400,1,400,3,400,8467,8,400,1,400,1,400,1,401,1,401,1,401,1,401,
        1,401,3,401,8476,8,401,1,401,5,401,8479,8,401,10,401,12,401,8482,
        9,401,1,401,1,401,3,401,8486,8,401,1,401,3,401,8489,8,401,1,402,
        1,402,1,402,1,402,1,402,1,402,3,402,8497,8,402,1,402,1,402,1,403,
        1,403,1,403,1,403,1,404,1,404,1,404,3,404,8508,8,404,1,404,1,404,
        3,404,8512,8,404,1,404,3,404,8515,8,404,1,404,1,404,1,404,1,404,
        1,404,1,404,3,404,8523,8,404,1,404,1,404,1,404,1,404,3,404,8529,
        8,404,3,404,8531,8,404,1,404,1,404,1,404,3,404,8536,8,404,1,404,
        3,404,8539,8,404,1,404,1,404,1,404,1,404,1,404,3,404,8546,8,404,
        1,404,1,404,3,404,8550,8,404,1,404,4,404,8553,8,404,11,404,12,404,
        8554,1,404,3,404,8558,8,404,1,404,1,404,1,404,1,404,1,404,1,404,
        1,404,1,404,1,404,1,404,1,404,3,404,8571,8,404,1,404,1,404,3,404,
        8575,8,404,1,405,1,405,1,405,3,405,8580,8,405,1,405,3,405,8583,8,
        405,1,405,1,405,1,405,1,406,1,406,1,406,1,406,1,406,3,406,8593,8,
        406,1,406,1,406,3,406,8597,8,406,1,406,1,406,3,406,8601,8,406,1,
        407,1,407,1,407,3,407,8606,8,407,1,407,1,407,1,408,1,408,1,408,1,
        409,1,409,1,409,1,410,1,410,1,410,1,410,1,411,1,411,3,411,8622,8,
        411,1,412,1,412,1,412,3,412,8627,8,412,1,412,1,412,1,413,1,413,1,
        413,1,413,1,413,1,413,1,413,1,413,3,413,8639,8,413,4,413,8641,8,
        413,11,413,12,413,8642,1,413,1,413,1,413,1,413,3,413,8649,8,413,
        1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,1,413,
        5,413,8662,8,413,10,413,12,413,8665,9,413,3,413,8667,8,413,3,413,
        8669,8,413,3,413,8671,8,413,4,413,8673,8,413,11,413,12,413,8674,
        1,413,3,413,8678,8,413,1,414,1,414,1,414,1,414,1,414,1,414,1,414,
        1,414,1,414,1,414,1,414,1,414,1,414,1,414,1,414,1,414,5,414,8696,
        8,414,10,414,12,414,8699,9,414,1,414,1,414,3,414,8703,8,414,1,414,
        1,414,1,414,3,414,8708,8,414,1,415,1,415,1,415,1,415,1,415,1,415,
        1,415,4,415,8717,8,415,11,415,12,415,8718,1,415,3,415,8722,8,415,
        1,415,1,415,1,416,1,416,1,416,1,416,1,416,1,416,4,416,8732,8,416,
        11,416,12,416,8733,1,417,1,417,1,417,1,417,1,417,4,417,8741,8,417,
        11,417,12,417,8742,1,418,1,418,1,418,1,418,1,418,1,418,1,418,4,418,
        8752,8,418,11,418,12,418,8753,1,419,1,419,1,419,1,419,1,419,5,419,
        8761,8,419,10,419,12,419,8764,9,419,1,419,1,419,3,419,8768,8,419,
        1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,
        1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,1,420,5,420,8790,
        8,420,10,420,12,420,8793,9,420,1,420,1,420,3,420,8797,8,420,1,420,
        1,420,1,420,1,420,3,420,8803,8,420,3,420,8805,8,420,1,421,1,421,
        1,421,1,422,1,422,1,422,3,422,8813,8,422,1,422,3,422,8816,8,422,
        1,422,3,422,8819,8,422,1,422,3,422,8822,8,422,1,422,1,422,1,422,
        1,422,3,422,8828,8,422,1,422,1,422,1,422,1,422,3,422,8834,8,422,
        1,422,1,422,1,422,1,422,3,422,8840,8,422,1,422,1,422,3,422,8844,
        8,422,3,422,8846,8,422,1,422,3,422,8849,8,422,1,422,1,422,1,422,
        3,422,8854,8,422,1,422,1,422,3,422,8858,8,422,1,422,1,422,1,422,
        3,422,8863,8,422,1,422,3,422,8866,8,422,1,423,1,423,1,423,3,423,
        8871,8,423,1,423,3,423,8874,8,423,1,424,1,424,1,424,3,424,8879,8,
        424,1,425,1,425,3,425,8883,8,425,1,425,1,425,5,425,8887,8,425,10,
        425,12,425,8890,9,425,1,425,3,425,8893,8,425,4,425,8895,8,425,11,
        425,12,425,8896,1,425,1,425,1,426,1,426,1,426,1,426,3,426,8905,8,
        426,1,426,1,426,1,426,1,426,1,426,1,426,1,426,1,426,1,426,5,426,
        8916,8,426,10,426,12,426,8919,9,426,1,426,3,426,8922,8,426,1,426,
        1,426,1,426,1,426,3,426,8928,8,426,1,426,3,426,8931,8,426,1,426,
        1,426,3,426,8935,8,426,1,426,1,426,1,426,3,426,8940,8,426,4,426,
        8942,8,426,11,426,12,426,8943,1,426,1,426,5,426,8948,8,426,10,426,
        12,426,8951,9,426,1,427,1,427,3,427,8955,8,427,1,427,3,427,8958,
        8,427,1,427,1,427,1,427,1,427,1,427,1,427,3,427,8966,8,427,1,427,
        3,427,8969,8,427,1,428,1,428,1,428,1,428,1,428,1,428,1,428,3,428,
        8978,8,428,1,428,1,428,3,428,8982,8,428,3,428,8984,8,428,1,429,1,
        429,1,429,1,429,1,429,1,429,1,429,1,429,1,429,1,429,1,429,1,429,
        1,429,1,429,1,429,1,429,1,429,3,429,9003,8,429,1,429,1,429,1,429,
        1,429,3,429,9009,8,429,1,429,4,429,9012,8,429,11,429,12,429,9013,
        1,429,1,429,1,429,3,429,9019,8,429,3,429,9021,8,429,1,430,1,430,
        3,430,9025,8,430,1,430,1,430,1,430,1,430,1,430,5,430,9032,8,430,
        10,430,12,430,9035,9,430,1,430,1,430,1,430,1,430,1,430,1,430,1,430,
        1,430,5,430,9045,8,430,10,430,12,430,9048,9,430,1,430,1,430,1,430,
        1,430,1,430,1,430,1,430,1,430,3,430,9058,8,430,1,430,3,430,9061,
        8,430,1,431,3,431,9064,8,431,1,431,1,431,1,431,1,431,1,431,1,431,
        1,431,4,431,9073,8,431,11,431,12,431,9074,1,432,1,432,1,432,3,432,
        9080,8,432,1,432,1,432,1,432,1,432,1,432,1,432,1,432,1,432,5,432,
        9090,8,432,10,432,12,432,9093,9,432,1,432,1,432,3,432,9097,8,432,
        1,433,1,433,3,433,9101,8,433,1,433,1,433,1,433,1,433,1,433,1,433,
        3,433,9109,8,433,1,433,1,433,1,433,1,433,1,433,3,433,9116,8,433,
        1,433,1,433,1,433,3,433,9121,8,433,1,433,1,433,1,433,3,433,9126,
        8,433,1,434,1,434,1,435,1,435,1,436,1,436,1,436,1,436,1,436,3,436,
        9137,8,436,1,436,3,436,9140,8,436,1,436,1,436,1,436,1,436,1,436,
        1,436,1,436,1,436,1,436,1,436,3,436,9152,8,436,1,436,1,436,1,436,
        1,436,1,436,1,436,1,436,1,436,1,436,1,436,1,436,1,436,1,436,3,436,
        9167,8,436,1,437,1,437,1,437,3,437,9172,8,437,1,437,1,437,1,437,
        1,437,3,437,9178,8,437,1,437,1,437,3,437,9182,8,437,1,437,1,437,
        1,437,1,437,3,437,9188,8,437,1,437,1,437,3,437,9192,8,437,1,437,
        1,437,1,437,1,437,1,437,5,437,9199,8,437,10,437,12,437,9202,9,437,
        1,437,1,437,1,437,1,437,5,437,9208,8,437,10,437,12,437,9211,9,437,
        1,437,1,437,3,437,9215,8,437,1,438,1,438,3,438,9219,8,438,1,438,
        1,438,3,438,9223,8,438,1,439,1,439,1,439,1,439,3,439,9229,8,439,
        1,440,1,440,1,441,1,441,1,441,3,441,9236,8,441,1,441,1,441,1,441,
        1,441,3,441,9242,8,441,1,442,1,442,1,442,1,443,1,443,1,444,1,444,
        3,444,9251,8,444,1,444,1,444,1,444,3,444,9256,8,444,1,445,1,445,
        1,445,1,445,1,445,3,445,9263,8,445,1,445,3,445,9266,8,445,1,445,
        1,445,1,445,1,445,1,445,1,445,1,445,1,445,1,445,1,445,1,445,1,445,
        1,445,1,445,1,445,5,445,9283,8,445,10,445,12,445,9286,9,445,1,446,
        1,446,1,446,1,447,1,447,1,448,1,448,1,448,1,448,1,448,1,448,1,448,
        3,448,9300,8,448,3,448,9302,8,448,1,449,1,449,1,449,1,449,1,449,
        1,450,1,450,1,450,1,450,1,450,1,450,3,450,9315,8,450,1,450,3,450,
        9318,8,450,1,450,3,450,9321,8,450,1,450,3,450,9324,8,450,1,451,1,
        451,1,451,1,451,1,451,1,451,3,451,9332,8,451,1,451,3,451,9335,8,
        451,1,451,3,451,9338,8,451,1,451,3,451,9341,8,451,1,452,1,452,1,
        452,1,453,1,453,1,453,1,453,1,453,1,453,1,453,3,453,9353,8,453,1,
        453,1,453,1,453,1,453,1,453,1,453,1,453,5,453,9362,8,453,10,453,
        12,453,9365,9,453,3,453,9367,8,453,1,453,4,453,9370,8,453,11,453,
        12,453,9371,1,453,1,453,3,453,9376,8,453,1,454,1,454,1,454,1,454,
        1,454,1,454,3,454,9384,8,454,1,454,1,454,1,454,1,454,1,454,1,454,
        1,454,1,454,1,454,1,454,1,454,3,454,9397,8,454,1,455,1,455,3,455,
        9401,8,455,1,455,1,455,3,455,9405,8,455,1,456,1,456,3,456,9409,8,
        456,1,456,3,456,9412,8,456,1,456,3,456,9415,8,456,1,456,3,456,9418,
        8,456,1,456,3,456,9421,8,456,1,457,1,457,1,457,1,457,1,457,1,457,
        1,457,1,457,3,457,9431,8,457,1,457,3,457,9434,8,457,1,458,1,458,
        1,459,1,459,1,459,1,459,1,459,3,459,9443,8,459,1,460,1,460,3,460,
        9447,8,460,1,460,1,460,1,460,1,460,5,460,9453,8,460,10,460,12,460,
        9456,9,460,1,460,1,460,1,460,1,460,1,460,1,460,1,460,1,460,5,460,
        9466,8,460,10,460,12,460,9469,9,460,3,460,9471,8,460,3,460,9473,
        8,460,1,460,1,460,3,460,9477,8,460,1,461,1,461,3,461,9481,8,461,
        1,461,1,461,1,462,1,462,3,462,9487,8,462,1,462,1,462,1,463,3,463,
        9492,8,463,1,463,1,463,3,463,9496,8,463,1,463,3,463,9499,8,463,1,
        463,3,463,9502,8,463,1,464,1,464,1,464,1,464,1,464,5,464,9509,8,
        464,10,464,12,464,9512,9,464,1,464,1,464,3,464,9516,8,464,1,464,
        1,464,3,464,9520,8,464,1,464,1,464,3,464,9524,8,464,1,464,3,464,
        9527,8,464,1,465,1,465,1,465,1,465,1,465,3,465,9534,8,465,1,465,
        3,465,9537,8,465,3,465,9539,8,465,1,466,1,466,1,466,3,466,9544,8,
        466,1,467,1,467,1,467,1,468,1,468,1,468,3,468,9552,8,468,3,468,9554,
        8,468,1,469,1,469,1,469,1,469,1,469,1,469,1,469,1,469,1,469,1,469,
        5,469,9566,8,469,10,469,12,469,9569,9,469,1,469,1,469,1,469,5,469,
        9574,8,469,10,469,12,469,9577,9,469,1,469,1,469,1,469,1,469,1,469,
        1,469,3,469,9585,8,469,1,469,3,469,9588,8,469,1,469,1,469,1,469,
        3,469,9593,8,469,1,469,3,469,9596,8,469,1,469,1,469,1,469,1,469,
        1,469,1,469,1,469,3,469,9605,8,469,1,470,1,470,1,471,1,471,1,471,
        1,471,1,471,1,471,1,471,1,471,1,471,1,471,1,471,1,471,1,471,1,471,
        1,471,1,471,3,471,9625,8,471,1,471,1,471,1,471,1,471,3,471,9631,
        8,471,1,471,1,471,1,471,4,471,9636,8,471,11,471,12,471,9637,1,472,
        1,472,1,473,1,473,1,473,1,473,1,473,1,473,3,473,9648,8,473,1,473,
        1,473,1,474,1,474,1,474,1,474,1,474,3,474,9657,8,474,1,474,1,474,
        1,474,1,474,1,474,1,474,1,474,1,474,1,474,1,474,3,474,9669,8,474,
        1,474,3,474,9672,8,474,1,474,3,474,9675,8,474,1,475,1,475,1,475,
        1,475,1,475,1,476,1,476,1,476,3,476,9685,8,476,1,477,1,477,1,477,
        1,477,1,477,1,477,1,477,3,477,9694,8,477,1,477,1,477,1,477,1,477,
        5,477,9700,8,477,10,477,12,477,9703,9,477,1,477,1,477,3,477,9707,
        8,477,1,477,1,477,1,477,1,477,5,477,9713,8,477,10,477,12,477,9716,
        9,477,1,477,1,477,3,477,9720,8,477,1,477,3,477,9723,8,477,1,478,
        1,478,1,479,1,479,1,480,1,480,1,481,1,481,1,482,1,482,1,482,1,482,
        1,482,1,482,1,482,1,482,1,482,1,482,1,482,4,482,9744,8,482,11,482,
        12,482,9745,3,482,9748,8,482,1,482,3,482,9751,8,482,1,482,1,482,
        3,482,9755,8,482,1,482,1,482,1,482,1,482,1,482,1,482,1,482,1,482,
        3,482,9765,8,482,5,482,9767,8,482,10,482,12,482,9770,9,482,1,482,
        1,482,3,482,9774,8,482,1,482,4,482,9777,8,482,11,482,12,482,9778,
        1,482,1,482,3,482,9783,8,482,3,482,9785,8,482,1,482,3,482,9788,8,
        482,5,482,9790,8,482,10,482,12,482,9793,9,482,1,483,1,483,1,483,
        1,483,1,484,1,484,1,484,3,484,9802,8,484,1,485,1,485,1,485,1,485,
        1,485,1,485,1,485,1,485,3,485,9812,8,485,1,485,3,485,9815,8,485,
        1,485,3,485,9818,8,485,1,485,1,485,3,485,9822,8,485,1,485,1,485,
        3,485,9826,8,485,1,486,1,486,1,486,1,486,1,486,1,486,1,486,1,486,
        1,486,1,486,1,486,3,486,9839,8,486,1,487,1,487,1,487,1,487,1,487,
        1,488,1,488,3,488,9848,8,488,1,488,1,488,1,488,1,488,1,488,1,488,
        1,488,1,488,1,488,3,488,9859,8,488,3,488,9861,8,488,1,489,1,489,
        1,489,1,489,1,489,1,489,1,489,1,489,1,489,4,489,9872,8,489,11,489,
        12,489,9873,1,490,1,490,1,490,3,490,9879,8,490,1,491,1,491,1,491,
        3,491,9884,8,491,1,492,1,492,1,492,5,492,9889,8,492,10,492,12,492,
        9892,9,492,1,493,1,493,1,493,1,493,1,493,1,493,1,494,1,494,1,494,
        1,495,1,495,1,495,1,495,1,495,1,495,3,495,9909,8,495,1,496,1,496,
        1,496,1,496,3,496,9915,8,496,1,497,1,497,1,497,3,497,9920,8,497,
        1,497,1,497,1,497,1,497,1,497,1,497,5,497,9928,8,497,10,497,12,497,
        9931,9,497,1,497,1,497,1,497,3,497,9936,8,497,1,498,1,498,1,498,
        1,498,5,498,9942,8,498,10,498,12,498,9945,9,498,1,498,1,498,1,498,
        3,498,9950,8,498,1,498,1,498,3,498,9954,8,498,1,498,3,498,9957,8,
        498,1,498,1,498,1,499,1,499,1,499,1,499,1,500,1,500,1,500,1,500,
        3,500,9969,8,500,1,501,1,501,1,501,5,501,9974,8,501,10,501,12,501,
        9977,9,501,1,502,1,502,1,502,1,502,1,502,5,502,9984,8,502,10,502,
        12,502,9987,9,502,1,502,1,502,1,503,1,503,1,503,1,503,1,503,1,503,
        1,503,1,503,1,503,1,503,3,503,10001,8,503,1,503,1,503,1,503,3,503,
        10006,8,503,1,504,1,504,1,504,1,505,1,505,1,505,1,505,1,505,1,505,
        5,505,10017,8,505,10,505,12,505,10020,9,505,1,505,1,505,3,505,10024,
        8,505,1,506,1,506,1,506,1,506,1,506,1,506,3,506,10032,8,506,1,506,
        1,506,1,506,3,506,10037,8,506,1,506,1,506,1,506,3,506,10042,8,506,
        5,506,10044,8,506,10,506,12,506,10047,9,506,1,506,1,506,3,506,10051,
        8,506,1,506,1,506,1,506,1,506,1,506,1,506,3,506,10059,8,506,1,506,
        3,506,10062,8,506,1,506,3,506,10065,8,506,1,506,3,506,10068,8,506,
        1,506,3,506,10071,8,506,3,506,10073,8,506,1,506,1,506,1,506,1,506,
        1,506,4,506,10080,8,506,11,506,12,506,10081,5,506,10084,8,506,10,
        506,12,506,10087,9,506,1,506,1,506,1,506,3,506,10092,8,506,1,506,
        3,506,10095,8,506,1,506,1,506,3,506,10099,8,506,1,506,1,506,1,506,
        3,506,10104,8,506,1,506,1,506,1,506,1,507,1,507,1,507,1,507,1,507,
        1,507,1,507,1,507,1,507,3,507,10118,8,507,1,507,1,507,1,508,1,508,
        3,508,10124,8,508,1,508,1,508,3,508,10128,8,508,1,509,1,509,1,509,
        1,509,1,509,1,509,1,509,1,509,1,509,3,509,10139,8,509,1,509,1,509,
        1,509,1,509,3,509,10145,8,509,1,509,1,509,1,509,3,509,10150,8,509,
        1,509,1,509,1,509,3,509,10155,8,509,1,509,1,509,1,509,3,509,10160,
        8,509,1,509,1,509,1,509,4,509,10165,8,509,11,509,12,509,10166,3,
        509,10169,8,509,1,510,1,510,1,510,1,510,1,510,1,510,3,510,10177,
        8,510,1,511,1,511,1,511,3,511,10182,8,511,1,511,1,511,1,511,1,511,
        1,511,1,511,3,511,10190,8,511,1,511,1,511,1,511,1,511,1,511,3,511,
        10197,8,511,1,512,1,512,1,513,1,513,1,513,1,513,1,513,1,513,1,513,
        3,513,10208,8,513,1,513,1,513,1,513,1,513,3,513,10214,8,513,5,513,
        10216,8,513,10,513,12,513,10219,9,513,1,513,1,513,1,513,1,513,1,
        513,1,513,1,513,1,513,1,513,3,513,10230,8,513,1,513,1,513,1,513,
        1,513,1,513,3,513,10237,8,513,5,513,10239,8,513,10,513,12,513,10242,
        9,513,1,513,3,513,10245,8,513,1,513,3,513,10248,8,513,1,513,3,513,
        10251,8,513,1,514,1,514,3,514,10255,8,514,1,514,1,514,1,514,1,514,
        1,514,4,514,10262,8,514,11,514,12,514,10263,1,514,3,514,10267,8,
        514,1,515,1,515,1,515,1,515,1,515,1,515,3,515,10275,8,515,3,515,
        10277,8,515,1,516,1,516,1,516,1,516,3,516,10283,8,516,1,516,1,516,
        1,516,1,516,3,516,10289,8,516,1,516,1,516,1,516,3,516,10294,8,516,
        3,516,10296,8,516,1,517,1,517,1,517,1,517,1,517,1,517,3,517,10304,
        8,517,1,518,1,518,1,518,1,519,1,519,1,519,1,520,1,520,1,520,3,520,
        10315,8,520,1,520,3,520,10318,8,520,1,520,1,520,3,520,10322,8,520,
        1,520,1,520,3,520,10326,8,520,1,520,3,520,10329,8,520,1,520,1,520,
        1,520,3,520,10334,8,520,1,520,1,520,3,520,10338,8,520,1,521,1,521,
        3,521,10342,8,521,1,521,1,521,1,521,1,521,1,521,1,521,1,521,3,521,
        10351,8,521,1,521,1,521,1,521,1,521,3,521,10357,8,521,1,521,1,521,
        1,521,1,521,3,521,10363,8,521,1,522,1,522,1,522,1,522,3,522,10369,
        8,522,1,522,3,522,10372,8,522,1,523,1,523,1,523,1,523,1,523,1,523,
        3,523,10380,8,523,1,523,1,523,3,523,10384,8,523,1,523,1,523,1,523,
        1,523,3,523,10390,8,523,1,523,1,523,1,523,1,523,3,523,10396,8,523,
        1,523,1,523,1,523,1,523,3,523,10402,8,523,1,523,1,523,3,523,10406,
        8,523,3,523,10408,8,523,1,523,1,523,1,523,3,523,10413,8,523,1,523,
        3,523,10416,8,523,1,523,1,523,3,523,10420,8,523,1,523,1,523,3,523,
        10424,8,523,1,524,1,524,1,524,1,524,1,524,1,524,3,524,10432,8,524,
        1,524,1,524,3,524,10436,8,524,1,524,3,524,10439,8,524,1,524,3,524,
        10442,8,524,1,524,1,524,1,524,1,524,3,524,10448,8,524,1,524,3,524,
        10451,8,524,1,524,3,524,10454,8,524,1,524,3,524,10457,8,524,1,524,
        1,524,1,525,1,525,1,525,1,525,1,525,1,525,1,525,1,525,1,525,1,525,
        1,525,1,525,1,525,1,525,1,525,5,525,10476,8,525,10,525,12,525,10479,
        9,525,1,525,1,525,1,526,1,526,3,526,10485,8,526,1,526,1,526,3,526,
        10489,8,526,1,526,3,526,10492,8,526,1,527,1,527,1,527,1,527,1,527,
        3,527,10499,8,527,1,527,1,527,1,527,3,527,10504,8,527,1,527,1,527,
        1,527,1,527,1,527,3,527,10511,8,527,1,527,1,527,1,527,1,527,3,527,
        10517,8,527,3,527,10519,8,527,1,527,1,527,1,527,1,527,3,527,10525,
        8,527,1,528,1,528,3,528,10529,8,528,1,528,1,528,1,528,1,528,1,528,
        3,528,10536,8,528,1,528,1,528,1,528,3,528,10541,8,528,1,529,1,529,
        1,529,1,529,3,529,10547,8,529,1,529,1,529,3,529,10551,8,529,1,529,
        1,529,1,529,1,529,5,529,10557,8,529,10,529,12,529,10560,9,529,1,
        529,1,529,3,529,10564,8,529,1,529,1,529,1,529,1,529,3,529,10570,
        8,529,1,529,3,529,10573,8,529,1,529,3,529,10576,8,529,1,529,3,529,
        10579,8,529,1,529,1,529,1,530,1,530,1,531,1,531,3,531,10587,8,531,
        1,531,1,531,1,531,1,531,4,531,10593,8,531,11,531,12,531,10594,1,
        531,1,531,1,532,1,532,1,532,1,532,1,532,1,532,1,532,3,532,10606,
        8,532,1,533,1,533,3,533,10610,8,533,1,533,1,533,3,533,10614,8,533,
        1,533,1,533,1,533,5,533,10619,8,533,10,533,12,533,10622,9,533,1,
        533,3,533,10625,8,533,1,533,1,533,1,533,3,533,10630,8,533,1,534,
        3,534,10633,8,534,1,534,1,534,1,534,1,534,1,534,1,535,1,535,1,535,
        1,535,5,535,10644,8,535,10,535,12,535,10647,9,535,1,535,1,535,3,
        535,10651,8,535,1,535,1,535,3,535,10655,8,535,1,535,1,535,1,535,
        3,535,10660,8,535,1,535,1,535,1,535,1,535,3,535,10666,8,535,1,535,
        1,535,1,535,1,535,3,535,10672,8,535,1,535,3,535,10675,8,535,1,535,
        1,535,1,536,3,536,10680,8,536,1,536,3,536,10683,8,536,1,537,1,537,
        1,537,1,537,1,537,1,537,1,537,3,537,10692,8,537,1,538,1,538,1,538,
        3,538,10697,8,538,1,538,1,538,1,538,1,538,1,538,1,538,3,538,10705,
        8,538,3,538,10707,8,538,1,539,1,539,1,539,1,539,1,540,1,540,1,540,
        1,540,1,540,1,540,1,540,3,540,10720,8,540,1,541,1,541,1,541,3,541,
        10725,8,541,1,541,1,541,1,541,1,541,1,541,1,541,3,541,10733,8,541,
        3,541,10735,8,541,1,542,1,542,1,542,1,542,1,542,1,542,1,543,1,543,
        1,544,3,544,10746,8,544,1,544,3,544,10749,8,544,1,544,3,544,10752,
        8,544,1,544,3,544,10755,8,544,1,544,3,544,10758,8,544,1,544,3,544,
        10761,8,544,1,544,3,544,10764,8,544,1,544,3,544,10767,8,544,1,544,
        3,544,10770,8,544,1,544,3,544,10773,8,544,1,544,5,544,10776,8,544,
        10,544,12,544,10779,9,544,1,544,3,544,10782,8,544,1,544,3,544,10785,
        8,544,1,544,3,544,10788,8,544,1,544,3,544,10791,8,544,1,544,1,544,
        3,544,10795,8,544,1,544,1,544,1,544,1,544,1,544,1,544,1,544,1,544,
        1,544,3,544,10806,8,544,1,544,3,544,10809,8,544,1,545,1,545,1,545,
        1,546,1,546,1,546,1,547,1,547,3,547,10819,8,547,1,547,1,547,3,547,
        10823,8,547,1,547,1,547,3,547,10827,8,547,1,547,3,547,10830,8,547,
        1,547,1,547,1,547,3,547,10835,8,547,1,547,3,547,10838,8,547,1,548,
        1,548,1,548,3,548,10843,8,548,1,548,1,548,1,548,1,548,5,548,10849,
        8,548,10,548,12,548,10852,9,548,1,549,1,549,1,549,1,549,3,549,10858,
        8,549,1,549,1,549,1,549,1,549,1,549,1,549,1,550,1,550,1,551,1,551,
        3,551,10870,8,551,1,551,1,551,1,551,1,552,1,552,1,552,1,552,1,552,
        5,552,10880,8,552,10,552,12,552,10883,9,552,1,552,1,552,3,552,10887,
        8,552,1,553,1,553,1,553,1,553,5,553,10893,8,553,10,553,12,553,10896,
        9,553,1,553,1,553,1,554,1,554,1,555,1,555,1,555,1,555,1,555,1,555,
        1,555,3,555,10909,8,555,1,555,1,555,1,555,3,555,10914,8,555,1,556,
        1,556,1,556,1,556,1,556,1,556,1,556,1,556,1,556,3,556,10925,8,556,
        1,556,3,556,10928,8,556,3,556,10930,8,556,1,557,1,557,1,558,1,558,
        1,558,1,558,1,558,1,558,3,558,10940,8,558,1,559,1,559,1,559,1,559,
        1,559,1,559,1,559,1,559,3,559,10950,8,559,1,560,1,560,1,560,1,560,
        1,560,1,560,1,560,5,560,10959,8,560,10,560,12,560,10962,9,560,1,
        560,1,560,1,560,1,560,1,560,1,560,1,560,1,560,1,560,1,560,1,560,
        5,560,10975,8,560,10,560,12,560,10978,9,560,1,560,1,560,3,560,10982,
        8,560,3,560,10984,8,560,1,560,1,560,1,560,3,560,10989,8,560,1,560,
        1,560,1,560,1,560,1,560,3,560,10996,8,560,1,560,1,560,1,560,5,560,
        11001,8,560,10,560,12,560,11004,9,560,1,560,1,560,1,561,1,561,1,
        561,1,561,1,561,1,561,1,561,1,561,1,561,3,561,11017,8,561,1,561,
        1,561,1,561,1,561,1,561,3,561,11024,8,561,1,561,1,561,1,561,5,561,
        11029,8,561,10,561,12,561,11032,9,561,1,561,1,561,1,562,1,562,1,
        562,1,562,1,562,1,562,1,562,5,562,11043,8,562,10,562,12,562,11046,
        9,562,1,562,1,562,1,562,3,562,11051,8,562,1,563,1,563,1,563,3,563,
        11056,8,563,1,563,3,563,11059,8,563,1,563,1,563,1,563,3,563,11064,
        8,563,1,563,3,563,11067,8,563,5,563,11069,8,563,10,563,12,563,11072,
        9,563,1,563,1,563,1,564,1,564,1,564,1,564,1,564,1,564,1,564,1,564,
        5,564,11084,8,564,10,564,12,564,11087,9,564,1,564,1,564,3,564,11091,
        8,564,1,564,1,564,3,564,11095,8,564,1,564,1,564,1,564,1,564,1,564,
        1,564,1,564,5,564,11104,8,564,10,564,12,564,11107,9,564,1,564,1,
        564,3,564,11111,8,564,1,565,1,565,1,566,1,566,1,566,1,566,1,566,
        1,566,1,566,5,566,11122,8,566,10,566,12,566,11125,9,566,1,566,1,
        566,1,566,1,566,1,566,1,566,1,566,1,566,1,566,1,566,1,566,5,566,
        11138,8,566,10,566,12,566,11141,9,566,1,566,1,566,3,566,11145,8,
        566,3,566,11147,8,566,1,566,1,566,1,566,3,566,11152,8,566,1,566,
        1,566,1,566,1,566,5,566,11158,8,566,10,566,12,566,11161,9,566,1,
        566,1,566,1,567,1,567,1,567,1,567,1,567,1,567,1,567,1,567,1,567,
        3,567,11174,8,567,1,567,1,567,1,567,1,567,5,567,11180,8,567,10,567,
        12,567,11183,9,567,1,567,1,567,1,568,1,568,1,568,1,568,1,568,1,568,
        4,568,11193,8,568,11,568,12,568,11194,1,568,1,568,1,568,1,568,3,
        568,11201,8,568,1,568,1,568,3,568,11205,8,568,1,569,1,569,1,569,
        1,569,1,569,1,569,1,569,1,569,1,569,1,569,5,569,11217,8,569,10,569,
        12,569,11220,9,569,1,569,1,569,3,569,11224,8,569,1,570,1,570,3,570,
        11228,8,570,1,570,1,570,1,571,1,571,1,571,1,571,1,571,1,571,1,571,
        1,571,5,571,11240,8,571,10,571,12,571,11243,9,571,3,571,11245,8,
        571,1,572,1,572,3,572,11249,8,572,1,572,3,572,11252,8,572,1,572,
        1,572,1,572,1,572,1,572,5,572,11259,8,572,10,572,12,572,11262,9,
        572,1,572,1,572,1,572,5,572,11267,8,572,10,572,12,572,11270,9,572,
        1,572,1,572,1,572,5,572,11275,8,572,10,572,12,572,11278,9,572,3,
        572,11280,8,572,1,572,1,572,1,572,3,572,11285,8,572,3,572,11287,
        8,572,1,573,1,573,3,573,11291,8,573,1,573,3,573,11294,8,573,1,573,
        1,573,1,573,1,573,1,573,5,573,11301,8,573,10,573,12,573,11304,9,
        573,1,573,1,573,1,573,5,573,11309,8,573,10,573,12,573,11312,9,573,
        1,573,1,573,1,573,5,573,11317,8,573,10,573,12,573,11320,9,573,3,
        573,11322,8,573,1,573,1,573,1,573,3,573,11327,8,573,3,573,11329,
        8,573,1,574,1,574,1,574,1,574,1,574,1,574,5,574,11337,8,574,10,574,
        12,574,11340,9,574,1,574,1,574,1,574,5,574,11345,8,574,10,574,12,
        574,11348,9,574,1,574,1,574,1,574,5,574,11353,8,574,10,574,12,574,
        11356,9,574,3,574,11358,8,574,1,574,1,574,1,574,3,574,11363,8,574,
        1,575,1,575,1,576,1,576,1,576,1,576,1,576,1,576,1,576,5,576,11374,
        8,576,10,576,12,576,11377,9,576,1,576,1,576,3,576,11381,8,576,1,
        577,1,577,1,577,1,577,1,577,1,577,1,577,3,577,11390,8,577,1,578,
        1,578,1,578,1,578,1,578,1,578,1,578,5,578,11399,8,578,10,578,12,
        578,11402,9,578,1,578,1,578,1,578,1,578,1,578,1,578,1,578,1,578,
        1,578,5,578,11413,8,578,10,578,12,578,11416,9,578,1,578,1,578,3,
        578,11420,8,578,1,578,3,578,11423,8,578,1,579,1,579,1,580,1,580,
        3,580,11429,8,580,1,580,1,580,3,580,11433,8,580,1,581,1,581,3,581,
        11437,8,581,1,581,1,581,3,581,11441,8,581,1,582,1,582,3,582,11445,
        8,582,1,582,3,582,11448,8,582,1,583,1,583,1,583,1,583,1,583,1,583,
        1,583,1,583,5,583,11458,8,583,10,583,12,583,11461,9,583,1,583,1,
        583,3,583,11465,8,583,1,584,1,584,1,584,1,584,1,584,1,584,1,584,
        1,585,1,585,1,585,5,585,11477,8,585,10,585,12,585,11480,9,585,1,
        585,1,585,1,585,1,585,1,585,5,585,11487,8,585,10,585,12,585,11490,
        9,585,3,585,11492,8,585,1,586,1,586,1,586,1,586,1,586,5,586,11499,
        8,586,10,586,12,586,11502,9,586,1,586,1,586,1,586,1,586,1,586,5,
        586,11509,8,586,10,586,12,586,11512,9,586,1,586,3,586,11515,8,586,
        1,586,1,586,1,587,3,587,11520,8,587,1,587,3,587,11523,8,587,1,587,
        1,587,3,587,11527,8,587,1,587,1,587,3,587,11531,8,587,3,587,11533,
        8,587,1,587,1,587,1,587,5,587,11538,8,587,10,587,12,587,11541,9,
        587,1,588,1,588,1,588,1,588,1,588,3,588,11548,8,588,1,588,1,588,
        1,588,1,588,1,588,1,588,1,588,1,588,3,588,11558,8,588,1,588,1,588,
        1,588,4,588,11563,8,588,11,588,12,588,11564,1,589,1,589,1,589,1,
        589,1,589,1,589,1,589,3,589,11574,8,589,1,589,1,589,1,589,1,589,
        1,589,1,589,3,589,11582,8,589,1,589,1,589,1,589,1,589,1,589,3,589,
        11589,8,589,1,590,1,590,1,590,3,590,11594,8,590,1,590,1,590,3,590,
        11598,8,590,1,590,1,590,1,590,3,590,11603,8,590,1,590,1,590,1,590,
        3,590,11608,8,590,1,590,3,590,11611,8,590,1,590,3,590,11614,8,590,
        1,590,3,590,11617,8,590,3,590,11619,8,590,1,590,1,590,3,590,11623,
        8,590,1,590,3,590,11626,8,590,1,591,1,591,3,591,11630,8,591,1,592,
        1,592,1,592,1,592,1,592,1,592,3,592,11638,8,592,3,592,11640,8,592,
        3,592,11642,8,592,1,592,3,592,11645,8,592,1,593,4,593,11648,8,593,
        11,593,12,593,11649,1,593,1,593,3,593,11654,8,593,1,593,1,593,3,
        593,11658,8,593,1,593,5,593,11661,8,593,10,593,12,593,11664,9,593,
        3,593,11666,8,593,1,594,1,594,3,594,11670,8,594,1,594,3,594,11673,
        8,594,1,594,3,594,11676,8,594,1,594,1,594,3,594,11680,8,594,1,594,
        3,594,11683,8,594,1,594,1,594,3,594,11687,8,594,1,594,3,594,11690,
        8,594,1,595,1,595,1,595,1,595,1,595,3,595,11697,8,595,3,595,11699,
        8,595,1,595,1,595,3,595,11703,8,595,1,596,1,596,1,596,1,597,1,597,
        1,597,1,597,1,597,1,597,1,597,3,597,11715,8,597,3,597,11717,8,597,
        1,597,1,597,1,597,1,597,1,597,1,597,3,597,11725,8,597,3,597,11727,
        8,597,1,598,1,598,3,598,11731,8,598,1,598,1,598,3,598,11735,8,598,
        1,599,1,599,3,599,11739,8,599,1,599,1,599,3,599,11743,8,599,1,599,
        1,599,1,599,1,599,1,600,1,600,1,600,1,600,1,600,1,600,1,600,1,600,
        1,600,1,600,1,600,1,600,4,600,11761,8,600,11,600,12,600,11762,1,
        601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,
        1,601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,3,601,11785,
        8,601,1,601,1,601,1,601,1,601,1,601,1,601,1,601,4,601,11794,8,601,
        11,601,12,601,11795,1,601,1,601,1,602,1,602,1,602,1,602,1,603,1,
        603,1,603,1,603,3,603,11808,8,603,1,603,3,603,11811,8,603,1,603,
        1,603,4,603,11815,8,603,11,603,12,603,11816,1,604,3,604,11820,8,
        604,1,604,1,604,3,604,11824,8,604,1,604,3,604,11827,8,604,1,604,
        3,604,11830,8,604,1,604,3,604,11833,8,604,1,604,1,604,1,604,3,604,
        11838,8,604,1,604,1,604,1,604,3,604,11843,8,604,1,604,1,604,1,604,
        3,604,11848,8,604,1,604,1,604,1,604,1,604,1,604,1,604,3,604,11856,
        8,604,3,604,11858,8,604,1,604,1,604,1,604,1,604,1,604,1,604,5,604,
        11866,8,604,10,604,12,604,11869,9,604,1,604,1,604,3,604,11873,8,
        604,1,605,1,605,1,605,1,605,1,605,1,605,1,605,1,605,1,605,1,605,
        3,605,11885,8,605,1,606,1,606,1,606,3,606,11890,8,606,1,607,1,607,
        1,607,1,607,1,607,1,607,1,607,1,607,1,607,1,607,3,607,11902,8,607,
        1,607,1,607,1,607,1,607,1,607,1,607,1,607,3,607,11911,8,607,1,608,
        1,608,1,608,1,608,3,608,11917,8,608,1,608,1,608,3,608,11921,8,608,
        1,608,1,608,1,608,3,608,11926,8,608,1,608,3,608,11929,8,608,1,609,
        1,609,1,609,1,609,1,609,1,609,3,609,11937,8,609,1,609,1,609,3,609,
        11941,8,609,1,610,1,610,1,611,1,611,1,611,3,611,11948,8,611,1,611,
        1,611,1,611,1,611,1,611,3,611,11955,8,611,1,611,3,611,11958,8,611,
        1,611,1,611,1,612,1,612,1,612,1,613,3,613,11966,8,613,1,613,3,613,
        11969,8,613,1,613,3,613,11972,8,613,1,614,1,614,1,614,3,614,11977,
        8,614,1,614,1,614,1,614,1,614,1,614,1,614,3,614,11985,8,614,3,614,
        11987,8,614,1,614,3,614,11990,8,614,1,615,1,615,1,616,1,616,1,616,
        3,616,11997,8,616,1,616,1,616,1,616,1,616,1,616,1,616,1,616,1,616,
        1,616,1,616,1,616,1,616,3,616,12011,8,616,3,616,12013,8,616,1,616,
        1,616,1,616,1,616,1,616,1,616,1,616,1,616,1,616,1,616,5,616,12025,
        8,616,10,616,12,616,12028,9,616,1,616,1,616,3,616,12032,8,616,1,
        617,1,617,1,618,3,618,12037,8,618,1,618,1,618,1,618,1,619,1,619,
        1,619,3,619,12045,8,619,1,619,1,619,1,619,3,619,12050,8,619,1,620,
        1,620,1,621,1,621,1,621,1,621,1,621,3,621,12059,8,621,1,621,1,621,
        1,621,1,621,1,621,3,621,12066,8,621,5,621,12068,8,621,10,621,12,
        621,12071,9,621,1,621,1,621,1,621,1,621,1,621,1,621,3,621,12079,
        8,621,1,621,1,621,1,621,1,621,1,621,1,621,3,621,12087,8,621,5,621,
        12089,8,621,10,621,12,621,12092,9,621,3,621,12094,8,621,1,622,1,
        622,1,622,1,622,1,622,1,622,3,622,12102,8,622,1,622,1,622,1,622,
        1,622,3,622,12108,8,622,5,622,12110,8,622,10,622,12,622,12113,9,
        622,1,622,1,622,3,622,12117,8,622,1,623,1,623,1,623,3,623,12122,
        8,623,1,623,1,623,1,623,1,623,1,623,1,623,3,623,12130,8,623,4,623,
        12132,8,623,11,623,12,623,12133,1,623,1,623,1,623,1,624,1,624,1,
        624,1,624,1,624,1,624,1,624,1,624,1,624,4,624,12148,8,624,11,624,
        12,624,12149,1,624,3,624,12153,8,624,1,625,1,625,1,625,1,625,3,625,
        12159,8,625,1,626,1,626,1,626,3,626,12164,8,626,1,626,3,626,12167,
        8,626,1,627,3,627,12170,8,627,1,627,1,627,1,628,1,628,3,628,12176,
        8,628,1,628,1,628,1,628,1,628,1,628,1,629,1,629,1,629,1,629,3,629,
        12187,8,629,1,630,1,630,1,630,1,630,1,630,3,630,12194,8,630,1,630,
        3,630,12197,8,630,1,631,1,631,1,631,1,631,1,631,3,631,12204,8,631,
        1,631,1,631,3,631,12208,8,631,3,631,12210,8,631,1,631,3,631,12213,
        8,631,1,632,1,632,1,632,1,632,1,632,3,632,12220,8,632,1,633,1,633,
        1,633,1,633,3,633,12226,8,633,1,633,1,633,3,633,12230,8,633,1,634,
        1,634,1,634,1,634,1,634,3,634,12237,8,634,1,634,1,634,3,634,12241,
        8,634,1,635,1,635,1,635,1,635,1,635,1,635,1,635,1,636,1,636,1,637,
        1,637,1,638,1,638,3,638,12256,8,638,1,638,1,638,1,638,1,638,3,638,
        12262,8,638,1,638,1,638,1,638,1,639,1,639,1,639,3,639,12270,8,639,
        1,639,1,639,1,639,1,639,1,639,1,639,1,639,3,639,12279,8,639,1,639,
        1,639,1,639,3,639,12284,8,639,1,639,1,639,1,639,3,639,12289,8,639,
        1,639,1,639,1,639,1,639,3,639,12295,8,639,1,639,1,639,1,639,1,639,
        1,639,3,639,12302,8,639,1,639,1,639,1,639,1,639,1,639,3,639,12309,
        8,639,1,639,3,639,12312,8,639,3,639,12314,8,639,1,640,1,640,3,640,
        12318,8,640,1,640,1,640,1,640,1,640,3,640,12324,8,640,1,640,1,640,
        3,640,12328,8,640,1,641,1,641,1,641,1,641,3,641,12334,8,641,1,641,
        1,641,1,641,1,641,3,641,12340,8,641,1,641,1,641,3,641,12344,8,641,
        1,641,3,641,12347,8,641,1,642,1,642,1,643,1,643,1,644,1,644,1,644,
        1,644,1,644,1,644,1,644,1,645,1,645,1,645,1,645,1,645,1,645,1,645,
        1,645,1,646,1,646,1,646,1,646,1,646,1,646,3,646,12374,8,646,1,646,
        1,646,1,646,1,646,1,646,1,646,1,646,3,646,12383,8,646,1,647,1,647,
        1,647,1,647,1,647,1,647,1,647,3,647,12392,8,647,1,647,1,647,1,647,
        1,647,1,647,1,647,5,647,12400,8,647,10,647,12,647,12403,9,647,1,
        647,1,647,1,648,1,648,1,648,3,648,12410,8,648,1,648,1,648,1,648,
        3,648,12415,8,648,1,648,1,648,1,649,1,649,1,649,5,649,12422,8,649,
        10,649,12,649,12425,9,649,1,650,1,650,1,650,1,650,1,650,1,650,1,
        650,3,650,12434,8,650,1,650,1,650,1,650,1,650,1,650,1,650,5,650,
        12442,8,650,10,650,12,650,12445,9,650,1,650,1,650,1,651,1,651,1,
        651,1,651,1,651,1,651,3,651,12455,8,651,1,651,1,651,1,651,1,651,
        1,651,3,651,12462,8,651,1,652,1,652,1,652,1,652,1,652,3,652,12469,
        8,652,1,652,3,652,12472,8,652,1,652,3,652,12475,8,652,1,652,3,652,
        12478,8,652,1,652,1,652,3,652,12482,8,652,3,652,12484,8,652,1,652,
        3,652,12487,8,652,1,652,3,652,12490,8,652,1,652,3,652,12493,8,652,
        1,652,3,652,12496,8,652,1,652,1,652,3,652,12500,8,652,3,652,12502,
        8,652,1,652,1,652,1,652,1,652,1,652,1,652,3,652,12510,8,652,3,652,
        12512,8,652,1,653,1,653,1,653,1,653,1,653,1,653,1,653,1,653,1,653,
        4,653,12523,8,653,11,653,12,653,12524,1,653,3,653,12528,8,653,1,
        654,1,654,1,654,1,654,1,654,1,654,3,654,12536,8,654,1,654,1,654,
        1,655,1,655,1,655,1,655,1,655,1,655,3,655,12546,8,655,1,655,1,655,
        1,656,1,656,1,656,1,656,1,656,1,657,1,657,1,657,1,657,1,657,1,658,
        1,658,1,658,1,658,1,658,1,658,1,658,3,658,12567,8,658,3,658,12569,
        8,658,1,659,1,659,1,659,1,659,1,660,1,660,1,660,1,660,1,661,1,661,
        1,661,1,661,3,661,12583,8,661,1,661,1,661,3,661,12587,8,661,1,661,
        3,661,12590,8,661,1,662,1,662,1,662,1,662,3,662,12596,8,662,1,663,
        1,663,1,663,1,663,1,663,3,663,12603,8,663,1,664,1,664,1,665,1,665,
        1,666,1,666,1,666,1,666,1,666,1,666,1,666,1,666,1,666,1,666,1,666,
        1,666,1,666,1,666,1,666,1,666,1,666,3,666,12626,8,666,1,667,3,667,
        12629,8,667,1,667,1,667,3,667,12633,8,667,1,668,1,668,1,668,3,668,
        12638,8,668,1,668,1,668,1,668,3,668,12643,8,668,1,668,3,668,12646,
        8,668,1,668,3,668,12649,8,668,1,668,1,668,1,668,3,668,12654,8,668,
        1,669,1,669,1,670,1,670,1,671,1,671,1,671,1,671,1,671,3,671,12665,
        8,671,1,672,1,672,1,673,1,673,3,673,12671,8,673,1,673,1,673,3,673,
        12675,8,673,1,673,1,673,1,673,1,673,3,673,12681,8,673,1,673,1,673,
        1,673,1,673,1,673,4,673,12688,8,673,11,673,12,673,12689,3,673,12692,
        8,673,1,673,1,673,3,673,12696,8,673,1,673,3,673,12699,8,673,1,674,
        3,674,12702,8,674,1,674,1,674,1,674,1,674,1,674,1,674,1,674,1,674,
        3,674,12712,8,674,1,674,1,674,1,674,1,674,1,674,1,674,4,674,12720,
        8,674,11,674,12,674,12721,3,674,12724,8,674,1,675,1,675,1,675,1,
        675,5,675,12730,8,675,10,675,12,675,12733,9,675,1,675,1,675,1,675,
        1,675,1,675,1,675,5,675,12741,8,675,10,675,12,675,12744,9,675,1,
        675,3,675,12747,8,675,1,676,1,676,1,676,1,676,1,676,1,676,5,676,
        12755,8,676,10,676,12,676,12758,9,676,1,676,1,676,1,676,1,676,1,
        676,1,676,5,676,12766,8,676,10,676,12,676,12769,9,676,3,676,12771,
        8,676,1,676,1,676,1,676,3,676,12776,8,676,1,676,1,676,1,677,1,677,
        1,677,1,677,1,677,1,677,1,677,1,677,1,677,1,677,3,677,12790,8,677,
        1,677,1,677,1,677,1,677,1,677,1,677,1,677,4,677,12799,8,677,11,677,
        12,677,12800,1,677,1,677,3,677,12805,8,677,1,677,1,677,1,677,1,677,
        1,677,1,677,3,677,12813,8,677,3,677,12815,8,677,1,678,1,678,1,679,
        1,679,1,679,1,679,1,679,5,679,12824,8,679,10,679,12,679,12827,9,
        679,1,679,1,679,1,679,1,679,1,679,1,679,1,679,3,679,12836,8,679,
        1,680,1,680,1,680,1,680,3,680,12842,8,680,1,680,1,680,1,680,3,680,
        12847,8,680,5,680,12849,8,680,10,680,12,680,12852,9,680,1,680,1,
        680,3,680,12856,8,680,1,681,1,681,1,681,3,681,12861,8,681,1,681,
        1,681,1,681,3,681,12866,8,681,5,681,12868,8,681,10,681,12,681,12871,
        9,681,1,681,1,681,1,681,1,681,3,681,12877,8,681,1,681,1,681,1,681,
        1,681,1,681,3,681,12884,8,681,1,682,1,682,1,682,3,682,12889,8,682,
        1,682,1,682,1,682,3,682,12894,8,682,5,682,12896,8,682,10,682,12,
        682,12899,9,682,1,682,1,682,1,682,1,682,1,682,1,682,1,682,1,682,
        3,682,12909,8,682,1,683,1,683,1,683,1,683,3,683,12915,8,683,1,683,
        1,683,1,683,3,683,12920,8,683,5,683,12922,8,683,10,683,12,683,12925,
        9,683,1,683,1,683,3,683,12929,8,683,1,683,3,683,12932,8,683,1,683,
        3,683,12935,8,683,1,684,1,684,3,684,12939,8,684,1,684,3,684,12942,
        8,684,1,684,3,684,12945,8,684,1,684,1,684,1,684,1,684,1,684,1,684,
        1,684,1,684,1,684,1,684,3,684,12957,8,684,1,684,1,684,1,684,1,684,
        1,684,5,684,12964,8,684,10,684,12,684,12967,9,684,1,684,1,684,1,
        684,1,684,1,684,3,684,12974,8,684,1,684,1,684,1,684,1,684,5,684,
        12980,8,684,10,684,12,684,12983,9,684,1,684,1,684,3,684,12987,8,
        684,1,684,1,684,1,684,1,684,3,684,12993,8,684,1,685,1,685,3,685,
        12997,8,685,1,685,1,685,1,685,1,685,1,685,3,685,13004,8,685,1,685,
        4,685,13007,8,685,11,685,12,685,13008,1,685,1,685,1,685,3,685,13014,
        8,685,1,685,1,685,1,685,3,685,13019,8,685,5,685,13021,8,685,10,685,
        12,685,13024,9,685,1,685,1,685,1,685,1,685,5,685,13030,8,685,10,
        685,12,685,13033,9,685,3,685,13035,8,685,1,686,1,686,3,686,13039,
        8,686,1,686,1,686,1,687,1,687,3,687,13045,8,687,1,687,1,687,1,687,
        1,687,5,687,13051,8,687,10,687,12,687,13054,9,687,1,687,1,687,1,
        687,1,687,5,687,13060,8,687,10,687,12,687,13063,9,687,3,687,13065,
        8,687,1,688,1,688,1,688,1,688,1,688,1,688,1,688,1,689,1,689,1,689,
        1,689,1,689,1,689,3,689,13080,8,689,1,690,1,690,1,691,1,691,1,691,
        1,691,1,691,1,692,1,692,1,692,1,692,1,692,1,692,5,692,13095,8,692,
        10,692,12,692,13098,9,692,1,692,1,692,1,692,3,692,13103,8,692,1,
        693,1,693,3,693,13107,8,693,1,693,1,693,1,693,1,693,1,693,3,693,
        13114,8,693,1,693,1,693,1,693,1,693,1,693,3,693,13121,8,693,1,693,
        3,693,13124,8,693,3,693,13126,8,693,1,694,1,694,1,694,1,694,3,694,
        13132,8,694,3,694,13134,8,694,1,694,3,694,13137,8,694,1,695,1,695,
        1,695,1,695,1,695,1,695,1,695,3,695,13146,8,695,1,695,3,695,13149,
        8,695,1,696,1,696,3,696,13153,8,696,1,696,1,696,1,696,1,696,3,696,
        13159,8,696,1,697,1,697,1,697,1,697,1,697,1,697,1,697,1,698,1,698,
        1,698,3,698,13171,8,698,1,698,1,698,1,698,1,699,1,699,1,699,1,699,
        1,699,3,699,13181,8,699,1,699,1,699,3,699,13185,8,699,1,699,3,699,
        13188,8,699,1,699,3,699,13191,8,699,1,699,1,699,1,699,3,699,13196,
        8,699,1,699,1,699,3,699,13200,8,699,1,699,1,699,3,699,13204,8,699,
        1,699,3,699,13207,8,699,1,700,1,700,1,700,1,700,1,700,3,700,13214,
        8,700,1,700,3,700,13217,8,700,1,700,1,700,1,700,1,700,1,700,3,700,
        13224,8,700,1,700,1,700,1,700,1,700,3,700,13230,8,700,1,701,1,701,
        1,701,1,701,1,701,1,702,1,702,1,702,1,702,1,702,1,703,1,703,1,703,
        1,703,1,703,1,703,1,703,1,703,1,703,1,703,1,703,1,703,1,703,1,703,
        1,703,1,703,3,703,13258,8,703,1,703,1,703,1,703,1,703,1,703,1,703,
        4,703,13266,8,703,11,703,12,703,13267,1,703,1,703,1,703,1,703,1,
        703,1,703,1,703,1,703,3,703,13278,8,703,3,703,13280,8,703,1,703,
        1,703,1,703,1,703,1,703,1,703,3,703,13288,8,703,1,704,1,704,1,704,
        1,704,1,704,1,705,1,705,1,705,1,705,1,706,1,706,1,706,1,707,1,707,
        1,708,1,708,1,709,1,709,1,710,1,710,1,711,1,711,1,712,1,712,1,712,
        1,712,1,712,1,712,1,712,3,712,13319,8,712,1,712,1,712,1,712,3,712,
        13324,8,712,1,713,1,713,1,713,1,713,1,713,1,714,1,714,1,714,1,714,
        1,714,1,715,1,715,3,715,13338,8,715,1,716,1,716,1,716,1,716,1,716,
        1,717,1,717,1,717,1,717,1,717,1,718,1,718,1,718,1,718,1,718,1,718,
        1,719,1,719,1,719,1,719,1,720,1,720,3,720,13362,8,720,1,720,3,720,
        13365,8,720,1,720,1,720,1,720,1,720,1,720,1,720,1,720,1,720,1,720,
        1,720,3,720,13377,8,720,1,720,3,720,13380,8,720,1,721,1,721,1,721,
        1,721,3,721,13386,8,721,1,722,1,722,1,722,1,722,1,722,1,722,1,722,
        1,723,1,723,1,723,1,723,1,723,1,723,1,723,1,723,1,723,1,723,1,723,
        1,723,1,723,3,723,13408,8,723,1,723,1,723,1,723,1,723,1,723,1,723,
        1,723,1,723,1,723,1,723,1,723,3,723,13421,8,723,1,723,1,723,1,723,
        1,723,1,723,1,723,1,723,5,723,13430,8,723,10,723,12,723,13433,9,
        723,1,723,4,723,13436,8,723,11,723,12,723,13437,1,724,1,724,1,724,
        1,724,5,724,13444,8,724,10,724,12,724,13447,9,724,1,724,1,724,1,
        724,1,724,1,724,1,724,3,724,13455,8,724,1,725,1,725,3,725,13459,
        8,725,1,725,1,725,1,726,1,726,1,726,1,726,3,726,13467,8,726,1,726,
        1,726,1,726,1,726,5,726,13473,8,726,10,726,12,726,13476,9,726,1,
        726,1,726,1,726,3,726,13481,8,726,1,727,1,727,1,727,1,727,1,727,
        3,727,13488,8,727,1,727,1,727,3,727,13492,8,727,1,727,1,727,3,727,
        13496,8,727,3,727,13498,8,727,1,727,3,727,13501,8,727,1,728,1,728,
        1,728,1,728,1,728,1,728,5,728,13509,8,728,10,728,12,728,13512,9,
        728,1,728,1,728,1,728,3,728,13517,8,728,1,729,1,729,1,729,3,729,
        13522,8,729,1,730,1,730,1,730,1,730,4,730,13528,8,730,11,730,12,
        730,13529,1,731,1,731,1,731,1,731,1,732,1,732,1,732,1,732,1,732,
        3,732,13541,8,732,1,732,3,732,13544,8,732,1,733,3,733,13547,8,733,
        1,733,1,733,1,733,1,733,1,733,1,733,1,733,1,733,3,733,13557,8,733,
        1,733,1,733,1,733,1,733,1,733,5,733,13564,8,733,10,733,12,733,13567,
        9,733,3,733,13569,8,733,1,733,3,733,13572,8,733,1,734,3,734,13575,
        8,734,1,734,1,734,1,734,1,734,1,734,1,734,1,734,5,734,13584,8,734,
        10,734,12,734,13587,9,734,3,734,13589,8,734,1,735,1,735,1,735,1,
        735,3,735,13595,8,735,1,735,3,735,13598,8,735,1,736,1,736,3,736,
        13602,8,736,1,736,3,736,13605,8,736,1,736,1,736,1,736,1,736,1,736,
        1,736,1,736,1,736,1,736,1,736,1,736,3,736,13618,8,736,3,736,13620,
        8,736,1,736,5,736,13623,8,736,10,736,12,736,13626,9,736,1,736,1,
        736,3,736,13630,8,736,1,737,1,737,3,737,13634,8,737,1,737,1,737,
        1,737,1,737,1,738,1,738,1,738,1,738,1,738,1,738,1,739,1,739,1,739,
        1,739,1,739,1,739,1,739,1,739,1,739,1,739,1,739,3,739,13657,8,739,
        1,739,1,739,1,739,1,739,1,739,1,739,1,739,1,739,1,739,1,739,1,739,
        1,739,1,739,1,739,3,739,13673,8,739,1,740,1,740,1,740,3,740,13678,
        8,740,1,740,1,740,3,740,13682,8,740,1,740,1,740,3,740,13686,8,740,
        1,740,1,740,3,740,13690,8,740,1,740,3,740,13693,8,740,1,740,1,740,
        1,740,3,740,13698,8,740,3,740,13700,8,740,1,741,1,741,1,741,1,741,
        1,741,1,741,1,741,1,741,1,741,1,741,5,741,13712,8,741,10,741,12,
        741,13715,9,741,1,741,1,741,3,741,13719,8,741,1,742,1,742,1,742,
        1,742,1,742,3,742,13726,8,742,1,743,1,743,1,743,1,743,1,743,1,743,
        1,743,1,743,1,743,3,743,13737,8,743,1,743,1,743,1,743,1,743,3,743,
        13743,8,743,3,743,13745,8,743,3,743,13747,8,743,1,744,1,744,1,744,
        1,744,5,744,13753,8,744,10,744,12,744,13756,9,744,1,744,1,744,1,
        744,1,744,1,744,1,744,3,744,13764,8,744,1,744,1,744,1,744,1,744,
        1,744,1,744,3,744,13772,8,744,4,744,13774,8,744,11,744,12,744,13775,
        3,744,13778,8,744,1,745,3,745,13781,8,745,1,745,1,745,1,745,1,745,
        1,746,1,746,1,746,1,746,1,746,1,746,1,746,1,746,1,746,1,746,1,746,
        3,746,13798,8,746,1,747,1,747,1,747,1,747,1,747,1,747,1,747,1,747,
        1,747,3,747,13809,8,747,1,748,1,748,1,748,1,748,1,748,3,748,13816,
        8,748,1,748,1,748,3,748,13820,8,748,1,748,3,748,13823,8,748,1,748,
        3,748,13826,8,748,3,748,13828,8,748,1,749,1,749,1,749,3,749,13833,
        8,749,1,749,1,749,3,749,13837,8,749,3,749,13839,8,749,1,750,1,750,
        1,750,1,750,1,750,1,750,1,750,1,750,1,750,1,751,1,751,1,751,1,751,
        1,751,3,751,13855,8,751,1,751,1,751,3,751,13859,8,751,1,751,3,751,
        13862,8,751,1,751,1,751,1,751,3,751,13867,8,751,1,751,3,751,13870,
        8,751,1,751,3,751,13873,8,751,1,752,1,752,1,752,1,752,1,752,1,752,
        1,752,5,752,13882,8,752,10,752,12,752,13885,9,752,1,752,1,752,1,
        752,1,752,1,752,1,752,5,752,13893,8,752,10,752,12,752,13896,9,752,
        1,752,1,752,1,752,1,752,1,752,1,752,1,752,5,752,13905,8,752,10,752,
        12,752,13908,9,752,1,752,1,752,1,752,5,752,13913,8,752,10,752,12,
        752,13916,9,752,3,752,13918,8,752,1,752,1,752,3,752,13922,8,752,
        1,752,1,752,3,752,13926,8,752,1,753,1,753,1,753,3,753,13931,8,753,
        1,753,1,753,3,753,13935,8,753,1,753,3,753,13938,8,753,1,753,3,753,
        13941,8,753,1,753,3,753,13944,8,753,1,753,1,753,3,753,13948,8,753,
        3,753,13950,8,753,1,754,1,754,1,754,1,754,1,754,1,754,1,754,1,754,
        3,754,13960,8,754,1,754,1,754,3,754,13964,8,754,1,755,1,755,1,755,
        3,755,13969,8,755,1,755,1,755,1,755,3,755,13974,8,755,1,756,1,756,
        1,756,1,756,1,756,3,756,13981,8,756,1,756,1,756,1,757,1,757,1,757,
        1,757,5,757,13989,8,757,10,757,12,757,13992,9,757,1,757,1,757,1,
        757,1,757,5,757,13998,8,757,10,757,12,757,14001,9,757,1,757,1,757,
        1,757,1,757,3,757,14007,8,757,1,757,1,757,1,757,5,757,14012,8,757,
        10,757,12,757,14015,9,757,1,757,3,757,14018,8,757,3,757,14020,8,
        757,1,758,1,758,1,758,1,758,3,758,14026,8,758,1,758,1,758,1,758,
        1,758,5,758,14032,8,758,10,758,12,758,14035,9,758,1,758,1,758,1,
        758,1,758,3,758,14041,8,758,1,758,1,758,1,758,5,758,14046,8,758,
        10,758,12,758,14049,9,758,1,758,3,758,14052,8,758,3,758,14054,8,
        758,1,759,1,759,1,759,1,759,1,759,1,759,1,759,1,759,1,759,1,759,
        1,759,1,759,1,759,1,759,1,759,1,759,1,759,1,759,4,759,14074,8,759,
        11,759,12,759,14075,1,759,3,759,14079,8,759,1,760,1,760,1,760,1,
        760,3,760,14085,8,760,1,761,1,761,1,761,1,761,3,761,14091,8,761,
        1,762,1,762,1,762,1,762,1,762,1,762,4,762,14099,8,762,11,762,12,
        762,14100,3,762,14103,8,762,1,763,1,763,1,763,3,763,14108,8,763,
        1,763,1,763,1,763,3,763,14113,8,763,1,763,1,763,1,763,3,763,14118,
        8,763,5,763,14120,8,763,10,763,12,763,14123,9,763,1,763,3,763,14126,
        8,763,1,764,1,764,3,764,14130,8,764,1,765,1,765,1,765,1,765,1,766,
        1,766,1,766,1,766,1,766,1,766,3,766,14142,8,766,1,767,1,767,1,767,
        1,767,3,767,14148,8,767,1,767,1,767,1,767,5,767,14153,8,767,10,767,
        12,767,14156,9,767,1,768,1,768,3,768,14160,8,768,1,768,1,768,5,768,
        14164,8,768,10,768,12,768,14167,9,768,1,769,1,769,3,769,14171,8,
        769,1,769,1,769,3,769,14175,8,769,1,769,1,769,5,769,14179,8,769,
        10,769,12,769,14182,9,769,1,770,1,770,3,770,14186,8,770,1,770,1,
        770,1,770,1,770,1,770,5,770,14193,8,770,10,770,12,770,14196,9,770,
        1,770,1,770,1,770,1,770,1,770,1,770,3,770,14204,8,770,1,770,3,770,
        14207,8,770,1,770,3,770,14210,8,770,1,770,3,770,14213,8,770,1,770,
        1,770,3,770,14217,8,770,1,771,1,771,1,771,1,771,1,771,1,771,1,771,
        1,771,3,771,14227,8,771,1,772,1,772,1,772,1,772,1,772,3,772,14234,
        8,772,1,772,1,772,1,772,1,772,1,772,4,772,14241,8,772,11,772,12,
        772,14242,1,773,1,773,1,774,1,774,1,774,1,774,1,775,1,775,3,775,
        14253,8,775,1,775,3,775,14256,8,775,1,775,3,775,14259,8,775,1,775,
        3,775,14262,8,775,1,775,1,775,5,775,14266,8,775,10,775,12,775,14269,
        9,775,1,775,3,775,14272,8,775,1,776,1,776,1,776,1,776,4,776,14278,
        8,776,11,776,12,776,14279,1,776,3,776,14283,8,776,1,776,3,776,14286,
        8,776,1,777,1,777,1,777,3,777,14291,8,777,1,778,1,778,1,778,3,778,
        14296,8,778,1,779,1,779,3,779,14300,8,779,1,779,1,779,3,779,14304,
        8,779,1,780,1,780,1,780,1,780,3,780,14310,8,780,1,781,1,781,1,781,
        1,781,1,781,1,781,1,781,1,781,1,782,1,782,1,783,1,783,1,783,1,783,
        1,783,1,783,1,784,1,784,1,785,1,785,1,786,1,786,1,786,1,786,4,786,
        14336,8,786,11,786,12,786,14337,1,787,1,787,1,787,1,787,1,787,1,
        787,1,787,1,787,5,787,14348,8,787,10,787,12,787,14351,9,787,1,787,
        1,787,3,787,14355,8,787,1,787,1,787,1,787,5,787,14360,8,787,10,787,
        12,787,14363,9,787,1,787,1,787,1,787,1,787,1,787,1,787,1,787,5,787,
        14372,8,787,10,787,12,787,14375,9,787,1,787,1,787,3,787,14379,8,
        787,1,787,1,787,1,787,5,787,14384,8,787,10,787,12,787,14387,9,787,
        1,787,1,787,3,787,14391,8,787,1,787,1,787,1,787,1,787,1,787,3,787,
        14398,8,787,1,787,1,787,3,787,14402,8,787,1,788,1,788,1,788,1,788,
        1,788,5,788,14409,8,788,10,788,12,788,14412,9,788,1,788,1,788,1,
        788,1,788,1,788,1,788,5,788,14420,8,788,10,788,12,788,14423,9,788,
        1,788,1,788,1,788,1,788,1,788,3,788,14430,8,788,1,789,1,789,3,789,
        14434,8,789,1,789,1,789,3,789,14438,8,789,1,789,1,789,1,789,3,789,
        14443,8,789,1,789,5,789,14446,8,789,10,789,12,789,14449,9,789,1,
        789,3,789,14452,8,789,1,790,1,790,1,790,1,791,1,791,1,791,3,791,
        14460,8,791,1,791,1,791,1,791,1,791,1,791,3,791,14467,8,791,1,792,
        1,792,1,792,1,792,3,792,14473,8,792,1,792,1,792,1,792,3,792,14478,
        8,792,5,792,14480,8,792,10,792,12,792,14483,9,792,1,792,1,792,1,
        792,1,792,3,792,14489,8,792,3,792,14491,8,792,1,792,3,792,14494,
        8,792,1,793,1,793,1,793,1,793,1,793,1,793,1,793,1,794,1,794,1,794,
        3,794,14506,8,794,1,794,1,794,3,794,14510,8,794,1,795,1,795,1,795,
        3,795,14515,8,795,1,795,1,795,3,795,14519,8,795,1,795,1,795,1,795,
        1,795,1,795,3,795,14526,8,795,1,796,1,796,1,797,1,797,1,797,3,797,
        14533,8,797,1,798,1,798,1,798,1,798,3,798,14539,8,798,1,798,3,798,
        14542,8,798,1,799,1,799,1,799,1,799,1,799,5,799,14549,8,799,10,799,
        12,799,14552,9,799,1,799,1,799,1,799,1,799,1,799,1,799,5,799,14560,
        8,799,10,799,12,799,14563,9,799,1,799,4,799,14566,8,799,11,799,12,
        799,14567,1,799,1,799,1,799,1,799,1,799,1,799,1,799,1,799,1,799,
        5,799,14579,8,799,10,799,12,799,14582,9,799,1,799,4,799,14585,8,
        799,11,799,12,799,14586,3,799,14589,8,799,1,800,1,800,1,800,1,800,
        1,800,1,800,1,800,1,800,1,800,1,801,1,801,1,801,1,801,1,801,1,801,
        1,801,1,801,1,801,1,801,1,801,1,801,1,801,1,801,1,801,1,801,3,801,
        14616,8,801,1,801,3,801,14619,8,801,1,801,1,801,1,801,4,801,14624,
        8,801,11,801,12,801,14625,1,802,1,802,1,802,1,802,1,802,1,802,1,
        802,1,802,1,802,1,802,1,802,1,802,1,802,1,802,1,802,1,802,1,802,
        1,802,1,802,1,802,3,802,14648,8,802,1,802,3,802,14651,8,802,4,802,
        14653,8,802,11,802,12,802,14654,1,803,1,803,1,804,1,804,1,804,3,
        804,14662,8,804,3,804,14664,8,804,1,805,1,805,1,805,1,805,1,805,
        1,805,3,805,14672,8,805,1,806,1,806,3,806,14676,8,806,1,806,1,806,
        1,806,3,806,14681,8,806,1,806,3,806,14684,8,806,1,806,3,806,14687,
        8,806,1,806,3,806,14690,8,806,1,807,1,807,1,808,1,808,1,808,3,808,
        14697,8,808,1,808,1,808,1,808,3,808,14702,8,808,1,808,1,808,1,809,
        1,809,1,809,1,809,3,809,14710,8,809,1,809,1,809,1,809,1,809,5,809,
        14716,8,809,10,809,12,809,14719,9,809,1,809,1,809,3,809,14723,8,
        809,1,809,4,809,14726,8,809,11,809,12,809,14727,1,810,1,810,1,810,
        1,810,1,810,1,810,1,810,1,810,1,810,1,810,1,810,1,810,1,810,1,810,
        4,810,14744,8,810,11,810,12,810,14745,1,810,1,810,1,810,1,810,1,
        810,1,810,1,810,1,810,1,810,1,810,1,810,4,810,14759,8,810,11,810,
        12,810,14760,3,810,14763,8,810,1,811,1,811,1,811,1,811,1,811,1,811,
        1,811,1,811,1,811,1,811,3,811,14775,8,811,1,812,1,812,1,813,1,813,
        1,814,1,814,1,814,3,814,14784,8,814,1,814,1,814,3,814,14788,8,814,
        3,814,14790,8,814,1,814,3,814,14793,8,814,1,814,3,814,14796,8,814,
        1,814,1,814,1,814,3,814,14801,8,814,1,814,1,814,3,814,14805,8,814,
        1,814,1,814,3,814,14809,8,814,1,814,4,814,14812,8,814,11,814,12,
        814,14813,1,814,3,814,14817,8,814,1,815,1,815,1,816,1,816,1,816,
        1,816,1,816,1,816,3,816,14827,8,816,3,816,14829,8,816,1,816,1,816,
        1,816,3,816,14834,8,816,1,817,4,817,14837,8,817,11,817,12,817,14838,
        1,817,1,817,4,817,14843,8,817,11,817,12,817,14844,1,817,1,817,3,
        817,14849,8,817,1,818,1,818,1,818,1,818,1,818,3,818,14856,8,818,
        1,818,1,818,1,818,1,818,1,818,1,818,1,818,1,818,1,818,1,818,1,818,
        1,818,1,818,1,818,1,818,1,818,3,818,14874,8,818,1,819,1,819,1,819,
        1,819,1,819,3,819,14881,8,819,1,819,3,819,14884,8,819,1,819,3,819,
        14887,8,819,1,819,3,819,14890,8,819,1,819,3,819,14893,8,819,1,819,
        1,819,1,819,1,819,1,819,1,819,3,819,14901,8,819,3,819,14903,8,819,
        1,819,1,819,1,819,1,819,1,819,1,819,1,819,3,819,14912,8,819,3,819,
        14914,8,819,1,819,5,819,14917,8,819,10,819,12,819,14920,9,819,1,
        820,1,820,1,820,1,820,1,820,1,820,3,820,14928,8,820,3,820,14930,
        8,820,1,820,1,820,1,820,1,820,1,820,5,820,14937,8,820,10,820,12,
        820,14940,9,820,1,820,3,820,14943,8,820,1,821,1,821,1,821,1,821,
        1,821,1,821,3,821,14951,8,821,1,822,1,822,1,822,1,823,1,823,1,823,
        1,823,3,823,14960,8,823,1,823,3,823,14963,8,823,1,823,3,823,14966,
        8,823,1,823,1,823,1,823,1,823,1,823,1,823,1,823,1,823,1,823,1,823,
        4,823,14978,8,823,11,823,12,823,14979,1,823,1,823,3,823,14984,8,
        823,1,823,1,823,3,823,14988,8,823,1,823,3,823,14991,8,823,1,824,
        1,824,1,825,3,825,14996,8,825,1,825,1,825,1,825,3,825,15001,8,825,
        1,825,1,825,1,825,1,825,1,825,3,825,15008,8,825,1,825,1,825,1,825,
        1,825,3,825,15014,8,825,1,826,1,826,3,826,15018,8,826,1,827,1,827,
        1,827,1,827,3,827,15024,8,827,1,828,1,828,1,829,1,829,1,829,1,829,
        1,830,1,830,1,830,1,830,1,830,5,830,15037,8,830,10,830,12,830,15040,
        9,830,1,830,3,830,15043,8,830,1,830,1,830,1,830,1,830,1,830,3,830,
        15050,8,830,1,830,1,830,1,830,1,830,1,830,1,830,1,830,1,830,1,830,
        1,830,5,830,15062,8,830,10,830,12,830,15065,9,830,1,830,1,830,3,
        830,15069,8,830,1,830,1,830,3,830,15073,8,830,1,830,1,830,1,830,
        1,830,1,830,1,830,1,830,4,830,15082,8,830,11,830,12,830,15083,3,
        830,15086,8,830,1,831,1,831,1,832,1,832,1,833,1,833,1,833,1,833,
        1,833,1,833,1,833,1,833,5,833,15100,8,833,10,833,12,833,15103,9,
        833,1,833,1,833,1,833,1,833,3,833,15109,8,833,1,833,3,833,15112,
        8,833,1,833,1,833,3,833,15116,8,833,1,833,3,833,15119,8,833,1,834,
        1,834,1,834,3,834,15124,8,834,1,834,1,834,1,834,1,834,3,834,15130,
        8,834,1,834,4,834,15133,8,834,11,834,12,834,15134,1,835,1,835,1,
        835,1,835,3,835,15141,8,835,1,836,1,836,1,836,1,836,1,836,3,836,
        15148,8,836,1,837,1,837,1,837,1,837,1,838,1,838,1,838,1,838,1,839,
        1,839,1,839,1,839,1,840,1,840,1,840,1,840,1,840,3,840,15167,8,840,
        1,841,1,841,1,841,3,841,15172,8,841,1,841,1,841,1,841,1,841,1,841,
        3,841,15179,8,841,3,841,15181,8,841,1,842,1,842,1,842,1,842,1,842,
        3,842,15188,8,842,1,843,1,843,1,843,3,843,15193,8,843,1,844,1,844,
        1,844,1,844,3,844,15199,8,844,1,845,1,845,3,845,15203,8,845,1,845,
        1,845,1,845,1,845,4,845,15209,8,845,11,845,12,845,15210,3,845,15213,
        8,845,1,845,1,845,1,846,1,846,1,846,1,847,1,847,3,847,15222,8,847,
        1,848,1,848,1,848,1,848,1,848,1,849,1,849,1,849,3,849,15232,8,849,
        1,849,1,849,1,849,1,849,1,849,1,849,1,849,1,849,1,849,3,849,15243,
        8,849,3,849,15245,8,849,1,849,3,849,15248,8,849,1,849,1,849,3,849,
        15252,8,849,1,849,3,849,15255,8,849,1,850,1,850,1,850,1,850,1,850,
        1,850,1,851,1,851,1,851,1,851,1,851,5,851,15268,8,851,10,851,12,
        851,15271,9,851,1,851,1,851,1,852,1,852,1,852,1,852,3,852,15279,
        8,852,1,852,1,852,3,852,15283,8,852,1,852,3,852,15286,8,852,1,852,
        1,852,3,852,15290,8,852,1,852,3,852,15293,8,852,3,852,15295,8,852,
        1,853,1,853,3,853,15299,8,853,1,853,1,853,1,853,1,853,1,853,3,853,
        15306,8,853,1,854,1,854,5,854,15310,8,854,10,854,12,854,15313,9,
        854,1,854,3,854,15316,8,854,1,854,3,854,15319,8,854,1,855,1,855,
        1,855,1,856,4,856,15325,8,856,11,856,12,856,15326,1,857,1,857,1,
        857,1,857,1,857,1,857,1,857,1,857,1,857,1,857,1,857,3,857,15340,
        8,857,1,858,1,858,3,858,15344,8,858,1,858,1,858,3,858,15348,8,858,
        1,858,3,858,15351,8,858,1,858,3,858,15354,8,858,1,858,1,858,1,859,
        1,859,1,859,1,859,1,859,1,859,1,859,1,859,1,859,3,859,15367,8,859,
        1,859,1,859,3,859,15371,8,859,1,859,1,859,1,860,1,860,1,860,1,860,
        1,860,1,860,5,860,15381,8,860,10,860,12,860,15384,9,860,1,860,1,
        860,3,860,15388,8,860,1,860,1,860,3,860,15392,8,860,1,860,1,860,
        3,860,15396,8,860,1,860,1,860,1,861,1,861,3,861,15402,8,861,1,861,
        3,861,15405,8,861,1,861,3,861,15408,8,861,1,862,1,862,1,862,1,862,
        1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,
        1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,1,863,3,863,
        15435,8,863,1,863,1,863,4,863,15439,8,863,11,863,12,863,15440,1,
        863,1,863,1,863,1,863,1,863,1,863,1,863,3,863,15450,8,863,1,863,
        1,863,3,863,15454,8,863,1,863,1,863,1,864,1,864,1,864,1,864,1,864,
        5,864,15463,8,864,10,864,12,864,15466,9,864,1,864,1,864,1,865,1,
        865,3,865,15472,8,865,1,865,1,865,3,865,15476,8,865,1,865,3,865,
        15479,8,865,1,866,1,866,1,866,1,866,3,866,15485,8,866,1,867,1,867,
        1,867,1,867,1,867,1,867,1,867,3,867,15494,8,867,1,867,1,867,1,868,
        1,868,1,868,1,868,1,868,3,868,15503,8,868,1,868,3,868,15506,8,868,
        1,869,1,869,3,869,15510,8,869,1,869,1,869,1,869,1,870,1,870,3,870,
        15517,8,870,1,870,3,870,15520,8,870,1,870,1,870,1,870,1,870,1,870,
        1,870,1,870,3,870,15529,8,870,1,871,5,871,15532,8,871,10,871,12,
        871,15535,9,871,1,871,1,871,1,871,1,871,1,871,4,871,15542,8,871,
        11,871,12,871,15543,1,872,1,872,1,872,1,872,1,872,1,872,1,873,1,
        873,1,873,1,873,1,873,1,873,1,873,1,873,1,873,1,873,1,873,1,873,
        1,873,1,873,1,873,1,873,3,873,15568,8,873,1,874,4,874,15571,8,874,
        11,874,12,874,15572,1,875,1,875,3,875,15577,8,875,1,875,1,875,1,
        875,1,876,1,876,3,876,15584,8,876,1,876,1,876,3,876,15588,8,876,
        1,877,1,877,3,877,15592,8,877,1,877,1,877,3,877,15596,8,877,1,878,
        1,878,1,878,1,879,1,879,1,879,1,879,1,879,5,879,15606,8,879,10,879,
        12,879,15609,9,879,1,879,3,879,15612,8,879,1,879,1,879,1,879,1,880,
        1,880,1,880,1,880,1,880,1,881,1,881,1,881,1,882,3,882,15626,8,882,
        1,882,1,882,1,882,1,882,3,882,15632,8,882,1,882,1,882,1,882,1,882,
        1,882,3,882,15639,8,882,1,883,1,883,1,883,3,883,15644,8,883,1,883,
        1,883,1,883,1,883,1,883,1,883,1,883,1,883,1,883,3,883,15655,8,883,
        1,883,3,883,15658,8,883,1,883,1,883,1,883,1,883,3,883,15664,8,883,
        3,883,15666,8,883,1,884,1,884,1,884,1,884,1,884,1,884,3,884,15674,
        8,884,1,884,1,884,1,885,1,885,1,885,1,885,1,885,1,885,1,885,1,885,
        3,885,15686,8,885,1,885,1,885,1,885,3,885,15691,8,885,1,886,1,886,
        1,886,1,886,1,886,1,887,1,887,1,888,1,888,1,889,1,889,1,890,1,890,
        3,890,15706,8,890,1,891,1,891,3,891,15710,8,891,1,892,3,892,15713,
        8,892,1,892,1,892,3,892,15717,8,892,1,892,1,892,1,892,3,892,15722,
        8,892,5,892,15724,8,892,10,892,12,892,15727,9,892,1,892,1,892,3,
        892,15731,8,892,1,893,1,893,1,893,1,893,1,893,1,893,1,894,1,894,
        1,894,1,894,1,894,1,894,5,894,15745,8,894,10,894,12,894,15748,9,
        894,1,894,1,894,3,894,15752,8,894,1,894,1,894,1,895,1,895,1,895,
        1,895,1,896,3,896,15761,8,896,1,896,1,896,1,896,1,896,1,896,1,896,
        1,896,4,896,15770,8,896,11,896,12,896,15771,1,897,1,897,1,897,1,
        897,4,897,15778,8,897,11,897,12,897,15779,3,897,15782,8,897,1,897,
        1,897,3,897,15786,8,897,1,898,1,898,1,898,1,898,5,898,15792,8,898,
        10,898,12,898,15795,9,898,1,898,1,898,1,898,1,899,1,899,5,899,15802,
        8,899,10,899,12,899,15805,9,899,3,899,15807,8,899,1,899,1,899,1,
        900,5,900,15812,8,900,10,900,12,900,15815,9,900,1,900,1,900,1,901,
        1,901,5,901,15821,8,901,10,901,12,901,15824,9,901,3,901,15826,8,
        901,1,901,1,901,1,902,1,902,1,902,1,902,1,902,3,902,15835,8,902,
        1,903,1,903,1,903,1,903,1,903,3,903,15842,8,903,1,903,1,903,3,903,
        15846,8,903,1,903,3,903,15849,8,903,1,904,1,904,1,904,1,905,1,905,
        1,905,1,905,1,905,1,905,1,905,3,905,15861,8,905,1,906,1,906,1,906,
        1,906,3,906,15867,8,906,1,907,1,907,1,907,1,908,1,908,1,908,1,908,
        3,908,15876,8,908,1,908,3,908,15879,8,908,1,909,1,909,1,909,1,909,
        1,909,1,909,5,909,15887,8,909,10,909,12,909,15890,9,909,1,909,1,
        909,1,909,1,909,1,909,1,909,5,909,15898,8,909,10,909,12,909,15901,
        9,909,1,909,1,909,1,909,3,909,15906,8,909,3,909,15908,8,909,3,909,
        15910,8,909,1,910,1,910,3,910,15914,8,910,1,911,1,911,1,911,1,911,
        1,911,3,911,15921,8,911,1,911,3,911,15924,8,911,1,912,1,912,1,912,
        1,912,1,912,3,912,15931,8,912,1,913,1,913,1,913,1,913,1,913,1,913,
        1,913,1,913,1,913,3,913,15942,8,913,1,913,1,913,1,913,1,913,3,913,
        15948,8,913,1,913,1,913,3,913,15952,8,913,1,914,1,914,1,914,1,914,
        1,914,1,914,5,914,15960,8,914,10,914,12,914,15963,9,914,3,914,15965,
        8,914,1,914,1,914,1,915,1,915,3,915,15971,8,915,1,915,3,915,15974,
        8,915,1,915,1,915,1,915,3,915,15979,8,915,1,915,1,915,1,915,1,915,
        3,915,15985,8,915,1,915,1,915,1,915,3,915,15990,8,915,3,915,15992,
        8,915,1,916,1,916,3,916,15996,8,916,1,916,3,916,15999,8,916,1,917,
        1,917,3,917,16003,8,917,1,917,1,917,3,917,16007,8,917,1,917,1,917,
        1,917,3,917,16012,8,917,1,918,1,918,1,918,1,919,1,919,1,919,1,919,
        1,919,1,919,1,919,5,919,16024,8,919,10,919,12,919,16027,9,919,1,
        919,1,919,3,919,16031,8,919,1,919,1,919,1,919,1,919,1,919,3,919,
        16038,8,919,3,919,16040,8,919,1,920,1,920,1,920,1,920,1,920,1,920,
        3,920,16048,8,920,1,920,1,920,3,920,16052,8,920,1,920,1,920,1,920,
        1,920,1,920,1,920,3,920,16060,8,920,1,921,3,921,16063,8,921,1,921,
        1,921,1,922,1,922,1,922,1,922,1,922,5,922,16072,8,922,10,922,12,
        922,16075,9,922,1,923,1,923,1,923,5,923,16080,8,923,10,923,12,923,
        16083,9,923,1,923,1,923,1,923,5,923,16088,8,923,10,923,12,923,16091,
        9,923,1,923,1,923,1,923,4,923,16096,8,923,11,923,12,923,16097,1,
        923,1,923,1,923,5,923,16103,8,923,10,923,12,923,16106,9,923,3,923,
        16108,8,923,3,923,16110,8,923,1,924,1,924,3,924,16114,8,924,1,925,
        1,925,3,925,16118,8,925,1,925,1,925,1,925,1,925,3,925,16124,8,925,
        1,925,1,925,3,925,16128,8,925,1,925,3,925,16131,8,925,1,926,1,926,
        1,926,1,926,1,926,1,926,3,926,16139,8,926,1,926,3,926,16142,8,926,
        1,926,1,926,3,926,16146,8,926,1,926,1,926,3,926,16150,8,926,1,926,
        1,926,1,926,3,926,16155,8,926,1,926,3,926,16158,8,926,1,926,1,926,
        3,926,16162,8,926,1,926,1,926,3,926,16166,8,926,5,926,16168,8,926,
        10,926,12,926,16171,9,926,1,926,1,926,1,926,1,927,1,927,1,927,1,
        927,1,927,1,927,1,927,1,927,1,927,1,928,1,928,1,928,1,928,1,928,
        1,928,1,928,1,928,1,929,1,929,1,929,3,929,16196,8,929,1,929,3,929,
        16199,8,929,1,929,3,929,16202,8,929,1,930,1,930,1,930,1,930,1,930,
        5,930,16209,8,930,10,930,12,930,16212,9,930,1,930,1,930,1,931,1,
        931,1,931,1,931,1,931,1,931,5,931,16222,8,931,10,931,12,931,16225,
        9,931,1,931,1,931,1,932,1,932,3,932,16231,8,932,1,932,1,932,1,932,
        1,933,1,933,1,933,1,933,1,933,1,933,5,933,16242,8,933,10,933,12,
        933,16245,9,933,1,933,1,933,1,934,1,934,1,934,1,934,1,934,1,934,
        1,935,1,935,5,935,16257,8,935,10,935,12,935,16260,9,935,1,936,1,
        936,1,936,1,936,1,936,3,936,16267,8,936,1,937,1,937,3,937,16271,
        8,937,1,937,1,937,3,937,16275,8,937,1,937,1,937,1,938,1,938,3,938,
        16281,8,938,1,938,1,938,3,938,16285,8,938,1,938,3,938,16288,8,938,
        1,938,3,938,16291,8,938,1,938,1,938,5,938,16295,8,938,10,938,12,
        938,16298,9,938,1,938,3,938,16301,8,938,1,938,3,938,16304,8,938,
        1,938,3,938,16307,8,938,1,938,3,938,16310,8,938,1,939,1,939,1,939,
        1,939,5,939,16316,8,939,10,939,12,939,16319,9,939,3,939,16321,8,
        939,1,940,1,940,1,940,1,941,1,941,1,941,1,941,1,941,1,941,3,941,
        16332,8,941,3,941,16334,8,941,1,942,1,942,1,942,5,942,16339,8,942,
        10,942,12,942,16342,9,942,1,943,1,943,5,943,16346,8,943,10,943,12,
        943,16349,9,943,1,943,1,943,3,943,16353,8,943,1,944,1,944,5,944,
        16357,8,944,10,944,12,944,16360,9,944,1,944,3,944,16363,8,944,1,
        945,1,945,1,945,3,945,16368,8,945,1,945,1,945,1,945,5,945,16373,
        8,945,10,945,12,945,16376,9,945,1,945,1,945,1,945,3,945,16381,8,
        945,1,945,1,945,1,945,1,945,1,945,3,945,16388,8,945,1,946,3,946,
        16391,8,946,1,946,3,946,16394,8,946,1,946,1,946,3,946,16398,8,946,
        1,946,1,946,1,946,3,946,16403,8,946,1,946,1,946,5,946,16407,8,946,
        10,946,12,946,16410,9,946,1,946,1,946,1,946,3,946,16415,8,946,1,
        947,1,947,1,947,1,948,1,948,1,948,1,949,1,949,3,949,16425,8,949,
        1,950,1,950,1,950,1,950,1,950,3,950,16432,8,950,1,950,1,950,3,950,
        16436,8,950,1,951,1,951,1,951,1,951,1,951,1,951,1,951,1,951,3,951,
        16446,8,951,1,951,1,951,1,951,1,951,1,951,1,951,1,951,1,951,1,951,
        1,951,1,951,1,951,1,951,3,951,16461,8,951,3,951,16463,8,951,1,952,
        1,952,3,952,16467,8,952,1,952,1,952,1,952,1,952,5,952,16473,8,952,
        10,952,12,952,16476,9,952,1,952,1,952,1,952,1,952,1,953,1,953,1,
        953,1,953,1,953,1,953,3,953,16488,8,953,1,953,3,953,16491,8,953,
        1,954,1,954,1,954,3,954,16496,8,954,1,955,1,955,1,955,1,955,1,955,
        1,955,5,955,16504,8,955,10,955,12,955,16507,9,955,1,955,1,955,1,
        955,5,955,16512,8,955,10,955,12,955,16515,9,955,3,955,16517,8,955,
        1,955,1,955,1,956,1,956,3,956,16523,8,956,1,957,1,957,1,957,3,957,
        16528,8,957,1,957,3,957,16531,8,957,1,958,1,958,1,958,3,958,16536,
        8,958,1,958,1,958,1,958,3,958,16541,8,958,1,958,1,958,1,958,1,958,
        1,959,1,959,1,959,1,959,1,959,5,959,16552,8,959,10,959,12,959,16555,
        9,959,1,959,1,959,1,960,1,960,3,960,16561,8,960,1,960,1,960,1,960,
        1,960,1,960,1,960,5,960,16569,8,960,10,960,12,960,16572,9,960,1,
        960,1,960,3,960,16576,8,960,3,960,16578,8,960,1,961,1,961,1,961,
        3,961,16583,8,961,1,961,1,961,3,961,16587,8,961,1,961,1,961,1,961,
        1,961,3,961,16593,8,961,1,961,1,961,3,961,16597,8,961,1,962,1,962,
        1,962,1,962,1,963,1,963,1,963,1,963,1,963,5,963,16608,8,963,10,963,
        12,963,16611,9,963,1,963,3,963,16614,8,963,1,963,1,963,1,963,1,963,
        1,963,1,963,5,963,16622,8,963,10,963,12,963,16625,9,963,3,963,16627,
        8,963,3,963,16629,8,963,1,964,1,964,1,964,3,964,16634,8,964,1,965,
        1,965,1,965,1,965,1,965,5,965,16641,8,965,10,965,12,965,16644,9,
        965,1,965,1,965,1,966,1,966,1,966,1,966,1,966,1,966,5,966,16654,
        8,966,10,966,12,966,16657,9,966,1,966,1,966,1,967,1,967,1,967,3,
        967,16664,8,967,1,967,1,967,3,967,16668,8,967,1,968,1,968,1,968,
        1,969,1,969,5,969,16675,8,969,10,969,12,969,16678,9,969,1,969,3,
        969,16681,8,969,1,969,5,969,16684,8,969,10,969,12,969,16687,9,969,
        1,969,1,969,1,970,1,970,1,970,1,970,1,970,1,970,3,970,16697,8,970,
        3,970,16699,8,970,1,971,1,971,1,971,1,971,1,972,1,972,1,972,1,972,
        1,972,1,972,1,972,1,972,5,972,16713,8,972,10,972,12,972,16716,9,
        972,1,973,1,973,3,973,16720,8,973,1,973,1,973,5,973,16724,8,973,
        10,973,12,973,16727,9,973,1,973,1,973,1,974,3,974,16732,8,974,1,
        974,1,974,1,974,1,974,1,974,1,974,1,975,1,975,1,975,1,975,1,976,
        1,976,1,976,1,976,5,976,16748,8,976,10,976,12,976,16751,9,976,1,
        976,1,976,1,977,1,977,3,977,16757,8,977,1,977,3,977,16760,8,977,
        1,978,3,978,16763,8,978,1,978,1,978,1,978,1,978,5,978,16769,8,978,
        10,978,12,978,16772,9,978,3,978,16774,8,978,1,978,1,978,1,979,1,
        979,1,979,1,979,3,979,16782,8,979,3,979,16784,8,979,1,979,1,979,
        3,979,16788,8,979,1,979,3,979,16791,8,979,1,980,1,980,1,980,3,980,
        16796,8,980,3,980,16798,8,980,1,980,1,980,3,980,16802,8,980,1,980,
        1,980,1,980,1,981,1,981,1,982,1,982,1,982,1,982,1,982,3,982,16814,
        8,982,1,983,1,983,1,983,1,983,1,983,1,984,1,984,3,984,16823,8,984,
        1,984,1,984,1,984,1,984,5,984,16829,8,984,10,984,12,984,16832,9,
        984,1,985,1,985,3,985,16836,8,985,1,985,1,985,3,985,16840,8,985,
        1,986,1,986,1,986,1,986,1,987,1,987,1,987,1,987,3,987,16850,8,987,
        3,987,16852,8,987,1,987,1,987,1,987,1,987,3,987,16858,8,987,1,988,
        1,988,1,988,3,988,16863,8,988,1,988,3,988,16866,8,988,1,989,1,989,
        1,989,1,990,1,990,1,990,1,990,1,990,3,990,16876,8,990,1,991,1,991,
        1,991,1,991,3,991,16882,8,991,1,991,3,991,16885,8,991,1,991,3,991,
        16888,8,991,1,992,1,992,1,992,1,992,5,992,16894,8,992,10,992,12,
        992,16897,9,992,1,992,1,992,1,992,1,992,1,992,1,992,1,992,3,992,
        16906,8,992,1,993,1,993,1,993,1,993,1,993,1,993,1,993,1,993,3,993,
        16916,8,993,1,994,1,994,3,994,16920,8,994,1,994,1,994,3,994,16924,
        8,994,1,994,3,994,16927,8,994,1,994,3,994,16930,8,994,1,995,1,995,
        1,995,3,995,16935,8,995,1,996,1,996,1,996,3,996,16940,8,996,1,996,
        3,996,16943,8,996,1,996,3,996,16946,8,996,1,997,1,997,4,997,16950,
        8,997,11,997,12,997,16951,1,997,3,997,16955,8,997,1,997,1,997,1,
        998,1,998,3,998,16961,8,998,1,998,3,998,16964,8,998,1,999,3,999,
        16967,8,999,1,999,4,999,16970,8,999,11,999,12,999,16971,1,999,3,
        999,16975,8,999,1,1000,1,1000,1,1000,1,1000,4,1000,16981,8,1000,
        11,1000,12,1000,16982,1,1001,1,1001,4,1001,16987,8,1001,11,1001,
        12,1001,16988,1,1002,1,1002,1,1002,3,1002,16994,8,1002,1,1003,1,
        1003,1,1003,1,1003,1,1003,1,1003,1,1003,3,1003,17003,8,1003,1,1004,
        1,1004,1,1004,1,1004,3,1004,17009,8,1004,1,1004,1,1004,1,1004,1,
        1004,1,1004,1,1004,1,1004,1,1004,3,1004,17019,8,1004,1,1004,1,1004,
        3,1004,17023,8,1004,3,1004,17025,8,1004,1,1004,3,1004,17028,8,1004,
        1,1005,1,1005,1,1005,1,1005,1,1005,1,1005,1,1005,1,1005,5,1005,17038,
        8,1005,10,1005,12,1005,17041,9,1005,1,1005,3,1005,17044,8,1005,1,
        1005,3,1005,17047,8,1005,1,1006,1,1006,1,1006,1,1006,1,1007,1,1007,
        1,1007,1,1008,1,1008,1,1008,1,1008,1,1008,1,1008,3,1008,17062,8,
        1008,1,1008,1,1008,3,1008,17066,8,1008,1,1009,1,1009,1,1009,1,1009,
        1,1009,3,1009,17073,8,1009,1,1009,3,1009,17076,8,1009,1,1010,1,1010,
        1,1010,1,1010,1,1010,5,1010,17083,8,1010,10,1010,12,1010,17086,9,
        1010,1,1010,1,1010,1,1010,1,1010,3,1010,17092,8,1010,1,1011,1,1011,
        1,1011,3,1011,17097,8,1011,1,1012,1,1012,3,1012,17101,8,1012,1,1013,
        1,1013,1,1013,1,1013,1,1013,1,1013,3,1013,17109,8,1013,1,1013,1,
        1013,1,1013,1,1013,3,1013,17115,8,1013,1,1014,1,1014,1,1014,1,1014,
        1,1014,1,1014,3,1014,17123,8,1014,1,1014,3,1014,17126,8,1014,1,1015,
        1,1015,1,1015,1,1015,1,1016,1,1016,1,1016,3,1016,17135,8,1016,1,
        1016,3,1016,17138,8,1016,1,1016,3,1016,17141,8,1016,1,1017,1,1017,
        1,1017,1,1018,1,1018,1,1018,1,1018,3,1018,17150,8,1018,1,1019,1,
        1019,1,1019,1,1019,3,1019,17156,8,1019,1,1019,1,1019,1,1019,1,1019,
        3,1019,17162,8,1019,1,1019,3,1019,17165,8,1019,1,1019,1,1019,1,1019,
        3,1019,17170,8,1019,1,1019,1,1019,1,1019,1,1019,3,1019,17176,8,1019,
        1,1019,1,1019,3,1019,17180,8,1019,1,1020,1,1020,1,1020,1,1020,1,
        1020,1,1020,1,1020,1,1020,1,1020,3,1020,17191,8,1020,3,1020,17193,
        8,1020,1,1021,1,1021,1,1021,1,1021,1,1021,1,1021,1,1021,3,1021,17202,
        8,1021,3,1021,17204,8,1021,1,1022,1,1022,3,1022,17208,8,1022,1,1022,
        1,1022,1,1022,1,1022,3,1022,17214,8,1022,1,1022,1,1022,3,1022,17218,
        8,1022,1,1023,1,1023,1,1023,1,1023,1,1023,1,1024,1,1024,1,1024,1,
        1024,1,1024,1,1024,3,1024,17231,8,1024,1,1025,1,1025,1,1025,5,1025,
        17236,8,1025,10,1025,12,1025,17239,9,1025,1,1026,1,1026,3,1026,17243,
        8,1026,1,1027,1,1027,1,1027,1,1027,1,1027,1,1028,1,1028,1,1028,1,
        1028,1,1028,1,1028,1,1028,1,1028,1,1028,5,1028,17259,8,1028,10,1028,
        12,1028,17262,9,1028,1,1029,3,1029,17265,8,1029,1,1029,1,1029,3,
        1029,17269,8,1029,1,1030,1,1030,3,1030,17273,8,1030,1,1030,1,1030,
        1,1031,1,1031,1,1031,1,1031,1,1031,1,1031,1,1031,1,1031,1,1031,3,
        1031,17286,8,1031,1,1031,1,1031,3,1031,17290,8,1031,1,1031,1,1031,
        1,1031,5,1031,17295,8,1031,10,1031,12,1031,17298,9,1031,1,1031,1,
        1031,1,1031,1,1031,1,1031,3,1031,17305,8,1031,1,1031,3,1031,17308,
        8,1031,1,1031,1,1031,1,1031,3,1031,17313,8,1031,3,1031,17315,8,1031,
        1,1032,1,1032,1,1032,1,1032,3,1032,17321,8,1032,1,1032,3,1032,17324,
        8,1032,1,1032,1,1032,1,1032,1,1032,3,1032,17330,8,1032,1,1032,5,
        1032,17333,8,1032,10,1032,12,1032,17336,9,1032,1,1033,1,1033,1,1033,
        1,1033,1,1033,1,1033,1,1033,5,1033,17345,8,1033,10,1033,12,1033,
        17348,9,1033,1,1034,1,1034,3,1034,17352,8,1034,1,1034,1,1034,1,1034,
        1,1034,1,1034,1,1034,1,1034,1,1034,3,1034,17362,8,1034,3,1034,17364,
        8,1034,3,1034,17366,8,1034,1,1035,1,1035,1,1035,1,1035,1,1035,1,
        1035,1,1035,1,1035,3,1035,17376,8,1035,1,1035,1,1035,3,1035,17380,
        8,1035,3,1035,17382,8,1035,1,1036,1,1036,1,1036,1,1036,1,1036,1,
        1036,1,1036,1,1036,5,1036,17392,8,1036,10,1036,12,1036,17395,9,1036,
        1,1036,1,1036,1,1036,1,1036,1,1036,3,1036,17402,8,1036,1,1037,1,
        1037,1,1037,1,1037,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,
        3,1038,17415,8,1038,1,1038,3,1038,17418,8,1038,1,1038,1,1038,1,1038,
        3,1038,17423,8,1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,
        1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,1,1038,
        5,1038,17441,8,1038,10,1038,12,1038,17444,9,1038,1,1039,1,1039,1,
        1039,1,1039,1,1039,3,1039,17451,8,1039,1,1039,1,1039,1,1039,1,1039,
        1,1039,1,1039,3,1039,17459,8,1039,1,1039,1,1039,1,1039,1,1039,1,
        1039,3,1039,17466,8,1039,1,1039,1,1039,1,1039,1,1039,1,1039,3,1039,
        17473,8,1039,1,1040,1,1040,1,1040,1,1040,1,1040,3,1040,17480,8,1040,
        1,1041,1,1041,3,1041,17484,8,1041,1,1041,1,1041,1,1041,3,1041,17489,
        8,1041,5,1041,17491,8,1041,10,1041,12,1041,17494,9,1041,1,1041,1,
        1041,1,1041,5,1041,17499,8,1041,10,1041,12,1041,17502,9,1041,1,1041,
        3,1041,17505,8,1041,1,1042,1,1042,1,1042,1,1042,1,1042,3,1042,17512,
        8,1042,1,1042,1,1042,1,1042,3,1042,17517,8,1042,1,1042,1,1042,1,
        1042,1,1042,1,1042,1,1042,1,1042,3,1042,17526,8,1042,1,1043,1,1043,
        1,1043,1,1043,1,1043,1,1043,1,1043,3,1043,17535,8,1043,1,1043,3,
        1043,17538,8,1043,1,1043,1,1043,1,1044,1,1044,1,1044,1,1044,1,1044,
        1,1044,1,1044,1,1044,1,1044,1,1044,1,1044,1,1044,1,1044,1,1044,1,
        1044,1,1044,1,1044,1,1044,3,1044,17560,8,1044,1,1044,1,1044,1,1044,
        1,1044,1,1044,1,1044,1,1044,1,1044,3,1044,17570,8,1044,5,1044,17572,
        8,1044,10,1044,12,1044,17575,9,1044,1,1045,1,1045,1,1045,1,1045,
        1,1045,1,1045,1,1045,1,1045,1,1045,1,1045,1,1045,1,1045,1,1045,1,
        1045,1,1045,3,1045,17592,8,1045,3,1045,17594,8,1045,1,1046,1,1046,
        1,1046,1,1046,1,1046,1,1046,5,1046,17602,8,1046,10,1046,12,1046,
        17605,9,1046,1,1047,1,1047,3,1047,17609,8,1047,1,1048,3,1048,17612,
        8,1048,1,1048,1,1048,1,1048,4,1048,17617,8,1048,11,1048,12,1048,
        17618,1,1048,3,1048,17622,8,1048,1,1048,1,1048,3,1048,17626,8,1048,
        1,1048,3,1048,17629,8,1048,1,1049,1,1049,1,1049,1,1049,1,1049,3,
        1049,17636,8,1049,1,1050,3,1050,17639,8,1050,1,1050,1,1050,4,1050,
        17643,8,1050,11,1050,12,1050,17644,1,1050,3,1050,17648,8,1050,1,
        1050,1,1050,3,1050,17652,8,1050,1,1050,3,1050,17655,8,1050,1,1051,
        1,1051,1,1051,1,1051,1,1051,3,1051,17662,8,1051,1,1052,1,1052,1,
        1052,3,1052,17667,8,1052,1,1053,1,1053,1,1053,1,1053,1,1053,3,1053,
        17674,8,1053,1,1053,1,1053,1,1053,1,1053,5,1053,17680,8,1053,10,
        1053,12,1053,17683,9,1053,1,1053,1,1053,1,1053,1,1053,3,1053,17689,
        8,1053,1,1054,1,1054,1,1054,1,1054,1,1054,1,1054,1,1054,1,1054,1,
        1054,5,1054,17700,8,1054,10,1054,12,1054,17703,9,1054,1,1054,1,1054,
        3,1054,17707,8,1054,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,
        1055,3,1055,17716,8,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,
        1,1055,3,1055,17725,8,1055,1,1055,1,1055,3,1055,17729,8,1055,1,1055,
        1,1055,3,1055,17733,8,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,
        1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,
        1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,3,
        1055,17759,8,1055,1,1055,3,1055,17762,8,1055,1,1055,3,1055,17765,
        8,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,3,
        1055,17775,8,1055,1,1055,1,1055,1,1055,1,1055,1,1055,1,1055,3,1055,
        17783,8,1055,1,1055,1,1055,1,1055,1,1055,3,1055,17789,8,1055,3,1055,
        17791,8,1055,1,1055,1,1055,3,1055,17795,8,1055,1,1056,1,1056,1,1056,
        1,1056,3,1056,17801,8,1056,1,1057,1,1057,1,1057,1,1057,1,1057,5,
        1057,17808,8,1057,10,1057,12,1057,17811,9,1057,1,1057,3,1057,17814,
        8,1057,1,1057,3,1057,17817,8,1057,1,1057,3,1057,17820,8,1057,1,1057,
        1,1057,1,1057,1,1057,1,1057,1,1057,1,1057,3,1057,17829,8,1057,1,
        1057,3,1057,17832,8,1057,1,1057,3,1057,17835,8,1057,1,1057,3,1057,
        17838,8,1057,1,1057,3,1057,17841,8,1057,1,1057,1,1057,1,1057,1,1057,
        1,1057,1,1057,1,1057,1,1057,1,1057,1,1057,3,1057,17853,8,1057,1,
        1057,1,1057,1,1057,1,1057,1,1057,1,1057,3,1057,17861,8,1057,1,1057,
        1,1057,1,1057,1,1057,1,1057,3,1057,17868,8,1057,1,1057,3,1057,17871,
        8,1057,1,1057,1,1057,3,1057,17875,8,1057,3,1057,17877,8,1057,1,1057,
        3,1057,17880,8,1057,1,1057,1,1057,1,1057,3,1057,17885,8,1057,1,1057,
        1,1057,1,1057,1,1057,1,1057,1,1057,1,1057,3,1057,17894,8,1057,1,
        1057,1,1057,1,1057,1,1057,3,1057,17900,8,1057,1,1057,3,1057,17903,
        8,1057,1,1057,3,1057,17906,8,1057,1,1057,1,1057,1,1057,1,1057,1,
        1057,1,1057,1,1057,3,1057,17915,8,1057,1,1057,3,1057,17918,8,1057,
        1,1057,3,1057,17921,8,1057,1,1057,3,1057,17924,8,1057,1,1057,1,1057,
        1,1057,1,1057,3,1057,17930,8,1057,1,1057,1,1057,3,1057,17934,8,1057,
        1,1057,1,1057,1,1057,1,1057,1,1057,1,1057,1,1057,1,1057,5,1057,17944,
        8,1057,10,1057,12,1057,17947,9,1057,1,1057,1,1057,1,1057,1,1057,
        1,1057,1,1057,1,1057,3,1057,17956,8,1057,1,1057,1,1057,3,1057,17960,
        8,1057,1,1057,3,1057,17963,8,1057,1,1057,1,1057,1,1057,1,1057,3,
        1057,17969,8,1057,1,1057,1,1057,3,1057,17973,8,1057,1,1057,1,1057,
        1,1057,1,1057,3,1057,17979,8,1057,1,1057,1,1057,3,1057,17983,8,1057,
        1,1057,3,1057,17986,8,1057,1,1057,3,1057,17989,8,1057,3,1057,17991,
        8,1057,1,1058,1,1058,1,1058,5,1058,17996,8,1058,10,1058,12,1058,
        17999,9,1058,1,1058,3,1058,18002,8,1058,1,1058,3,1058,18005,8,1058,
        1,1058,3,1058,18008,8,1058,1,1058,3,1058,18011,8,1058,1,1058,1,1058,
        1,1058,3,1058,18016,8,1058,1,1059,3,1059,18019,8,1059,1,1059,1,1059,
        3,1059,18023,8,1059,1,1059,1,1059,1,1059,1,1059,1,1059,1,1059,1,
        1059,3,1059,18032,8,1059,1,1059,1,1059,3,1059,18036,8,1059,1,1060,
        1,1060,1,1060,1,1060,1,1060,3,1060,18043,8,1060,1,1060,1,1060,3,
        1060,18047,8,1060,1,1060,1,1060,1,1060,3,1060,18052,8,1060,1,1060,
        1,1060,1,1060,3,1060,18057,8,1060,1,1060,3,1060,18060,8,1060,1,1060,
        1,1060,1,1061,1,1061,1,1061,1,1061,1,1061,3,1061,18069,8,1061,1,
        1061,1,1061,3,1061,18073,8,1061,1,1062,1,1062,1,1062,1,1062,1,1063,
        1,1063,1,1063,1,1063,1,1063,3,1063,18084,8,1063,1,1063,3,1063,18087,
        8,1063,1,1063,1,1063,3,1063,18091,8,1063,1,1064,1,1064,1,1064,3,
        1064,18096,8,1064,1,1064,1,1064,3,1064,18100,8,1064,1,1064,1,1064,
        1,1064,1,1064,1,1064,1,1064,1,1064,3,1064,18109,8,1064,1,1064,3,
        1064,18112,8,1064,1,1064,1,1064,3,1064,18116,8,1064,1,1064,1,1064,
        1,1064,1,1064,1,1064,1,1064,1,1064,3,1064,18125,8,1064,1,1064,3,
        1064,18128,8,1064,1,1064,1,1064,3,1064,18132,8,1064,1,1064,1,1064,
        1,1064,3,1064,18137,8,1064,1,1064,1,1064,1,1064,1,1064,1,1064,1,
        1064,1,1064,3,1064,18146,8,1064,1,1064,3,1064,18149,8,1064,1,1064,
        1,1064,3,1064,18153,8,1064,1,1064,1,1064,1,1064,1,1064,1,1064,1,
        1064,3,1064,18161,8,1064,1,1064,1,1064,1,1064,3,1064,18166,8,1064,
        1,1064,1,1064,1,1064,3,1064,18171,8,1064,1,1064,3,1064,18174,8,1064,
        1,1064,1,1064,3,1064,18178,8,1064,3,1064,18180,8,1064,1,1065,1,1065,
        1,1065,1,1065,1,1065,5,1065,18187,8,1065,10,1065,12,1065,18190,9,
        1065,1,1065,1,1065,1,1066,1,1066,3,1066,18196,8,1066,1,1066,3,1066,
        18199,8,1066,1,1066,1,1066,1,1066,1,1066,1,1066,3,1066,18206,8,1066,
        3,1066,18208,8,1066,1,1066,3,1066,18211,8,1066,1,1066,3,1066,18214,
        8,1066,1,1066,1,1066,3,1066,18218,8,1066,1,1066,3,1066,18221,8,1066,
        1,1066,1,1066,1,1066,3,1066,18226,8,1066,1,1066,1,1066,1,1066,1,
        1066,1,1066,3,1066,18233,8,1066,1,1066,1,1066,1,1066,1,1066,3,1066,
        18239,8,1066,1,1066,1,1066,1,1066,1,1066,1,1066,1,1066,3,1066,18247,
        8,1066,1,1067,1,1067,3,1067,18251,8,1067,1,1067,3,1067,18254,8,1067,
        1,1067,3,1067,18257,8,1067,1,1068,1,1068,1,1068,1,1068,3,1068,18263,
        8,1068,1,1068,3,1068,18266,8,1068,1,1068,1,1068,3,1068,18270,8,1068,
        1,1069,1,1069,3,1069,18274,8,1069,1,1069,1,1069,1,1069,3,1069,18279,
        8,1069,1,1069,3,1069,18282,8,1069,1,1069,3,1069,18285,8,1069,1,1070,
        1,1070,1,1070,1,1070,1,1070,1,1070,1,1070,3,1070,18294,8,1070,1,
        1070,1,1070,1,1070,1,1071,1,1071,1,1071,1,1071,1,1071,1,1071,1,1071,
        3,1071,18306,8,1071,1,1071,1,1071,1,1071,1,1072,1,1072,3,1072,18313,
        8,1072,1,1072,3,1072,18316,8,1072,1,1073,1,1073,1,1073,1,1073,3,
        1073,18322,8,1073,1,1073,3,1073,18325,8,1073,1,1073,3,1073,18328,
        8,1073,1,1073,1,1073,1,1073,1,1073,1,1073,1,1073,1,1073,3,1073,18337,
        8,1073,1,1073,3,1073,18340,8,1073,1,1073,1,1073,1,1073,3,1073,18345,
        8,1073,1,1073,1,1073,1,1073,1,1073,1,1073,3,1073,18352,8,1073,3,
        1073,18354,8,1073,1,1074,1,1074,1,1074,1,1074,1,1074,1,1074,1,1074,
        1,1074,1,1074,1,1074,1,1074,3,1074,18367,8,1074,1,1075,1,1075,1,
        1075,1,1075,3,1075,18373,8,1075,1,1076,1,1076,1,1076,3,1076,18378,
        8,1076,1,1077,1,1077,1,1077,3,1077,18383,8,1077,1,1077,1,1077,1,
        1077,1,1077,1,1077,1,1077,1,1077,3,1077,18392,8,1077,1,1077,3,1077,
        18395,8,1077,3,1077,18397,8,1077,1,1077,1,1077,3,1077,18401,8,1077,
        1,1077,1,1077,1,1077,1,1077,1,1077,3,1077,18408,8,1077,1,1077,1,
        1077,1,1077,1,1077,1,1077,3,1077,18415,8,1077,1,1077,1,1077,1,1077,
        1,1077,1,1077,1,1077,3,1077,18423,8,1077,1,1077,1,1077,1,1077,1,
        1077,1,1077,1,1077,1,1077,1,1077,1,1077,1,1077,1,1077,1,1077,1,1077,
        3,1077,18438,8,1077,1,1078,1,1078,1,1078,1,1078,3,1078,18444,8,1078,
        1,1078,1,1078,3,1078,18448,8,1078,1,1079,1,1079,1,1079,3,1079,18453,
        8,1079,1,1079,1,1079,1,1079,3,1079,18458,8,1079,1,1079,1,1079,1,
        1079,1,1079,3,1079,18464,8,1079,1,1079,3,1079,18467,8,1079,1,1079,
        1,1079,3,1079,18471,8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,
        1079,1,1079,1,1079,3,1079,18481,8,1079,1,1079,1,1079,1,1079,1,1079,
        1,1079,1,1079,1,1079,1,1079,3,1079,18491,8,1079,1,1079,1,1079,1,
        1079,1,1079,3,1079,18497,8,1079,3,1079,18499,8,1079,1,1079,1,1079,
        1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,3,1079,18509,8,1079,3,
        1079,18511,8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,3,1079,18518,
        8,1079,1,1079,1,1079,3,1079,18522,8,1079,1,1079,1,1079,1,1079,1,
        1079,1,1079,4,1079,18529,8,1079,11,1079,12,1079,18530,1,1079,1,1079,
        1,1079,3,1079,18536,8,1079,1,1079,1,1079,1,1079,3,1079,18541,8,1079,
        1,1079,3,1079,18544,8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,
        1079,1,1079,3,1079,18553,8,1079,1,1079,3,1079,18556,8,1079,1,1079,
        1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,3,1079,18565,8,1079,1,
        1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,
        1,1079,1,1079,3,1079,18579,8,1079,1,1079,1,1079,1,1079,1,1079,1,
        1079,3,1079,18586,8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,
        3,1079,18594,8,1079,1,1079,3,1079,18597,8,1079,1,1079,1,1079,1,1079,
        1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,3,1079,18610,
        8,1079,1,1079,1,1079,1,1079,1,1079,3,1079,18616,8,1079,3,1079,18618,
        8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,
        1079,1,1079,1,1079,3,1079,18631,8,1079,1,1079,1,1079,1,1079,1,1079,
        1,1079,1,1079,1,1079,3,1079,18640,8,1079,1,1079,1,1079,5,1079,18644,
        8,1079,10,1079,12,1079,18647,9,1079,1,1079,1,1079,1,1079,1,1079,
        1,1079,1,1079,1,1079,3,1079,18656,8,1079,1,1079,1,1079,1,1079,1,
        1079,5,1079,18662,8,1079,10,1079,12,1079,18665,9,1079,1,1079,1,1079,
        1,1079,3,1079,18670,8,1079,1,1079,3,1079,18673,8,1079,1,1079,3,1079,
        18676,8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,
        1079,1,1079,1,1079,1,1079,1,1079,3,1079,18690,8,1079,3,1079,18692,
        8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,3,1079,18700,8,
        1079,1,1079,1,1079,1,1079,5,1079,18705,8,1079,10,1079,12,1079,18708,
        9,1079,1,1079,1,1079,1,1079,1,1079,1,1079,5,1079,18715,8,1079,10,
        1079,12,1079,18718,9,1079,1,1079,1,1079,1,1079,5,1079,18723,8,1079,
        10,1079,12,1079,18726,9,1079,1,1079,1,1079,1,1079,3,1079,18731,8,
        1079,1,1079,3,1079,18734,8,1079,1,1079,1,1079,1,1079,3,1079,18739,
        8,1079,1,1079,1,1079,1,1079,3,1079,18744,8,1079,5,1079,18746,8,1079,
        10,1079,12,1079,18749,9,1079,1,1079,1,1079,1,1079,5,1079,18754,8,
        1079,10,1079,12,1079,18757,9,1079,1,1079,1,1079,1,1079,1,1079,3,
        1079,18763,8,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,
        3,1079,18772,8,1079,1,1079,1,1079,1,1079,5,1079,18777,8,1079,10,
        1079,12,1079,18780,9,1079,1,1079,1,1079,1,1079,1,1079,1,1079,1,1079,
        3,1079,18788,8,1079,1,1079,1,1079,3,1079,18792,8,1079,1,1079,1,1079,
        1,1079,5,1079,18797,8,1079,10,1079,12,1079,18800,9,1079,1,1079,1,
        1079,1,1079,1,1079,3,1079,18806,8,1079,1,1079,1,1079,1,1079,1,1079,
        1,1079,3,1079,18813,8,1079,1,1079,1,1079,1,1079,5,1079,18818,8,1079,
        10,1079,12,1079,18821,9,1079,1,1079,1,1079,1,1079,1,1079,1,1079,
        3,1079,18828,8,1079,1,1079,1,1079,3,1079,18832,8,1079,1,1079,1,1079,
        1,1079,5,1079,18837,8,1079,10,1079,12,1079,18840,9,1079,1,1079,1,
        1079,1,1079,1,1079,1,1079,1,1079,3,1079,18848,8,1079,1,1079,3,1079,
        18851,8,1079,1,1079,3,1079,18854,8,1079,1,1079,3,1079,18857,8,1079,
        1,1079,1,1079,3,1079,18861,8,1079,1,1079,1,1079,1,1079,3,1079,18866,
        8,1079,1,1079,1,1079,1,1079,3,1079,18871,8,1079,1,1080,1,1080,1,
        1081,1,1081,1,1082,1,1082,1,1083,1,1083,1,1083,3,1083,18882,8,1083,
        1,1083,1,1083,3,1083,18886,8,1083,3,1083,18888,8,1083,1,1083,1,1083,
        1,1083,1,1083,1,1083,1,1083,1,1083,1,1083,1,1083,3,1083,18899,8,
        1083,3,1083,18901,8,1083,1,1083,1,1083,1,1084,1,1084,1,1084,1,1084,
        1,1084,1,1084,1,1084,3,1084,18912,8,1084,1,1085,1,1085,1,1086,1,
        1086,1,1086,1,1086,1,1086,1,1086,1,1086,3,1086,18923,8,1086,1,1087,
        1,1087,1,1087,1,1087,1,1087,5,1087,18930,8,1087,10,1087,12,1087,
        18933,9,1087,3,1087,18935,8,1087,1,1088,1,1088,3,1088,18939,8,1088,
        1,1088,3,1088,18942,8,1088,1,1088,1,1088,1,1089,1,1089,1,1089,1,
        1089,1,1089,5,1089,18951,8,1089,10,1089,12,1089,18954,9,1089,1,1090,
        1,1090,1,1090,1,1090,1,1090,1,1090,1,1090,3,1090,18963,8,1090,1,
        1091,1,1091,1,1091,1,1091,1,1091,1,1091,1,1091,1,1091,3,1091,18973,
        8,1091,1,1091,1,1091,1,1091,1,1091,5,1091,18979,8,1091,10,1091,12,
        1091,18982,9,1091,1,1092,1,1092,1,1092,3,1092,18987,8,1092,1,1092,
        1,1092,1,1092,1,1092,5,1092,18993,8,1092,10,1092,12,1092,18996,9,
        1092,1,1092,1,1092,1,1092,1,1092,3,1092,19002,8,1092,1,1092,1,1092,
        3,1092,19006,8,1092,1,1093,1,1093,1,1093,3,1093,19011,8,1093,1,1093,
        1,1093,3,1093,19015,8,1093,1,1093,1,1093,1,1093,3,1093,19020,8,1093,
        5,1093,19022,8,1093,10,1093,12,1093,19025,9,1093,1,1094,1,1094,1,
        1094,3,1094,19030,8,1094,1,1094,3,1094,19033,8,1094,1,1094,1,1094,
        1,1094,5,1094,19038,8,1094,10,1094,12,1094,19041,9,1094,1,1094,1,
        1094,1,1095,1,1095,1,1095,1,1095,1,1095,3,1095,19050,8,1095,1,1095,
        1,1095,1,1095,1,1095,5,1095,19056,8,1095,10,1095,12,1095,19059,9,
        1095,1,1095,3,1095,19062,8,1095,1,1095,1,1095,1,1096,1,1096,1,1096,
        1,1096,1,1096,1,1096,3,1096,19072,8,1096,1,1096,3,1096,19075,8,1096,
        3,1096,19077,8,1096,1,1097,1,1097,1,1097,1,1098,1,1098,1,1098,1,
        1098,1,1098,3,1098,19087,8,1098,3,1098,19089,8,1098,1,1099,1,1099,
        1,1099,1,1099,3,1099,19095,8,1099,1,1100,1,1100,1,1100,1,1100,3,
        1100,19101,8,1100,3,1100,19103,8,1100,1,1101,1,1101,1,1101,1,1102,
        1,1102,1,1102,1,1103,1,1103,1,1103,1,1103,1,1103,1,1103,3,1103,19117,
        8,1103,3,1103,19119,8,1103,1,1104,1,1104,1,1105,1,1105,1,1105,1,
        1105,1,1105,1,1105,1,1105,3,1105,19130,8,1105,1,1106,1,1106,1,1106,
        1,1106,1,1106,1,1107,1,1107,1,1107,1,1107,1,1107,1,1107,1,1107,1,
        1107,3,1107,19145,8,1107,1,1107,3,1107,19148,8,1107,1,1107,1,1107,
        3,1107,19152,8,1107,3,1107,19154,8,1107,1,1108,1,1108,1,1108,1,1108,
        1,1108,1,1108,1,1108,3,1108,19163,8,1108,1,1109,1,1109,1,1109,5,
        1109,19168,8,1109,10,1109,12,1109,19171,9,1109,1,1109,1,1109,3,1109,
        19175,8,1109,1,1110,1,1110,3,1110,19179,8,1110,1,1110,1,1110,3,1110,
        19183,8,1110,1,1110,1,1110,1,1111,3,1111,19188,8,1111,1,1111,1,1111,
        3,1111,19192,8,1111,1,1111,3,1111,19195,8,1111,1,1112,1,1112,3,1112,
        19199,8,1112,1,1113,1,1113,1,1113,1,1113,1,1113,1,1113,3,1113,19207,
        8,1113,1,1114,1,1114,1,1114,1,1114,1,1114,1,1114,1,1114,5,1114,19216,
        8,1114,10,1114,12,1114,19219,9,1114,1,1114,1,1114,1,1115,1,1115,
        3,1115,19225,8,1115,1,1115,1,1115,1,1115,3,1115,19230,8,1115,1,1115,
        1,1115,1,1115,3,1115,19235,8,1115,5,1115,19237,8,1115,10,1115,12,
        1115,19240,9,1115,1,1116,1,1116,3,1116,19244,8,1116,1,1117,1,1117,
        1,1118,1,1118,1,1119,1,1119,1,1120,1,1120,1,1121,1,1121,1,1122,1,
        1122,1,1123,1,1123,1,1123,5,1123,19261,8,1123,10,1123,12,1123,19264,
        9,1123,1,1123,1,1123,3,1123,19268,8,1123,1,1124,1,1124,1,1125,1,
        1125,1,1125,3,1125,19275,8,1125,1,1126,1,1126,1,1127,1,1127,1,1128,
        1,1128,1,1129,1,1129,1,1129,3,1129,19286,8,1129,1,1130,1,1130,1,
        1130,5,1130,19291,8,1130,10,1130,12,1130,19294,9,1130,1,1131,1,1131,
        1,1132,1,1132,3,1132,19300,8,1132,1,1133,1,1133,3,1133,19304,8,1133,
        1,1134,1,1134,1,1134,5,1134,19309,8,1134,10,1134,12,1134,19312,9,
        1134,1,1134,1,1134,3,1134,19316,8,1134,1,1135,1,1135,1,1136,1,1136,
        1,1136,5,1136,19323,8,1136,10,1136,12,1136,19326,9,1136,1,1137,1,
        1137,1,1137,5,1137,19331,8,1137,10,1137,12,1137,19334,9,1137,1,1138,
        1,1138,1,1138,5,1138,19339,8,1138,10,1138,12,1138,19342,9,1138,1,
        1139,1,1139,1,1139,3,1139,19347,8,1139,1,1140,1,1140,1,1140,3,1140,
        19352,8,1140,1,1141,1,1141,1,1141,3,1141,19357,8,1141,1,1142,1,1142,
        3,1142,19361,8,1142,1,1142,1,1142,1,1142,3,1142,19366,8,1142,1,1142,
        3,1142,19369,8,1142,1,1143,1,1143,1,1143,3,1143,19374,8,1143,1,1144,
        1,1144,3,1144,19378,8,1144,1,1145,1,1145,3,1145,19382,8,1145,1,1146,
        1,1146,1,1146,3,1146,19387,8,1146,1,1147,1,1147,1,1147,5,1147,19392,
        8,1147,10,1147,12,1147,19395,9,1147,1,1147,1,1147,3,1147,19399,8,
        1147,1,1148,1,1148,1,1149,1,1149,1,1150,1,1150,1,1150,5,1150,19408,
        8,1150,10,1150,12,1150,19411,9,1150,1,1151,1,1151,1,1151,3,1151,
        19416,8,1151,1,1151,1,1151,1,1151,3,1151,19421,8,1151,1,1151,1,1151,
        3,1151,19425,8,1151,3,1151,19427,8,1151,1,1152,1,1152,1,1152,1,1152,
        1,1152,3,1152,19434,8,1152,1,1152,1,1152,3,1152,19438,8,1152,1,1152,
        1,1152,1,1152,1,1152,5,1152,19444,8,1152,10,1152,12,1152,19447,9,
        1152,3,1152,19449,8,1152,1,1152,1,1152,1,1152,3,1152,19454,8,1152,
        1,1153,1,1153,1,1153,5,1153,19459,8,1153,10,1153,12,1153,19462,9,
        1153,1,1154,1,1154,1,1155,1,1155,1,1156,1,1156,1,1157,1,1157,1,1158,
        1,1158,1,1158,1,1158,1,1158,5,1158,19477,8,1158,10,1158,12,1158,
        19480,9,1158,1,1158,1,1158,1,1158,1,1158,1,1158,1,1158,1,1158,1,
        1158,1,1158,1,1158,1,1158,1,1158,1,1158,1,1158,3,1158,19496,8,1158,
        1,1159,1,1159,1,1159,5,1159,19501,8,1159,10,1159,12,1159,19504,9,
        1159,1,1160,1,1160,1,1160,1,1160,1,1161,1,1161,1,1161,1,1161,1,1161,
        1,1161,3,1161,19516,8,1161,1,1161,1,1161,3,1161,19520,8,1161,1,1162,
        1,1162,1,1162,1,1162,5,1162,19526,8,1162,10,1162,12,1162,19529,9,
        1162,3,1162,19531,8,1162,1,1162,1,1162,3,1162,19535,8,1162,1,1163,
        1,1163,1,1163,3,1163,19540,8,1163,1,1163,1,1163,1,1163,3,1163,19545,
        8,1163,5,1163,19547,8,1163,10,1163,12,1163,19550,9,1163,3,1163,19552,
        8,1163,1,1163,1,1163,3,1163,19556,8,1163,1,1164,1,1164,1,1164,1,
        1164,1,1164,3,1164,19563,8,1164,1,1164,1,1164,1,1164,3,1164,19568,
        8,1164,3,1164,19570,8,1164,3,1164,19572,8,1164,1,1164,1,1164,1,1164,
        1,1164,1,1164,1,1164,1,1164,1,1164,3,1164,19582,8,1164,1,1164,1,
        1164,1,1164,3,1164,19587,8,1164,5,1164,19589,8,1164,10,1164,12,1164,
        19592,9,1164,3,1164,19594,8,1164,1,1164,1,1164,3,1164,19598,8,1164,
        1,1165,1,1165,1,1165,1,1166,1,1166,1,1166,1,1166,3,1166,19607,8,
        1166,1,1166,1,1166,1,1167,1,1167,3,1167,19613,8,1167,1,1167,1,1167,
        3,1167,19617,8,1167,3,1167,19619,8,1167,1,1168,1,1168,3,1168,19623,
        8,1168,1,1168,1,1168,3,1168,19627,8,1168,1,1168,1,1168,1,1168,1,
        1168,1,1168,3,1168,19634,8,1168,1,1168,1,1168,1,1168,1,1168,1,1168,
        1,1168,3,1168,19642,8,1168,1,1168,1,1168,1,1168,1,1168,1,1168,1,
        1168,3,1168,19650,8,1168,3,1168,19652,8,1168,1,1169,1,1169,1,1169,
        3,1169,19657,8,1169,1,1169,1,1169,1,1169,3,1169,19662,8,1169,3,1169,
        19664,8,1169,1,1169,3,1169,19667,8,1169,1,1169,1,1169,1,1170,1,1170,
        1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,
        1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,3,1170,
        19691,8,1170,1,1170,1,1170,1,1170,1,1170,1,1170,3,1170,19698,8,1170,
        1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,
        1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,
        1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,1170,1,
        1170,1,1170,1,1170,1,1170,3,1170,19732,8,1170,1,1171,1,1171,1,1171,
        3,1171,19737,8,1171,1,1171,3,1171,19740,8,1171,1,1171,1,1171,1,1171,
        3,1171,19745,8,1171,3,1171,19747,8,1171,1,1171,1,1171,5,1171,19751,
        8,1171,10,1171,12,1171,19754,9,1171,1,1172,1,1172,1,1172,1,1172,
        1,1172,1,1172,3,1172,19762,8,1172,1,1172,1,1172,1,1172,4,1172,19767,
        8,1172,11,1172,12,1172,19768,5,1172,19771,8,1172,10,1172,12,1172,
        19774,9,1172,1,1173,1,1173,3,1173,19778,8,1173,1,1173,1,1173,1,1173,
        3,1173,19783,8,1173,1,1173,5,1173,19786,8,1173,10,1173,12,1173,19789,
        9,1173,1,1174,1,1174,3,1174,19793,8,1174,1,1174,1,1174,1,1174,5,
        1174,19798,8,1174,10,1174,12,1174,19801,9,1174,1,1175,1,1175,3,1175,
        19805,8,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,
        1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,
        1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,1175,1,
        1175,1,1175,3,1175,19835,8,1175,1,1176,1,1176,1,1176,1,1176,1,1176,
        3,1176,19842,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,19857,8,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,3,1176,19873,8,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,19892,8,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,3,1176,19909,8,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,3,1176,19916,8,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,3,1176,19924,8,1176,1,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,19937,8,
        1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,19946,
        8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,19955,
        8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,19964,
        8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,
        1176,19974,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,
        19982,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,3,1176,19992,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,3,1176,20002,8,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,20014,8,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,3,1176,20030,8,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,3,1176,20048,8,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,20061,
        8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,3,1176,20076,8,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,20087,8,
        1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,3,1176,
        20097,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,3,1176,20108,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,3,1176,20118,8,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,3,1176,20135,8,1176,1,1176,1,1176,1,1176,1,1176,3,
        1176,20141,8,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,
        1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,1176,1,
        1176,1,1176,1,1176,1,1176,3,1176,20163,8,1176,1,1177,1,1177,1,1177,
        3,1177,20168,8,1177,1,1177,1,1177,1,1177,1,1177,3,1177,20174,8,1177,
        1,1177,1,1177,1,1177,1,1177,3,1177,20180,8,1177,1,1177,1,1177,1,
        1177,1,1177,3,1177,20186,8,1177,1,1177,1,1177,1,1177,3,1177,20191,
        8,1177,3,1177,20193,8,1177,1,1177,3,1177,20196,8,1177,1,1177,1,1177,
        1,1177,1,1177,1,1177,1,1177,1,1177,1,1177,3,1177,20206,8,1177,1,
        1177,3,1177,20209,8,1177,3,1177,20211,8,1177,3,1177,20213,8,1177,
        1,1177,1,1177,1,1177,1,1177,1,1177,1,1177,1,1177,1,1177,1,1177,1,
        1177,1,1177,1,1177,3,1177,20227,8,1177,1,1178,1,1178,3,1178,20231,
        8,1178,1,1178,3,1178,20234,8,1178,1,1179,1,1179,1,1179,1,1180,1,
        1180,1,1181,1,1181,3,1181,20243,8,1181,1,1181,1,1181,1,1182,1,1182,
        3,1182,20249,8,1182,1,1183,1,1183,1,1184,1,1184,1,1184,1,1184,1,
        1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,
        1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,
        1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,
        1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,
        1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,
        1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,
        1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,
        1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,
        1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,
        1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,
        1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,
        1,1185,1,1185,1,1185,1,1185,1,1185,1,1185,3,1185,20368,8,1185,1,
        1186,1,1186,1,1187,1,1187,1,1188,1,1188,1,1189,1,1189,1,1190,1,1190,
        1,1190,1,3811,7,2056,2064,2066,2076,2088,2182,2344,1191,0,2,4,6,
        8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,
        52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,
        96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,
        130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,
        162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,
        194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,
        226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,
        258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,
        290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,
        322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,
        354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,
        386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,
        418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,
        450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,
        482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,
        514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,
        546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,
        578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,608,
        610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,640,
        642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,
        674,676,678,680,682,684,686,688,690,692,694,696,698,700,702,704,
        706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,736,
        738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768,
        770,772,774,776,778,780,782,784,786,788,790,792,794,796,798,800,
        802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,
        834,836,838,840,842,844,846,848,850,852,854,856,858,860,862,864,
        866,868,870,872,874,876,878,880,882,884,886,888,890,892,894,896,
        898,900,902,904,906,908,910,912,914,916,918,920,922,924,926,928,
        930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,
        962,964,966,968,970,972,974,976,978,980,982,984,986,988,990,992,
        994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,
        1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,
        1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,
        1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,
        1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,
        1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,
        1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,
        1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,
        1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,
        1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,
        1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,
        1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,
        1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,
        1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,
        1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,
        1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,
        1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,
        1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,
        1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,
        1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,
        1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,
        1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,
        1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,
        1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,
        1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,
        1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,
        1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,
        1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,
        1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,
        1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,
        1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,
        1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,
        1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,
        1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,
        1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,
        1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,
        1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,
        1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,
        1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,
        2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,
        2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,
        2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,
        2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,
        2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138,
        2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,
        2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,
        2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,
        2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,
        2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,
        2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,
        2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,
        2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,
        2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,
        2374,2376,2378,2380,0,280,2,0,1153,1153,2197,2197,2,0,643,643,848,
        848,2,0,2210,2210,2212,2212,2,0,1108,1108,1482,1482,2,0,21,21,926,
        926,5,0,434,434,634,634,909,909,1268,1268,2104,2104,2,0,220,220,
        557,557,2,0,576,576,1044,1044,2,0,766,766,848,848,2,0,21,21,438,
        438,3,0,609,609,1240,1240,1253,1253,2,0,1192,1192,2216,2216,2,0,
        609,609,1253,1253,4,0,89,89,634,634,845,845,2306,2306,3,0,210,210,
        333,333,2195,2195,2,0,1414,1414,1470,1470,2,0,1115,1115,1498,1498,
        2,0,404,404,467,467,2,0,196,196,1630,1630,2,0,2344,2344,2350,2350,
        2,0,451,451,1070,1070,2,0,894,894,1071,1071,2,0,67,67,740,740,3,
        0,619,619,813,813,1420,1420,2,0,368,368,576,576,2,0,1528,1528,1999,
        1999,5,0,592,592,1257,1257,1386,1386,2067,2067,2076,2076,2,0,210,
        210,1233,1233,2,0,1380,1380,1398,1398,3,0,38,38,233,233,821,821,
        2,0,878,878,906,906,3,0,141,141,1257,1257,1632,1632,2,0,35,35,1321,
        1321,4,0,266,266,303,303,835,835,1381,1381,2,0,140,140,1617,1617,
        2,0,33,33,109,109,3,0,381,381,713,713,2114,2114,3,0,967,967,1184,
        1184,1265,1265,2,0,576,576,2160,2160,2,0,141,141,1632,1632,3,0,21,
        21,438,438,926,926,3,0,329,329,1212,1212,1636,1636,2,0,857,857,1233,
        1233,2,0,882,882,1661,1661,3,0,556,556,718,718,1252,1252,3,0,231,
        231,1136,1136,1518,1518,3,0,355,355,421,421,1409,1409,2,0,14,14,
        38,38,2,0,1107,1107,1476,1476,2,0,1647,1647,2024,2024,10,0,347,347,
        617,617,639,639,905,905,933,933,1407,1407,1559,1559,1647,1647,2200,
        2200,2259,2259,2,0,2306,2306,2309,2309,2,0,68,68,391,391,2,0,559,
        559,779,779,3,0,716,716,1586,1586,1659,1659,14,0,42,42,83,83,230,
        230,381,381,505,505,565,565,607,607,675,675,713,713,829,829,1429,
        1429,1481,1481,1569,1569,2114,2114,3,0,42,42,305,305,438,438,3,0,
        505,505,1429,1429,2216,2216,4,0,342,342,400,400,1186,1186,2257,2257,
        3,0,85,85,594,594,640,640,2,0,1110,1110,1487,1487,5,0,449,449,595,
        595,848,848,1256,1256,1993,1993,3,0,346,346,931,931,2260,2260,6,
        0,387,387,630,630,741,741,799,799,883,886,1266,1267,2,0,132,132,
        2091,2091,2,0,2110,2110,2122,2122,2,0,373,373,656,656,2,0,738,738,
        2194,2194,2,0,929,929,1065,1065,2,0,21,21,1480,1480,2,0,524,524,
        603,603,2,0,368,368,2007,2007,2,0,829,829,2095,2095,2,0,21,21,2114,
        2114,2,0,1177,1177,1190,1190,2,0,1865,1865,2144,2144,2,0,154,154,
        497,497,2,0,4,4,1586,1586,2,0,38,38,319,319,2,0,1549,1549,2020,2020,
        2,0,675,675,1999,1999,2,0,26,26,379,379,2,0,1492,1492,1630,1630,
        3,0,592,592,1257,1257,1386,1386,3,0,196,196,1492,1492,1630,1630,
        2,0,237,237,1490,1490,3,0,116,116,136,136,205,205,2,0,171,171,1500,
        1500,2,0,324,324,376,376,2,0,276,276,278,278,2,0,645,645,648,648,
        1,0,271,272,2,0,1149,1149,2160,2160,2,0,819,819,1997,1997,2,0,335,
        335,2005,2005,3,0,656,656,1115,1115,2007,2007,2,0,1178,1178,1193,
        1193,2,0,118,118,1622,1622,3,0,554,554,832,832,1057,1057,2,0,89,
        89,856,856,2,0,615,615,1048,1048,2,0,634,634,845,845,2,0,231,231,
        383,383,2,0,475,475,2071,2071,2,0,77,77,1710,1710,2,0,503,503,663,
        663,2,0,158,158,1010,1010,3,0,237,237,541,541,576,576,3,0,238,238,
        541,541,576,576,2,0,821,821,859,859,2,0,1117,1117,1521,1521,6,0,
        244,244,266,266,302,303,649,649,834,835,1587,1587,3,0,368,368,2093,
        2093,2341,2341,4,0,534,534,660,660,1280,1282,1284,1285,2,0,602,602,
        1380,1380,2,0,381,381,1372,1372,2,0,104,104,1562,1562,2,0,438,438,
        1372,1372,2,0,727,727,811,811,2,0,1074,1074,2261,2261,6,0,449,449,
        595,595,766,766,848,848,1256,1256,1993,1993,2,0,63,63,1409,1409,
        2,0,168,168,1409,1409,5,0,310,310,634,634,845,845,881,881,1071,1071,
        2,0,2093,2093,2341,2341,3,0,368,368,768,768,1441,1441,3,0,368,368,
        768,768,1071,1071,3,0,381,381,404,404,467,467,2,0,226,226,1528,1528,
        2,0,4,4,924,924,2,0,609,609,1567,1567,4,0,346,347,931,931,933,933,
        2259,2260,1,0,2280,2283,2,0,899,899,1061,1061,2,0,438,438,768,768,
        2,0,49,49,768,768,2,0,40,40,408,408,3,0,237,237,451,451,1070,1070,
        2,0,438,438,1509,1509,2,0,206,206,1651,1651,2,0,435,435,2118,2118,
        2,0,110,110,473,473,2,0,833,833,1319,1319,3,0,96,96,1312,1312,1394,
        1394,2,0,231,231,1367,1367,2,0,1,1,1677,1677,2,0,1319,1319,1624,
        1624,3,0,38,38,1071,1071,1651,1651,3,0,634,634,909,909,2104,2104,
        4,0,404,404,467,467,1480,1480,1706,1706,2,0,538,538,2068,2068,2,
        0,1480,1480,1590,1590,2,0,1713,1713,1865,1865,2,0,868,868,871,871,
        1,0,872,874,2,0,38,38,787,787,2,0,471,471,1472,1472,3,0,366,366,
        471,471,1472,1472,2,0,1429,1429,2216,2216,2,0,1275,1275,1277,1277,
        1,0,1690,1691,2,0,736,736,2114,2114,2,0,1123,1123,1626,1626,2,0,
        825,825,2165,2165,2,0,586,586,1300,1300,2,0,367,367,767,767,3,0,
        634,634,845,845,881,881,2,0,319,319,1162,1162,2,0,602,602,821,821,
        2,0,438,438,770,770,1,0,2333,2334,4,0,696,696,708,708,1023,1023,
        1247,1247,2,0,368,368,2356,2356,1,1,2367,2367,1,0,2367,2367,1,0,
        1507,1508,2,0,105,105,656,656,2,0,381,381,2329,2329,2,0,146,146,
        387,387,3,0,38,38,417,417,2091,2091,2,0,311,311,950,950,2,0,311,
        311,1243,1243,3,0,590,590,791,791,1514,1514,3,0,1549,1549,1624,1624,
        2020,2020,2,0,502,502,661,661,2,0,315,315,1520,1520,2,0,651,651,
        768,768,2,0,38,38,2113,2113,2,0,93,93,1576,1576,1,0,1528,1529,2,
        0,559,559,970,970,2,0,38,38,559,559,2,0,1999,1999,2013,2013,2,0,
        782,782,1682,1682,2,0,882,882,1688,1688,3,0,497,497,732,732,2090,
        2090,2,0,38,38,417,417,2,0,805,807,809,809,1,0,2364,2365,2,0,484,
        484,2069,2069,3,0,927,927,2350,2350,2354,2354,1,0,2351,2352,4,0,
        346,346,931,931,1558,1558,2260,2260,2,0,365,365,665,665,4,0,298,
        298,559,559,779,779,810,810,3,0,508,508,970,970,1379,1379,1,0,487,
        488,4,0,38,38,54,54,508,508,1625,1625,3,0,143,143,790,790,2057,2057,
        2,0,3,3,1162,1162,2,0,157,157,186,186,2,0,66,66,1172,1172,2,0,740,
        740,2165,2165,2,0,484,484,1162,1162,2,0,465,465,1162,1162,2,0,484,
        484,651,651,3,0,484,484,651,651,1484,1484,4,0,484,484,651,651,1162,
        1162,1480,1480,3,0,305,305,484,484,651,651,3,0,484,484,651,651,1162,
        1162,2,0,250,250,2085,2085,2,0,173,173,2224,2224,2,0,417,417,2091,
        2091,2,0,1302,1304,1307,1307,2,0,167,167,236,236,2,0,562,562,780,
        780,2,0,2302,2302,2305,2305,3,0,2036,2037,2045,2045,2048,2049,2,
        0,2040,2040,2053,2053,2,0,187,187,953,953,2,0,2226,2226,2234,2234,
        2,0,479,479,1037,1037,2,0,492,492,943,943,2,0,279,279,424,424,2,
        0,629,629,1601,1601,10,0,1160,1160,2169,2169,2298,2300,2303,2304,
        2306,2307,2309,2310,2312,2313,2315,2315,2319,2322,2335,2335,2,0,
        2291,2292,2294,2297,1,0,2265,2270,2,0,1420,1420,1529,1529,2,0,573,
        573,1362,1362,2,0,1118,1118,1546,1546,2,0,482,482,486,486,1,0,1639,
        1640,2,0,1239,1239,1637,1637,2,0,231,231,1518,1518,3,0,231,231,1071,
        1071,1518,1518,2,0,1275,1275,1691,1691,3,0,38,38,54,54,1625,1625,
        2,0,651,651,1493,1493,1,0,1308,1309,2,0,346,346,2260,2260,2,0,931,
        931,1558,1558,2,0,42,42,438,438,2,0,305,305,438,438,2,0,42,42,305,
        305,3,0,42,42,438,438,505,505,2,0,54,54,523,523,2,0,196,196,1389,
        1389,4,0,42,42,230,230,438,438,1569,1569,4,0,42,42,438,438,1569,
        1569,2114,2114,3,0,381,381,438,438,713,713,6,0,42,42,381,381,438,
        438,713,713,1569,1569,2114,2114,2,0,438,438,2114,2114,3,0,42,42,
        438,438,607,607,3,0,42,42,438,438,1569,1569,3,0,42,42,305,305,1498,
        1498,3,0,42,42,438,438,2148,2148,10,0,42,42,100,100,230,230,381,
        381,438,438,713,713,829,829,1429,1429,1569,1569,2114,2114,5,0,42,
        42,305,305,438,438,852,852,2093,2093,4,0,42,42,438,438,505,505,2086,
        2086,3,0,438,438,892,892,2086,2086,2,0,46,46,83,83,2,0,397,397,2058,
        2058,6,0,346,346,638,638,904,904,931,931,1558,1558,2260,2260,2,0,
        2336,2336,2343,2343,1,0,2331,2332,256,0,6,6,8,8,10,12,14,14,16,16,
        19,20,29,29,32,32,43,43,45,45,47,47,51,52,59,59,61,62,64,64,72,72,
        74,74,92,92,95,95,97,98,101,101,106,107,111,111,114,114,131,131,
        148,148,162,164,168,169,176,176,197,201,204,204,211,212,214,214,
        233,234,240,241,249,251,254,256,275,278,284,284,286,288,306,306,
        309,310,314,314,317,317,338,338,340,340,342,343,347,347,353,353,
        363,363,370,371,375,375,379,380,392,393,399,399,403,403,405,405,
        410,410,420,420,444,445,451,451,456,456,462,462,466,466,468,468,
        481,481,491,491,493,493,507,507,519,519,525,525,531,531,536,537,
        539,540,542,542,544,545,549,549,551,552,563,563,569,569,581,581,
        594,594,596,596,601,601,617,617,630,631,639,640,643,643,655,655,
        659,660,676,676,695,695,704,704,706,706,709,709,727,727,737,737,
        741,741,749,763,765,765,774,774,776,776,782,782,788,789,799,799,
        802,802,811,811,826,826,828,828,837,837,843,843,855,855,857,857,
        861,864,875,875,883,887,894,894,905,905,918,918,922,922,924,924,
        928,928,933,933,939,939,958,958,1000,1001,1005,1005,1007,1007,1014,
        1014,1016,1016,1023,1023,1028,1029,1033,1033,1046,1046,1052,1054,
        1070,1070,1076,1076,1087,1089,1092,1092,1094,1096,1101,1101,1106,
        1106,1109,1109,1116,1116,1124,1124,1141,1141,1148,1148,1150,1152,
        1159,1159,1173,1173,1179,1179,1186,1186,1188,1189,1209,1211,1220,
        1225,1230,1230,1266,1267,1269,1269,1271,1272,1286,1286,1288,1289,
        1291,1291,1293,1293,1313,1313,1316,1317,1336,1336,1340,1344,1351,
        1351,1353,1354,1357,1358,1366,1366,1373,1373,1375,1375,1377,1378,
        1382,1382,1392,1392,1395,1397,1403,1403,1407,1407,1416,1416,1431,
        1431,1443,1443,1475,1475,1478,1478,1494,1494,1516,1516,1522,1522,
        1534,1534,1539,1539,1551,1551,1554,1554,1559,1560,1580,1580,1582,
        1582,1584,1584,1599,1600,1606,1606,1628,1629,1643,1643,1647,1648,
        1650,1650,1659,1660,1681,1681,1694,1695,1703,1703,1713,1713,1717,
        1717,1719,1719,1725,1725,1743,1743,1748,1749,1753,1754,1776,1776,
        1788,1788,1791,1795,1820,1820,1848,1848,1859,1859,1990,1992,2001,
        2001,2010,2010,2016,2017,2035,2035,2059,2059,2064,2064,2072,2072,
        2080,2080,2085,2085,2096,2096,2103,2103,2108,2108,2122,2122,2126,
        2126,2130,2130,2137,2137,2143,2143,2149,2149,2151,2152,2154,2159,
        2161,2161,2163,2163,2176,2179,2191,2191,2193,2193,2200,2201,2211,
        2211,2215,2215,2257,2257,2259,2259,2263,2263,2271,2283,2285,2285,
        2287,2287,2289,2290,2308,2308,2340,2340,352,0,1,2,4,5,7,7,9,9,13,
        13,15,15,17,18,21,28,30,31,33,33,37,37,39,41,44,44,46,46,48,48,50,
        50,53,53,55,58,60,60,63,63,65,66,69,71,73,73,75,82,84,89,91,91,93,
        93,96,96,100,100,103,105,108,110,112,113,116,125,127,130,132,141,
        143,147,149,153,155,161,165,166,170,173,175,175,177,182,184,185,
        187,189,191,196,202,202,205,209,213,213,215,232,235,239,242,245,
        247,248,252,253,257,264,266,272,274,274,279,283,285,285,289,304,
        307,308,311,313,315,316,318,328,330,336,339,339,341,341,345,346,
        348,352,354,359,361,362,364,367,369,369,372,374,376,378,382,385,
        387,390,394,395,397,398,400,402,404,404,406,409,411,413,415,416,
        418,419,421,424,431,437,439,439,441,442,446,448,450,450,452,455,
        457,459,463,465,467,467,469,472,474,480,483,486,489,490,492,492,
        494,497,500,503,505,506,509,509,511,518,520,524,526,530,532,535,
        538,538,541,541,543,543,546,548,550,550,554,562,564,566,568,568,
        570,574,576,579,582,587,589,593,597,600,602,605,608,608,610,616,
        618,621,623,629,633,638,641,642,645,654,656,658,661,674,677,691,
        693,694,697,703,705,705,707,707,710,712,714,725,728,731,733,734,
        736,736,738,739,742,748,767,773,775,775,778,781,783,787,790,798,
        800,801,803,808,810,810,812,825,827,827,830,836,838,840,844,847,
        849,854,856,856,858,860,865,874,876,882,888,893,895,901,903,904,
        906,909,912,917,919,921,925,927,929,932,934,935,937,938,940,950,
        952,957,959,999,1002,1004,1006,1006,1008,1013,1015,1015,1018,1022,
        1024,1027,1030,1032,1034,1045,1047,1051,1055,1069,1071,1075,1077,
        1086,1090,1091,1093,1093,1097,1100,1102,1105,1107,1108,1110,1115,
        1117,1123,1125,1137,1139,1140,1142,1147,1149,1149,1154,1158,1160,
        1161,1163,1163,1165,1172,1174,1178,1181,1185,1187,1187,1190,1190,
        1192,1192,1194,1205,1207,1208,1213,1219,1226,1229,1231,1232,1234,
        1236,1238,1238,1240,1246,1248,1251,1253,1255,1257,1258,1260,1261,
        1263,1265,1268,1268,1270,1270,1273,1285,1287,1287,1290,1290,1292,
        1292,1294,1295,1297,1301,1305,1306,1312,1312,1314,1315,1318,1320,
        1323,1329,1331,1335,1338,1339,1347,1350,1352,1352,1355,1356,1360,
        1365,1367,1372,1374,1374,1376,1376,1380,1381,1383,1391,1393,1394,
        1399,1402,1404,1406,1408,1415,1418,1422,1424,1430,1432,1434,1436,
        1442,1444,1473,1476,1477,1479,1480,1482,1491,1493,1493,1495,1498,
        1500,1501,1503,1510,1512,1515,1517,1521,1523,1533,1535,1538,1540,
        1550,1552,1553,1556,1558,1561,1568,1571,1576,1578,1578,1581,1581,
        1583,1583,1585,1589,1591,1594,1596,1597,1601,1605,1607,1609,1612,
        1616,1618,1622,1624,1627,1630,1635,1638,1639,1641,1642,1644,1646,
        1649,1649,1651,1653,1655,1658,1661,1680,1682,1693,1696,1700,1702,
        1702,1704,1711,1713,1716,1718,1718,1720,1724,1726,1742,1744,1747,
        1750,1752,1755,1775,1777,1787,1789,1790,1796,1819,1821,1847,1849,
        1858,1860,1989,1994,2000,2002,2009,2011,2015,2018,2018,2020,2020,
        2023,2024,2026,2034,2036,2051,2053,2058,2060,2063,2065,2066,2068,
        2071,2073,2079,2081,2084,2086,2089,2092,2095,2097,2102,2104,2107,
        2109,2113,2115,2121,2123,2125,2127,2129,2131,2136,2138,2142,2144,
        2148,2150,2150,2153,2153,2160,2160,2162,2162,2165,2165,2169,2175,
        2180,2189,2192,2192,2194,2198,2202,2204,2207,2210,2213,2214,2216,
        2217,2219,2221,2223,2234,2236,2256,2260,2261,2264,2270,2288,2288,
        2291,2299,2302,2302,2305,2312,2314,2320,2322,2325,3,0,194,194,2301,
        2301,2316,2318,5,0,298,298,2298,2298,2311,2311,2314,2314,2319,2319,
        23390,0,2383,1,0,0,0,2,2549,1,0,0,0,4,2551,1,0,0,0,6,2608,1,0,0,
        0,8,2633,1,0,0,0,10,2674,1,0,0,0,12,2680,1,0,0,0,14,2707,1,0,0,0,
        16,2709,1,0,0,0,18,2728,1,0,0,0,20,2769,1,0,0,0,22,2801,1,0,0,0,
        24,2806,1,0,0,0,26,2828,1,0,0,0,28,2830,1,0,0,0,30,2860,1,0,0,0,
        32,2862,1,0,0,0,34,2872,1,0,0,0,36,2874,1,0,0,0,38,2876,1,0,0,0,
        40,2919,1,0,0,0,42,2921,1,0,0,0,44,2961,1,0,0,0,46,2974,1,0,0,0,
        48,2976,1,0,0,0,50,2994,1,0,0,0,52,3005,1,0,0,0,54,3011,1,0,0,0,
        56,3030,1,0,0,0,58,3032,1,0,0,0,60,3042,1,0,0,0,62,3076,1,0,0,0,
        64,3115,1,0,0,0,66,3117,1,0,0,0,68,3149,1,0,0,0,70,3173,1,0,0,0,
        72,3223,1,0,0,0,74,3225,1,0,0,0,76,3227,1,0,0,0,78,3233,1,0,0,0,
        80,3235,1,0,0,0,82,3254,1,0,0,0,84,3262,1,0,0,0,86,3269,1,0,0,0,
        88,3275,1,0,0,0,90,3277,1,0,0,0,92,3291,1,0,0,0,94,3293,1,0,0,0,
        96,3306,1,0,0,0,98,3310,1,0,0,0,100,3345,1,0,0,0,102,3359,1,0,0,
        0,104,3380,1,0,0,0,106,3415,1,0,0,0,108,3417,1,0,0,0,110,3475,1,
        0,0,0,112,3483,1,0,0,0,114,3487,1,0,0,0,116,3501,1,0,0,0,118,3511,
        1,0,0,0,120,3524,1,0,0,0,122,3528,1,0,0,0,124,3532,1,0,0,0,126,3540,
        1,0,0,0,128,3543,1,0,0,0,130,3555,1,0,0,0,132,3560,1,0,0,0,134,3581,
        1,0,0,0,136,3583,1,0,0,0,138,3597,1,0,0,0,140,3615,1,0,0,0,142,3633,
        1,0,0,0,144,3656,1,0,0,0,146,3678,1,0,0,0,148,3713,1,0,0,0,150,3715,
        1,0,0,0,152,3723,1,0,0,0,154,3725,1,0,0,0,156,3730,1,0,0,0,158,3742,
        1,0,0,0,160,3762,1,0,0,0,162,3791,1,0,0,0,164,3838,1,0,0,0,166,3840,
        1,0,0,0,168,3864,1,0,0,0,170,3904,1,0,0,0,172,3906,1,0,0,0,174,3928,
        1,0,0,0,176,3942,1,0,0,0,178,3946,1,0,0,0,180,3963,1,0,0,0,182,4009,
        1,0,0,0,184,4045,1,0,0,0,186,4083,1,0,0,0,188,4092,1,0,0,0,190,4096,
        1,0,0,0,192,4110,1,0,0,0,194,4120,1,0,0,0,196,4125,1,0,0,0,198,4129,
        1,0,0,0,200,4148,1,0,0,0,202,4150,1,0,0,0,204,4152,1,0,0,0,206,4167,
        1,0,0,0,208,4171,1,0,0,0,210,4194,1,0,0,0,212,4217,1,0,0,0,214,4226,
        1,0,0,0,216,4235,1,0,0,0,218,4244,1,0,0,0,220,4248,1,0,0,0,222,4253,
        1,0,0,0,224,4276,1,0,0,0,226,4278,1,0,0,0,228,4282,1,0,0,0,230,4332,
        1,0,0,0,232,4360,1,0,0,0,234,4362,1,0,0,0,236,4376,1,0,0,0,238,4381,
        1,0,0,0,240,4389,1,0,0,0,242,4397,1,0,0,0,244,4400,1,0,0,0,246,4409,
        1,0,0,0,248,4423,1,0,0,0,250,4440,1,0,0,0,252,4457,1,0,0,0,254,4465,
        1,0,0,0,256,4470,1,0,0,0,258,4486,1,0,0,0,260,4490,1,0,0,0,262,4514,
        1,0,0,0,264,4517,1,0,0,0,266,4523,1,0,0,0,268,4533,1,0,0,0,270,4545,
        1,0,0,0,272,4573,1,0,0,0,274,4579,1,0,0,0,276,4582,1,0,0,0,278,4589,
        1,0,0,0,280,4597,1,0,0,0,282,4610,1,0,0,0,284,4612,1,0,0,0,286,4616,
        1,0,0,0,288,4622,1,0,0,0,290,4647,1,0,0,0,292,4678,1,0,0,0,294,4723,
        1,0,0,0,296,4733,1,0,0,0,298,4735,1,0,0,0,300,4740,1,0,0,0,302,4754,
        1,0,0,0,304,4756,1,0,0,0,306,4761,1,0,0,0,308,4765,1,0,0,0,310,4803,
        1,0,0,0,312,4819,1,0,0,0,314,4852,1,0,0,0,316,4887,1,0,0,0,318,4891,
        1,0,0,0,320,4906,1,0,0,0,322,4908,1,0,0,0,324,4911,1,0,0,0,326,4915,
        1,0,0,0,328,4923,1,0,0,0,330,4986,1,0,0,0,332,4988,1,0,0,0,334,5014,
        1,0,0,0,336,5016,1,0,0,0,338,5020,1,0,0,0,340,5093,1,0,0,0,342,5095,
        1,0,0,0,344,5098,1,0,0,0,346,5101,1,0,0,0,348,5113,1,0,0,0,350,5115,
        1,0,0,0,352,5131,1,0,0,0,354,5144,1,0,0,0,356,5210,1,0,0,0,358,5222,
        1,0,0,0,360,5234,1,0,0,0,362,5246,1,0,0,0,364,5251,1,0,0,0,366,5256,
        1,0,0,0,368,5260,1,0,0,0,370,5265,1,0,0,0,372,5269,1,0,0,0,374,5274,
        1,0,0,0,376,5283,1,0,0,0,378,5306,1,0,0,0,380,5319,1,0,0,0,382,5344,
        1,0,0,0,384,5346,1,0,0,0,386,5365,1,0,0,0,388,5371,1,0,0,0,390,5413,
        1,0,0,0,392,5431,1,0,0,0,394,5443,1,0,0,0,396,5449,1,0,0,0,398,5460,
        1,0,0,0,400,5471,1,0,0,0,402,5486,1,0,0,0,404,5501,1,0,0,0,406,5572,
        1,0,0,0,408,5587,1,0,0,0,410,5590,1,0,0,0,412,5598,1,0,0,0,414,5618,
        1,0,0,0,416,5646,1,0,0,0,418,5658,1,0,0,0,420,5662,1,0,0,0,422,5671,
        1,0,0,0,424,5703,1,0,0,0,426,5705,1,0,0,0,428,5714,1,0,0,0,430,5716,
        1,0,0,0,432,5746,1,0,0,0,434,5748,1,0,0,0,436,5757,1,0,0,0,438,5815,
        1,0,0,0,440,5817,1,0,0,0,442,5838,1,0,0,0,444,5844,1,0,0,0,446,5846,
        1,0,0,0,448,5898,1,0,0,0,450,5910,1,0,0,0,452,5919,1,0,0,0,454,5940,
        1,0,0,0,456,5944,1,0,0,0,458,5948,1,0,0,0,460,5982,1,0,0,0,462,5990,
        1,0,0,0,464,6002,1,0,0,0,466,6008,1,0,0,0,468,6015,1,0,0,0,470,6017,
        1,0,0,0,472,6041,1,0,0,0,474,6049,1,0,0,0,476,6053,1,0,0,0,478,6076,
        1,0,0,0,480,6122,1,0,0,0,482,6137,1,0,0,0,484,6139,1,0,0,0,486,6153,
        1,0,0,0,488,6185,1,0,0,0,490,6194,1,0,0,0,492,6210,1,0,0,0,494,6252,
        1,0,0,0,496,6283,1,0,0,0,498,6285,1,0,0,0,500,6292,1,0,0,0,502,6303,
        1,0,0,0,504,6314,1,0,0,0,506,6352,1,0,0,0,508,6354,1,0,0,0,510,6381,
        1,0,0,0,512,6394,1,0,0,0,514,6433,1,0,0,0,516,6435,1,0,0,0,518,6449,
        1,0,0,0,520,6454,1,0,0,0,522,6458,1,0,0,0,524,6471,1,0,0,0,526,6496,
        1,0,0,0,528,6498,1,0,0,0,530,6500,1,0,0,0,532,6502,1,0,0,0,534,6536,
        1,0,0,0,536,6538,1,0,0,0,538,6555,1,0,0,0,540,6570,1,0,0,0,542,6575,
        1,0,0,0,544,6600,1,0,0,0,546,6602,1,0,0,0,548,6612,1,0,0,0,550,6616,
        1,0,0,0,552,6642,1,0,0,0,554,6662,1,0,0,0,556,6670,1,0,0,0,558,6672,
        1,0,0,0,560,6674,1,0,0,0,562,6676,1,0,0,0,564,6699,1,0,0,0,566,6748,
        1,0,0,0,568,6750,1,0,0,0,570,6760,1,0,0,0,572,6765,1,0,0,0,574,6769,
        1,0,0,0,576,6775,1,0,0,0,578,6779,1,0,0,0,580,6787,1,0,0,0,582,6813,
        1,0,0,0,584,6815,1,0,0,0,586,6821,1,0,0,0,588,6824,1,0,0,0,590,6827,
        1,0,0,0,592,6830,1,0,0,0,594,6884,1,0,0,0,596,6886,1,0,0,0,598,6897,
        1,0,0,0,600,6905,1,0,0,0,602,6916,1,0,0,0,604,6918,1,0,0,0,606,6936,
        1,0,0,0,608,6938,1,0,0,0,610,6955,1,0,0,0,612,6965,1,0,0,0,614,6968,
        1,0,0,0,616,6977,1,0,0,0,618,6991,1,0,0,0,620,7005,1,0,0,0,622,7023,
        1,0,0,0,624,7038,1,0,0,0,626,7055,1,0,0,0,628,7079,1,0,0,0,630,7081,
        1,0,0,0,632,7110,1,0,0,0,634,7139,1,0,0,0,636,7141,1,0,0,0,638,7143,
        1,0,0,0,640,7159,1,0,0,0,642,7171,1,0,0,0,644,7204,1,0,0,0,646,7221,
        1,0,0,0,648,7238,1,0,0,0,650,7254,1,0,0,0,652,7293,1,0,0,0,654,7300,
        1,0,0,0,656,7304,1,0,0,0,658,7312,1,0,0,0,660,7314,1,0,0,0,662,7332,
        1,0,0,0,664,7344,1,0,0,0,666,7361,1,0,0,0,668,7376,1,0,0,0,670,7386,
        1,0,0,0,672,7392,1,0,0,0,674,7396,1,0,0,0,676,7398,1,0,0,0,678,7400,
        1,0,0,0,680,7415,1,0,0,0,682,7469,1,0,0,0,684,7500,1,0,0,0,686,7502,
        1,0,0,0,688,7510,1,0,0,0,690,7560,1,0,0,0,692,7562,1,0,0,0,694,7569,
        1,0,0,0,696,7574,1,0,0,0,698,7576,1,0,0,0,700,7586,1,0,0,0,702,7647,
        1,0,0,0,704,7662,1,0,0,0,706,7664,1,0,0,0,708,7669,1,0,0,0,710,7671,
        1,0,0,0,712,7681,1,0,0,0,714,7683,1,0,0,0,716,7685,1,0,0,0,718,7687,
        1,0,0,0,720,7691,1,0,0,0,722,7693,1,0,0,0,724,7699,1,0,0,0,726,7746,
        1,0,0,0,728,7748,1,0,0,0,730,7775,1,0,0,0,732,7779,1,0,0,0,734,7820,
        1,0,0,0,736,7822,1,0,0,0,738,7831,1,0,0,0,740,7842,1,0,0,0,742,7846,
        1,0,0,0,744,7848,1,0,0,0,746,7866,1,0,0,0,748,7873,1,0,0,0,750,7880,
        1,0,0,0,752,7954,1,0,0,0,754,7956,1,0,0,0,756,7963,1,0,0,0,758,8090,
        1,0,0,0,760,8101,1,0,0,0,762,8112,1,0,0,0,764,8143,1,0,0,0,766,8151,
        1,0,0,0,768,8167,1,0,0,0,770,8191,1,0,0,0,772,8196,1,0,0,0,774,8249,
        1,0,0,0,776,8253,1,0,0,0,778,8268,1,0,0,0,780,8275,1,0,0,0,782,8292,
        1,0,0,0,784,8315,1,0,0,0,786,8371,1,0,0,0,788,8382,1,0,0,0,790,8390,
        1,0,0,0,792,8405,1,0,0,0,794,8420,1,0,0,0,796,8422,1,0,0,0,798,8424,
        1,0,0,0,800,8461,1,0,0,0,802,8470,1,0,0,0,804,8490,1,0,0,0,806,8500,
        1,0,0,0,808,8504,1,0,0,0,810,8576,1,0,0,0,812,8587,1,0,0,0,814,8605,
        1,0,0,0,816,8609,1,0,0,0,818,8612,1,0,0,0,820,8615,1,0,0,0,822,8621,
        1,0,0,0,824,8626,1,0,0,0,826,8630,1,0,0,0,828,8679,1,0,0,0,830,8709,
        1,0,0,0,832,8731,1,0,0,0,834,8740,1,0,0,0,836,8744,1,0,0,0,838,8767,
        1,0,0,0,840,8769,1,0,0,0,842,8806,1,0,0,0,844,8809,1,0,0,0,846,8873,
        1,0,0,0,848,8878,1,0,0,0,850,8880,1,0,0,0,852,8900,1,0,0,0,854,8954,
        1,0,0,0,856,8983,1,0,0,0,858,9020,1,0,0,0,860,9024,1,0,0,0,862,9072,
        1,0,0,0,864,9076,1,0,0,0,866,9100,1,0,0,0,868,9127,1,0,0,0,870,9129,
        1,0,0,0,872,9131,1,0,0,0,874,9214,1,0,0,0,876,9222,1,0,0,0,878,9224,
        1,0,0,0,880,9230,1,0,0,0,882,9241,1,0,0,0,884,9243,1,0,0,0,886,9246,
        1,0,0,0,888,9248,1,0,0,0,890,9257,1,0,0,0,892,9287,1,0,0,0,894,9290,
        1,0,0,0,896,9292,1,0,0,0,898,9303,1,0,0,0,900,9308,1,0,0,0,902,9325,
        1,0,0,0,904,9342,1,0,0,0,906,9345,1,0,0,0,908,9396,1,0,0,0,910,9398,
        1,0,0,0,912,9406,1,0,0,0,914,9422,1,0,0,0,916,9435,1,0,0,0,918,9437,
        1,0,0,0,920,9476,1,0,0,0,922,9478,1,0,0,0,924,9484,1,0,0,0,926,9491,
        1,0,0,0,928,9515,1,0,0,0,930,9528,1,0,0,0,932,9540,1,0,0,0,934,9545,
        1,0,0,0,936,9553,1,0,0,0,938,9555,1,0,0,0,940,9606,1,0,0,0,942,9608,
        1,0,0,0,944,9639,1,0,0,0,946,9641,1,0,0,0,948,9651,1,0,0,0,950,9676,
        1,0,0,0,952,9681,1,0,0,0,954,9686,1,0,0,0,956,9724,1,0,0,0,958,9726,
        1,0,0,0,960,9728,1,0,0,0,962,9730,1,0,0,0,964,9732,1,0,0,0,966,9794,
        1,0,0,0,968,9798,1,0,0,0,970,9803,1,0,0,0,972,9827,1,0,0,0,974,9840,
        1,0,0,0,976,9845,1,0,0,0,978,9871,1,0,0,0,980,9875,1,0,0,0,982,9880,
        1,0,0,0,984,9885,1,0,0,0,986,9893,1,0,0,0,988,9899,1,0,0,0,990,9902,
        1,0,0,0,992,9910,1,0,0,0,994,9916,1,0,0,0,996,9937,1,0,0,0,998,9960,
        1,0,0,0,1000,9968,1,0,0,0,1002,9970,1,0,0,0,1004,9978,1,0,0,0,1006,
        9990,1,0,0,0,1008,10007,1,0,0,0,1010,10010,1,0,0,0,1012,10025,1,
        0,0,0,1014,10108,1,0,0,0,1016,10123,1,0,0,0,1018,10168,1,0,0,0,1020,
        10170,1,0,0,0,1022,10178,1,0,0,0,1024,10198,1,0,0,0,1026,10200,1,
        0,0,0,1028,10252,1,0,0,0,1030,10276,1,0,0,0,1032,10295,1,0,0,0,1034,
        10297,1,0,0,0,1036,10305,1,0,0,0,1038,10308,1,0,0,0,1040,10311,1,
        0,0,0,1042,10339,1,0,0,0,1044,10364,1,0,0,0,1046,10373,1,0,0,0,1048,
        10425,1,0,0,0,1050,10460,1,0,0,0,1052,10482,1,0,0,0,1054,10524,1,
        0,0,0,1056,10528,1,0,0,0,1058,10542,1,0,0,0,1060,10582,1,0,0,0,1062,
        10584,1,0,0,0,1064,10598,1,0,0,0,1066,10629,1,0,0,0,1068,10632,1,
        0,0,0,1070,10650,1,0,0,0,1072,10679,1,0,0,0,1074,10684,1,0,0,0,1076,
        10693,1,0,0,0,1078,10708,1,0,0,0,1080,10712,1,0,0,0,1082,10721,1,
        0,0,0,1084,10736,1,0,0,0,1086,10742,1,0,0,0,1088,10745,1,0,0,0,1090,
        10810,1,0,0,0,1092,10813,1,0,0,0,1094,10816,1,0,0,0,1096,10842,1,
        0,0,0,1098,10853,1,0,0,0,1100,10865,1,0,0,0,1102,10867,1,0,0,0,1104,
        10886,1,0,0,0,1106,10888,1,0,0,0,1108,10899,1,0,0,0,1110,10913,1,
        0,0,0,1112,10929,1,0,0,0,1114,10931,1,0,0,0,1116,10939,1,0,0,0,1118,
        10949,1,0,0,0,1120,10951,1,0,0,0,1122,11007,1,0,0,0,1124,11035,1,
        0,0,0,1126,11052,1,0,0,0,1128,11075,1,0,0,0,1130,11112,1,0,0,0,1132,
        11114,1,0,0,0,1134,11164,1,0,0,0,1136,11186,1,0,0,0,1138,11206,1,
        0,0,0,1140,11225,1,0,0,0,1142,11231,1,0,0,0,1144,11246,1,0,0,0,1146,
        11288,1,0,0,0,1148,11330,1,0,0,0,1150,11364,1,0,0,0,1152,11366,1,
        0,0,0,1154,11382,1,0,0,0,1156,11391,1,0,0,0,1158,11424,1,0,0,0,1160,
        11426,1,0,0,0,1162,11434,1,0,0,0,1164,11442,1,0,0,0,1166,11449,1,
        0,0,0,1168,11466,1,0,0,0,1170,11491,1,0,0,0,1172,11493,1,0,0,0,1174,
        11519,1,0,0,0,1176,11562,1,0,0,0,1178,11566,1,0,0,0,1180,11590,1,
        0,0,0,1182,11627,1,0,0,0,1184,11644,1,0,0,0,1186,11665,1,0,0,0,1188,
        11689,1,0,0,0,1190,11702,1,0,0,0,1192,11704,1,0,0,0,1194,11707,1,
        0,0,0,1196,11734,1,0,0,0,1198,11742,1,0,0,0,1200,11760,1,0,0,0,1202,
        11764,1,0,0,0,1204,11799,1,0,0,0,1206,11814,1,0,0,0,1208,11872,1,
        0,0,0,1210,11874,1,0,0,0,1212,11889,1,0,0,0,1214,11910,1,0,0,0,1216,
        11912,1,0,0,0,1218,11940,1,0,0,0,1220,11942,1,0,0,0,1222,11954,1,
        0,0,0,1224,11961,1,0,0,0,1226,11965,1,0,0,0,1228,11973,1,0,0,0,1230,
        11991,1,0,0,0,1232,11996,1,0,0,0,1234,12033,1,0,0,0,1236,12036,1,
        0,0,0,1238,12049,1,0,0,0,1240,12051,1,0,0,0,1242,12093,1,0,0,0,1244,
        12095,1,0,0,0,1246,12118,1,0,0,0,1248,12138,1,0,0,0,1250,12154,1,
        0,0,0,1252,12160,1,0,0,0,1254,12169,1,0,0,0,1256,12173,1,0,0,0,1258,
        12182,1,0,0,0,1260,12188,1,0,0,0,1262,12198,1,0,0,0,1264,12214,1,
        0,0,0,1266,12221,1,0,0,0,1268,12231,1,0,0,0,1270,12242,1,0,0,0,1272,
        12249,1,0,0,0,1274,12251,1,0,0,0,1276,12253,1,0,0,0,1278,12313,1,
        0,0,0,1280,12315,1,0,0,0,1282,12329,1,0,0,0,1284,12348,1,0,0,0,1286,
        12350,1,0,0,0,1288,12352,1,0,0,0,1290,12359,1,0,0,0,1292,12367,1,
        0,0,0,1294,12384,1,0,0,0,1296,12414,1,0,0,0,1298,12418,1,0,0,0,1300,
        12426,1,0,0,0,1302,12448,1,0,0,0,1304,12463,1,0,0,0,1306,12513,1,
        0,0,0,1308,12529,1,0,0,0,1310,12539,1,0,0,0,1312,12549,1,0,0,0,1314,
        12554,1,0,0,0,1316,12559,1,0,0,0,1318,12570,1,0,0,0,1320,12574,1,
        0,0,0,1322,12578,1,0,0,0,1324,12591,1,0,0,0,1326,12597,1,0,0,0,1328,
        12604,1,0,0,0,1330,12606,1,0,0,0,1332,12608,1,0,0,0,1334,12628,1,
        0,0,0,1336,12653,1,0,0,0,1338,12655,1,0,0,0,1340,12657,1,0,0,0,1342,
        12664,1,0,0,0,1344,12666,1,0,0,0,1346,12668,1,0,0,0,1348,12701,1,
        0,0,0,1350,12746,1,0,0,0,1352,12748,1,0,0,0,1354,12779,1,0,0,0,1356,
        12816,1,0,0,0,1358,12835,1,0,0,0,1360,12837,1,0,0,0,1362,12857,1,
        0,0,0,1364,12885,1,0,0,0,1366,12910,1,0,0,0,1368,12992,1,0,0,0,1370,
        12994,1,0,0,0,1372,13038,1,0,0,0,1374,13042,1,0,0,0,1376,13066,1,
        0,0,0,1378,13073,1,0,0,0,1380,13081,1,0,0,0,1382,13083,1,0,0,0,1384,
        13102,1,0,0,0,1386,13125,1,0,0,0,1388,13127,1,0,0,0,1390,13145,1,
        0,0,0,1392,13150,1,0,0,0,1394,13160,1,0,0,0,1396,13167,1,0,0,0,1398,
        13175,1,0,0,0,1400,13208,1,0,0,0,1402,13231,1,0,0,0,1404,13236,1,
        0,0,0,1406,13287,1,0,0,0,1408,13289,1,0,0,0,1410,13294,1,0,0,0,1412,
        13298,1,0,0,0,1414,13301,1,0,0,0,1416,13303,1,0,0,0,1418,13305,1,
        0,0,0,1420,13307,1,0,0,0,1422,13309,1,0,0,0,1424,13311,1,0,0,0,1426,
        13325,1,0,0,0,1428,13330,1,0,0,0,1430,13337,1,0,0,0,1432,13339,1,
        0,0,0,1434,13344,1,0,0,0,1436,13349,1,0,0,0,1438,13355,1,0,0,0,1440,
        13359,1,0,0,0,1442,13385,1,0,0,0,1444,13387,1,0,0,0,1446,13394,1,
        0,0,0,1448,13454,1,0,0,0,1450,13458,1,0,0,0,1452,13480,1,0,0,0,1454,
        13482,1,0,0,0,1456,13502,1,0,0,0,1458,13518,1,0,0,0,1460,13523,1,
        0,0,0,1462,13531,1,0,0,0,1464,13535,1,0,0,0,1466,13546,1,0,0,0,1468,
        13574,1,0,0,0,1470,13590,1,0,0,0,1472,13599,1,0,0,0,1474,13631,1,
        0,0,0,1476,13639,1,0,0,0,1478,13672,1,0,0,0,1480,13674,1,0,0,0,1482,
        13701,1,0,0,0,1484,13720,1,0,0,0,1486,13746,1,0,0,0,1488,13748,1,
        0,0,0,1490,13780,1,0,0,0,1492,13797,1,0,0,0,1494,13808,1,0,0,0,1496,
        13810,1,0,0,0,1498,13829,1,0,0,0,1500,13840,1,0,0,0,1502,13849,1,
        0,0,0,1504,13874,1,0,0,0,1506,13927,1,0,0,0,1508,13951,1,0,0,0,1510,
        13965,1,0,0,0,1512,13975,1,0,0,0,1514,13984,1,0,0,0,1516,14021,1,
        0,0,0,1518,14073,1,0,0,0,1520,14084,1,0,0,0,1522,14086,1,0,0,0,1524,
        14102,1,0,0,0,1526,14104,1,0,0,0,1528,14129,1,0,0,0,1530,14131,1,
        0,0,0,1532,14135,1,0,0,0,1534,14143,1,0,0,0,1536,14157,1,0,0,0,1538,
        14168,1,0,0,0,1540,14183,1,0,0,0,1542,14218,1,0,0,0,1544,14240,1,
        0,0,0,1546,14244,1,0,0,0,1548,14246,1,0,0,0,1550,14250,1,0,0,0,1552,
        14285,1,0,0,0,1554,14290,1,0,0,0,1556,14295,1,0,0,0,1558,14299,1,
        0,0,0,1560,14309,1,0,0,0,1562,14311,1,0,0,0,1564,14319,1,0,0,0,1566,
        14321,1,0,0,0,1568,14327,1,0,0,0,1570,14329,1,0,0,0,1572,14335,1,
        0,0,0,1574,14401,1,0,0,0,1576,14403,1,0,0,0,1578,14431,1,0,0,0,1580,
        14453,1,0,0,0,1582,14456,1,0,0,0,1584,14468,1,0,0,0,1586,14495,1,
        0,0,0,1588,14502,1,0,0,0,1590,14511,1,0,0,0,1592,14527,1,0,0,0,1594,
        14532,1,0,0,0,1596,14541,1,0,0,0,1598,14543,1,0,0,0,1600,14590,1,
        0,0,0,1602,14623,1,0,0,0,1604,14652,1,0,0,0,1606,14656,1,0,0,0,1608,
        14663,1,0,0,0,1610,14665,1,0,0,0,1612,14675,1,0,0,0,1614,14691,1,
        0,0,0,1616,14696,1,0,0,0,1618,14725,1,0,0,0,1620,14729,1,0,0,0,1622,
        14764,1,0,0,0,1624,14776,1,0,0,0,1626,14778,1,0,0,0,1628,14780,1,
        0,0,0,1630,14818,1,0,0,0,1632,14820,1,0,0,0,1634,14848,1,0,0,0,1636,
        14873,1,0,0,0,1638,14875,1,0,0,0,1640,14921,1,0,0,0,1642,14944,1,
        0,0,0,1644,14952,1,0,0,0,1646,14955,1,0,0,0,1648,14992,1,0,0,0,1650,
        15013,1,0,0,0,1652,15017,1,0,0,0,1654,15019,1,0,0,0,1656,15025,1,
        0,0,0,1658,15027,1,0,0,0,1660,15085,1,0,0,0,1662,15087,1,0,0,0,1664,
        15089,1,0,0,0,1666,15091,1,0,0,0,1668,15120,1,0,0,0,1670,15140,1,
        0,0,0,1672,15142,1,0,0,0,1674,15149,1,0,0,0,1676,15153,1,0,0,0,1678,
        15157,1,0,0,0,1680,15161,1,0,0,0,1682,15168,1,0,0,0,1684,15182,1,
        0,0,0,1686,15189,1,0,0,0,1688,15194,1,0,0,0,1690,15202,1,0,0,0,1692,
        15216,1,0,0,0,1694,15221,1,0,0,0,1696,15223,1,0,0,0,1698,15231,1,
        0,0,0,1700,15256,1,0,0,0,1702,15262,1,0,0,0,1704,15294,1,0,0,0,1706,
        15305,1,0,0,0,1708,15307,1,0,0,0,1710,15320,1,0,0,0,1712,15324,1,
        0,0,0,1714,15339,1,0,0,0,1716,15341,1,0,0,0,1718,15357,1,0,0,0,1720,
        15374,1,0,0,0,1722,15399,1,0,0,0,1724,15409,1,0,0,0,1726,15413,1,
        0,0,0,1728,15457,1,0,0,0,1730,15469,1,0,0,0,1732,15480,1,0,0,0,1734,
        15486,1,0,0,0,1736,15497,1,0,0,0,1738,15509,1,0,0,0,1740,15519,1,
        0,0,0,1742,15541,1,0,0,0,1744,15545,1,0,0,0,1746,15567,1,0,0,0,1748,
        15570,1,0,0,0,1750,15576,1,0,0,0,1752,15581,1,0,0,0,1754,15589,1,
        0,0,0,1756,15597,1,0,0,0,1758,15600,1,0,0,0,1760,15616,1,0,0,0,1762,
        15621,1,0,0,0,1764,15625,1,0,0,0,1766,15665,1,0,0,0,1768,15667,1,
        0,0,0,1770,15690,1,0,0,0,1772,15692,1,0,0,0,1774,15697,1,0,0,0,1776,
        15699,1,0,0,0,1778,15701,1,0,0,0,1780,15703,1,0,0,0,1782,15707,1,
        0,0,0,1784,15712,1,0,0,0,1786,15732,1,0,0,0,1788,15738,1,0,0,0,1790,
        15755,1,0,0,0,1792,15769,1,0,0,0,1794,15773,1,0,0,0,1796,15787,1,
        0,0,0,1798,15806,1,0,0,0,1800,15813,1,0,0,0,1802,15825,1,0,0,0,1804,
        15834,1,0,0,0,1806,15836,1,0,0,0,1808,15850,1,0,0,0,1810,15860,1,
        0,0,0,1812,15866,1,0,0,0,1814,15868,1,0,0,0,1816,15871,1,0,0,0,1818,
        15880,1,0,0,0,1820,15913,1,0,0,0,1822,15915,1,0,0,0,1824,15930,1,
        0,0,0,1826,15932,1,0,0,0,1828,15953,1,0,0,0,1830,15968,1,0,0,0,1832,
        15993,1,0,0,0,1834,16000,1,0,0,0,1836,16013,1,0,0,0,1838,16016,1,
        0,0,0,1840,16041,1,0,0,0,1842,16062,1,0,0,0,1844,16066,1,0,0,0,1846,
        16109,1,0,0,0,1848,16113,1,0,0,0,1850,16115,1,0,0,0,1852,16132,1,
        0,0,0,1854,16175,1,0,0,0,1856,16184,1,0,0,0,1858,16192,1,0,0,0,1860,
        16203,1,0,0,0,1862,16215,1,0,0,0,1864,16230,1,0,0,0,1866,16235,1,
        0,0,0,1868,16248,1,0,0,0,1870,16254,1,0,0,0,1872,16266,1,0,0,0,1874,
        16274,1,0,0,0,1876,16278,1,0,0,0,1878,16320,1,0,0,0,1880,16322,1,
        0,0,0,1882,16333,1,0,0,0,1884,16335,1,0,0,0,1886,16343,1,0,0,0,1888,
        16354,1,0,0,0,1890,16387,1,0,0,0,1892,16414,1,0,0,0,1894,16416,1,
        0,0,0,1896,16419,1,0,0,0,1898,16422,1,0,0,0,1900,16426,1,0,0,0,1902,
        16462,1,0,0,0,1904,16464,1,0,0,0,1906,16487,1,0,0,0,1908,16492,1,
        0,0,0,1910,16497,1,0,0,0,1912,16520,1,0,0,0,1914,16530,1,0,0,0,1916,
        16532,1,0,0,0,1918,16546,1,0,0,0,1920,16560,1,0,0,0,1922,16596,1,
        0,0,0,1924,16598,1,0,0,0,1926,16628,1,0,0,0,1928,16633,1,0,0,0,1930,
        16635,1,0,0,0,1932,16647,1,0,0,0,1934,16667,1,0,0,0,1936,16669,1,
        0,0,0,1938,16672,1,0,0,0,1940,16698,1,0,0,0,1942,16700,1,0,0,0,1944,
        16704,1,0,0,0,1946,16719,1,0,0,0,1948,16731,1,0,0,0,1950,16739,1,
        0,0,0,1952,16743,1,0,0,0,1954,16756,1,0,0,0,1956,16762,1,0,0,0,1958,
        16777,1,0,0,0,1960,16797,1,0,0,0,1962,16806,1,0,0,0,1964,16808,1,
        0,0,0,1966,16815,1,0,0,0,1968,16820,1,0,0,0,1970,16833,1,0,0,0,1972,
        16841,1,0,0,0,1974,16845,1,0,0,0,1976,16859,1,0,0,0,1978,16867,1,
        0,0,0,1980,16875,1,0,0,0,1982,16877,1,0,0,0,1984,16889,1,0,0,0,1986,
        16915,1,0,0,0,1988,16917,1,0,0,0,1990,16931,1,0,0,0,1992,16936,1,
        0,0,0,1994,16954,1,0,0,0,1996,16958,1,0,0,0,1998,16966,1,0,0,0,2000,
        16976,1,0,0,0,2002,16984,1,0,0,0,2004,16990,1,0,0,0,2006,16995,1,
        0,0,0,2008,17004,1,0,0,0,2010,17029,1,0,0,0,2012,17048,1,0,0,0,2014,
        17052,1,0,0,0,2016,17055,1,0,0,0,2018,17072,1,0,0,0,2020,17077,1,
        0,0,0,2022,17096,1,0,0,0,2024,17098,1,0,0,0,2026,17114,1,0,0,0,2028,
        17122,1,0,0,0,2030,17127,1,0,0,0,2032,17131,1,0,0,0,2034,17142,1,
        0,0,0,2036,17145,1,0,0,0,2038,17179,1,0,0,0,2040,17181,1,0,0,0,2042,
        17194,1,0,0,0,2044,17205,1,0,0,0,2046,17219,1,0,0,0,2048,17230,1,
        0,0,0,2050,17232,1,0,0,0,2052,17242,1,0,0,0,2054,17244,1,0,0,0,2056,
        17249,1,0,0,0,2058,17264,1,0,0,0,2060,17270,1,0,0,0,2062,17314,1,
        0,0,0,2064,17316,1,0,0,0,2066,17337,1,0,0,0,2068,17349,1,0,0,0,2070,
        17381,1,0,0,0,2072,17401,1,0,0,0,2074,17403,1,0,0,0,2076,17407,1,
        0,0,0,2078,17472,1,0,0,0,2080,17474,1,0,0,0,2082,17504,1,0,0,0,2084,
        17506,1,0,0,0,2086,17527,1,0,0,0,2088,17559,1,0,0,0,2090,17576,1,
        0,0,0,2092,17595,1,0,0,0,2094,17608,1,0,0,0,2096,17611,1,0,0,0,2098,
        17630,1,0,0,0,2100,17638,1,0,0,0,2102,17656,1,0,0,0,2104,17663,1,
        0,0,0,2106,17688,1,0,0,0,2108,17690,1,0,0,0,2110,17794,1,0,0,0,2112,
        17800,1,0,0,0,2114,17990,1,0,0,0,2116,18001,1,0,0,0,2118,18031,1,
        0,0,0,2120,18037,1,0,0,0,2122,18068,1,0,0,0,2124,18074,1,0,0,0,2126,
        18078,1,0,0,0,2128,18179,1,0,0,0,2130,18181,1,0,0,0,2132,18246,1,
        0,0,0,2134,18250,1,0,0,0,2136,18269,1,0,0,0,2138,18284,1,0,0,0,2140,
        18293,1,0,0,0,2142,18305,1,0,0,0,2144,18310,1,0,0,0,2146,18353,1,
        0,0,0,2148,18355,1,0,0,0,2150,18372,1,0,0,0,2152,18374,1,0,0,0,2154,
        18437,1,0,0,0,2156,18439,1,0,0,0,2158,18870,1,0,0,0,2160,18872,1,
        0,0,0,2162,18874,1,0,0,0,2164,18876,1,0,0,0,2166,18878,1,0,0,0,2168,
        18904,1,0,0,0,2170,18913,1,0,0,0,2172,18922,1,0,0,0,2174,18924,1,
        0,0,0,2176,18941,1,0,0,0,2178,18945,1,0,0,0,2180,18962,1,0,0,0,2182,
        18972,1,0,0,0,2184,18983,1,0,0,0,2186,19007,1,0,0,0,2188,19026,1,
        0,0,0,2190,19044,1,0,0,0,2192,19065,1,0,0,0,2194,19078,1,0,0,0,2196,
        19081,1,0,0,0,2198,19090,1,0,0,0,2200,19096,1,0,0,0,2202,19104,1,
        0,0,0,2204,19107,1,0,0,0,2206,19118,1,0,0,0,2208,19120,1,0,0,0,2210,
        19129,1,0,0,0,2212,19131,1,0,0,0,2214,19136,1,0,0,0,2216,19155,1,
        0,0,0,2218,19164,1,0,0,0,2220,19176,1,0,0,0,2222,19194,1,0,0,0,2224,
        19198,1,0,0,0,2226,19200,1,0,0,0,2228,19208,1,0,0,0,2230,19224,1,
        0,0,0,2232,19243,1,0,0,0,2234,19245,1,0,0,0,2236,19247,1,0,0,0,2238,
        19249,1,0,0,0,2240,19251,1,0,0,0,2242,19253,1,0,0,0,2244,19255,1,
        0,0,0,2246,19257,1,0,0,0,2248,19269,1,0,0,0,2250,19271,1,0,0,0,2252,
        19276,1,0,0,0,2254,19278,1,0,0,0,2256,19280,1,0,0,0,2258,19282,1,
        0,0,0,2260,19287,1,0,0,0,2262,19295,1,0,0,0,2264,19297,1,0,0,0,2266,
        19303,1,0,0,0,2268,19305,1,0,0,0,2270,19317,1,0,0,0,2272,19319,1,
        0,0,0,2274,19327,1,0,0,0,2276,19335,1,0,0,0,2278,19343,1,0,0,0,2280,
        19348,1,0,0,0,2282,19353,1,0,0,0,2284,19368,1,0,0,0,2286,19370,1,
        0,0,0,2288,19377,1,0,0,0,2290,19381,1,0,0,0,2292,19383,1,0,0,0,2294,
        19388,1,0,0,0,2296,19400,1,0,0,0,2298,19402,1,0,0,0,2300,19404,1,
        0,0,0,2302,19426,1,0,0,0,2304,19428,1,0,0,0,2306,19455,1,0,0,0,2308,
        19463,1,0,0,0,2310,19465,1,0,0,0,2312,19467,1,0,0,0,2314,19469,1,
        0,0,0,2316,19495,1,0,0,0,2318,19497,1,0,0,0,2320,19505,1,0,0,0,2322,
        19509,1,0,0,0,2324,19521,1,0,0,0,2326,19536,1,0,0,0,2328,19557,1,
        0,0,0,2330,19599,1,0,0,0,2332,19606,1,0,0,0,2334,19618,1,0,0,0,2336,
        19651,1,0,0,0,2338,19653,1,0,0,0,2340,19731,1,0,0,0,2342,19736,1,
        0,0,0,2344,19761,1,0,0,0,2346,19777,1,0,0,0,2348,19792,1,0,0,0,2350,
        19834,1,0,0,0,2352,20162,1,0,0,0,2354,20226,1,0,0,0,2356,20233,1,
        0,0,0,2358,20235,1,0,0,0,2360,20238,1,0,0,0,2362,20242,1,0,0,0,2364,
        20248,1,0,0,0,2366,20250,1,0,0,0,2368,20252,1,0,0,0,2370,20367,1,
        0,0,0,2372,20369,1,0,0,0,2374,20371,1,0,0,0,2376,20373,1,0,0,0,2378,
        20375,1,0,0,0,2380,20377,1,0,0,0,2382,2384,3,2208,1104,0,2383,2382,
        1,0,0,0,2383,2384,1,0,0,0,2384,2387,1,0,0,0,2385,2388,3,2210,1105,
        0,2386,2388,3,2,1,0,2387,2385,1,0,0,0,2387,2386,1,0,0,0,2388,2399,
        1,0,0,0,2389,2391,5,2367,0,0,2390,2392,5,2354,0,0,2391,2390,1,0,
        0,0,2391,2392,1,0,0,0,2392,2395,1,0,0,0,2393,2396,3,2210,1105,0,
        2394,2396,3,2,1,0,2395,2393,1,0,0,0,2395,2394,1,0,0,0,2396,2398,
        1,0,0,0,2397,2389,1,0,0,0,2398,2401,1,0,0,0,2399,2397,1,0,0,0,2399,
        2400,1,0,0,0,2400,2403,1,0,0,0,2401,2399,1,0,0,0,2402,2404,5,2367,
        0,0,2403,2402,1,0,0,0,2403,2404,1,0,0,0,2404,2406,1,0,0,0,2405,2407,
        5,2354,0,0,2406,2405,1,0,0,0,2406,2407,1,0,0,0,2407,2408,1,0,0,0,
        2408,2409,5,0,0,1,2409,1,1,0,0,0,2410,2550,3,1292,646,0,2411,2550,
        3,1302,651,0,2412,2550,3,1304,652,0,2413,2550,3,1306,653,0,2414,
        2550,3,1332,666,0,2415,2550,3,1440,720,0,2416,2550,3,826,413,0,2417,
        2550,3,4,2,0,2418,2550,3,98,49,0,2419,2550,3,102,51,0,2420,2550,
        3,100,50,0,2421,2550,3,522,261,0,2422,2550,3,562,281,0,2423,2550,
        3,104,52,0,2424,2550,3,802,401,0,2425,2550,3,136,68,0,2426,2550,
        3,938,469,0,2427,2550,3,948,474,0,2428,2550,3,972,486,0,2429,2550,
        3,990,495,0,2430,2550,3,132,66,0,2431,2550,3,158,79,0,2432,2550,
        3,172,86,0,2433,2550,3,178,89,0,2434,2550,3,186,93,0,2435,2550,3,
        1484,742,0,2436,2550,3,190,95,0,2437,2550,3,326,163,0,2438,2550,
        3,328,164,0,2439,2550,3,1276,638,0,2440,2550,3,1488,744,0,2441,2550,
        3,872,436,0,2442,2550,3,1476,738,0,2443,2550,3,208,104,0,2444,2550,
        3,246,123,0,2445,2550,3,566,283,0,2446,2550,3,840,420,0,2447,2550,
        3,1784,892,0,2448,2550,3,338,169,0,2449,2550,3,388,194,0,2450,2550,
        3,414,207,0,2451,2550,3,1026,513,0,2452,2550,3,1022,511,0,2453,2550,
        3,436,218,0,2454,2550,3,1446,723,0,2455,2550,3,1472,736,0,2456,2550,
        3,790,395,0,2457,2550,3,792,396,0,2458,2550,3,446,223,0,2459,2550,
        3,450,225,0,2460,2550,3,452,226,0,2461,2550,3,108,54,0,2462,2550,
        3,458,229,0,2463,2550,3,470,235,0,2464,2550,3,798,399,0,2465,2550,
        3,808,404,0,2466,2550,3,810,405,0,2467,2550,3,1034,517,0,2468,2550,
        3,1012,506,0,2469,2550,3,964,482,0,2470,2550,3,970,485,0,2471,2550,
        3,994,497,0,2472,2550,3,1040,520,0,2473,2550,3,160,80,0,2474,2550,
        3,162,81,0,2475,2550,3,198,99,0,2476,2550,3,184,92,0,2477,2550,3,
        1028,514,0,2478,2550,3,1042,521,0,2479,2550,3,1044,522,0,2480,2550,
        3,204,102,0,2481,2550,3,332,166,0,2482,2550,3,1282,641,0,2483,2550,
        3,1278,639,0,2484,2550,3,1046,523,0,2485,2550,3,888,444,0,2486,2550,
        3,906,453,0,2487,2550,3,210,105,0,2488,2550,3,266,133,0,2489,2550,
        3,564,282,0,2490,2550,3,844,422,0,2491,2550,3,1308,654,0,2492,2550,
        3,1310,655,0,2493,2550,3,1312,656,0,2494,2550,3,1316,658,0,2495,
        2550,3,1318,659,0,2496,2550,3,1470,735,0,2497,2550,3,1474,737,0,
        2498,2550,3,1320,660,0,2499,2550,3,1322,661,0,2500,2550,3,1324,662,
        0,2501,2550,3,1314,657,0,2502,2550,3,96,48,0,2503,2550,3,800,400,
        0,2504,2550,3,754,377,0,2505,2550,3,758,379,0,2506,2550,3,760,380,
        0,2507,2550,3,804,402,0,2508,2550,3,806,403,0,2509,2550,3,154,77,
        0,2510,2550,3,1020,510,0,2511,2550,3,974,487,0,2512,2550,3,992,496,
        0,2513,2550,3,188,94,0,2514,2550,3,156,78,0,2515,2550,3,174,87,0,
        2516,2550,3,176,88,0,2517,2550,3,192,96,0,2518,2550,3,196,98,0,2519,
        2550,3,194,97,0,2520,2550,3,324,162,0,2521,2550,3,1280,640,0,2522,
        2550,3,1260,630,0,2523,2550,3,1262,631,0,2524,2550,3,1264,632,0,
        2525,2550,3,206,103,0,2526,2550,3,244,122,0,2527,2550,3,568,284,
        0,2528,2550,3,1268,634,0,2529,2550,3,604,302,0,2530,2550,3,680,340,
        0,2531,2550,3,1690,845,0,2532,2550,3,698,349,0,2533,2550,3,728,364,
        0,2534,2550,3,1270,635,0,2535,2550,3,1290,645,0,2536,2550,3,1288,
        644,0,2537,2550,3,1810,905,0,2538,2550,3,756,378,0,2539,2550,3,762,
        381,0,2540,2550,3,772,386,0,2541,2550,3,768,384,0,2542,2550,3,766,
        383,0,2543,2550,3,770,385,0,2544,2550,3,776,388,0,2545,2550,3,1824,
        912,0,2546,2550,3,1326,663,0,2547,2550,3,1258,629,0,2548,2550,3,
        724,362,0,2549,2410,1,0,0,0,2549,2411,1,0,0,0,2549,2412,1,0,0,0,
        2549,2413,1,0,0,0,2549,2414,1,0,0,0,2549,2415,1,0,0,0,2549,2416,
        1,0,0,0,2549,2417,1,0,0,0,2549,2418,1,0,0,0,2549,2419,1,0,0,0,2549,
        2420,1,0,0,0,2549,2421,1,0,0,0,2549,2422,1,0,0,0,2549,2423,1,0,0,
        0,2549,2424,1,0,0,0,2549,2425,1,0,0,0,2549,2426,1,0,0,0,2549,2427,
        1,0,0,0,2549,2428,1,0,0,0,2549,2429,1,0,0,0,2549,2430,1,0,0,0,2549,
        2431,1,0,0,0,2549,2432,1,0,0,0,2549,2433,1,0,0,0,2549,2434,1,0,0,
        0,2549,2435,1,0,0,0,2549,2436,1,0,0,0,2549,2437,1,0,0,0,2549,2438,
        1,0,0,0,2549,2439,1,0,0,0,2549,2440,1,0,0,0,2549,2441,1,0,0,0,2549,
        2442,1,0,0,0,2549,2443,1,0,0,0,2549,2444,1,0,0,0,2549,2445,1,0,0,
        0,2549,2446,1,0,0,0,2549,2447,1,0,0,0,2549,2448,1,0,0,0,2549,2449,
        1,0,0,0,2549,2450,1,0,0,0,2549,2451,1,0,0,0,2549,2452,1,0,0,0,2549,
        2453,1,0,0,0,2549,2454,1,0,0,0,2549,2455,1,0,0,0,2549,2456,1,0,0,
        0,2549,2457,1,0,0,0,2549,2458,1,0,0,0,2549,2459,1,0,0,0,2549,2460,
        1,0,0,0,2549,2461,1,0,0,0,2549,2462,1,0,0,0,2549,2463,1,0,0,0,2549,
        2464,1,0,0,0,2549,2465,1,0,0,0,2549,2466,1,0,0,0,2549,2467,1,0,0,
        0,2549,2468,1,0,0,0,2549,2469,1,0,0,0,2549,2470,1,0,0,0,2549,2471,
        1,0,0,0,2549,2472,1,0,0,0,2549,2473,1,0,0,0,2549,2474,1,0,0,0,2549,
        2475,1,0,0,0,2549,2476,1,0,0,0,2549,2477,1,0,0,0,2549,2478,1,0,0,
        0,2549,2479,1,0,0,0,2549,2480,1,0,0,0,2549,2481,1,0,0,0,2549,2482,
        1,0,0,0,2549,2483,1,0,0,0,2549,2484,1,0,0,0,2549,2485,1,0,0,0,2549,
        2486,1,0,0,0,2549,2487,1,0,0,0,2549,2488,1,0,0,0,2549,2489,1,0,0,
        0,2549,2490,1,0,0,0,2549,2491,1,0,0,0,2549,2492,1,0,0,0,2549,2493,
        1,0,0,0,2549,2494,1,0,0,0,2549,2495,1,0,0,0,2549,2496,1,0,0,0,2549,
        2497,1,0,0,0,2549,2498,1,0,0,0,2549,2499,1,0,0,0,2549,2500,1,0,0,
        0,2549,2501,1,0,0,0,2549,2502,1,0,0,0,2549,2503,1,0,0,0,2549,2504,
        1,0,0,0,2549,2505,1,0,0,0,2549,2506,1,0,0,0,2549,2507,1,0,0,0,2549,
        2508,1,0,0,0,2549,2509,1,0,0,0,2549,2510,1,0,0,0,2549,2511,1,0,0,
        0,2549,2512,1,0,0,0,2549,2513,1,0,0,0,2549,2514,1,0,0,0,2549,2515,
        1,0,0,0,2549,2516,1,0,0,0,2549,2517,1,0,0,0,2549,2518,1,0,0,0,2549,
        2519,1,0,0,0,2549,2520,1,0,0,0,2549,2521,1,0,0,0,2549,2522,1,0,0,
        0,2549,2523,1,0,0,0,2549,2524,1,0,0,0,2549,2525,1,0,0,0,2549,2526,
        1,0,0,0,2549,2527,1,0,0,0,2549,2528,1,0,0,0,2549,2529,1,0,0,0,2549,
        2530,1,0,0,0,2549,2531,1,0,0,0,2549,2532,1,0,0,0,2549,2533,1,0,0,
        0,2549,2534,1,0,0,0,2549,2535,1,0,0,0,2549,2536,1,0,0,0,2549,2537,
        1,0,0,0,2549,2538,1,0,0,0,2549,2539,1,0,0,0,2549,2540,1,0,0,0,2549,
        2541,1,0,0,0,2549,2542,1,0,0,0,2549,2543,1,0,0,0,2549,2544,1,0,0,
        0,2549,2545,1,0,0,0,2549,2546,1,0,0,0,2549,2547,1,0,0,0,2549,2548,
        1,0,0,0,2550,3,1,0,0,0,2551,2552,5,42,0,0,2552,2606,5,413,0,0,2553,
        2588,3,2364,1182,0,2554,2557,3,6,3,0,2555,2557,3,8,4,0,2556,2554,
        1,0,0,0,2556,2555,1,0,0,0,2557,2558,1,0,0,0,2558,2556,1,0,0,0,2558,
        2559,1,0,0,0,2559,2562,1,0,0,0,2560,2562,3,10,5,0,2561,2556,1,0,
        0,0,2561,2560,1,0,0,0,2562,2564,1,0,0,0,2563,2565,3,24,12,0,2564,
        2563,1,0,0,0,2564,2565,1,0,0,0,2565,2589,1,0,0,0,2566,2587,3,12,
        6,0,2567,2587,3,16,8,0,2568,2587,3,18,9,0,2569,2587,3,20,10,0,2570,
        2587,3,24,12,0,2571,2587,3,28,14,0,2572,2587,3,30,15,0,2573,2587,
        3,40,20,0,2574,2587,3,44,22,0,2575,2587,3,46,23,0,2576,2587,3,52,
        26,0,2577,2587,3,58,29,0,2578,2587,3,60,30,0,2579,2587,3,62,31,0,
        2580,2587,3,64,32,0,2581,2587,3,66,33,0,2582,2587,3,68,34,0,2583,
        2587,3,70,35,0,2584,2587,3,72,36,0,2585,2587,3,78,39,0,2586,2566,
        1,0,0,0,2586,2567,1,0,0,0,2586,2568,1,0,0,0,2586,2569,1,0,0,0,2586,
        2570,1,0,0,0,2586,2571,1,0,0,0,2586,2572,1,0,0,0,2586,2573,1,0,0,
        0,2586,2574,1,0,0,0,2586,2575,1,0,0,0,2586,2576,1,0,0,0,2586,2577,
        1,0,0,0,2586,2578,1,0,0,0,2586,2579,1,0,0,0,2586,2580,1,0,0,0,2586,
        2581,1,0,0,0,2586,2582,1,0,0,0,2586,2583,1,0,0,0,2586,2584,1,0,0,
        0,2586,2585,1,0,0,0,2587,2589,1,0,0,0,2588,2561,1,0,0,0,2588,2586,
        1,0,0,0,2589,2607,1,0,0,0,2590,2595,3,2364,1182,0,2591,2592,5,2353,
        0,0,2592,2594,3,2364,1182,0,2593,2591,1,0,0,0,2594,2597,1,0,0,0,
        2595,2593,1,0,0,0,2595,2596,1,0,0,0,2596,2600,1,0,0,0,2597,2595,
        1,0,0,0,2598,2600,5,38,0,0,2599,2590,1,0,0,0,2599,2598,1,0,0,0,2600,
        2604,1,0,0,0,2601,2605,3,90,45,0,2602,2605,3,92,46,0,2603,2605,3,
        94,47,0,2604,2601,1,0,0,0,2604,2602,1,0,0,0,2604,2603,1,0,0,0,2605,
        2607,1,0,0,0,2606,2553,1,0,0,0,2606,2599,1,0,0,0,2607,5,1,0,0,0,
        2608,2629,5,21,0,0,2609,2610,5,1606,0,0,2610,2612,3,2364,1182,0,
        2611,2609,1,0,0,0,2611,2612,1,0,0,0,2612,2614,1,0,0,0,2613,2615,
        3,88,44,0,2614,2613,1,0,0,0,2614,2615,1,0,0,0,2615,2618,1,0,0,0,
        2616,2617,5,535,0,0,2617,2619,3,2364,1182,0,2618,2616,1,0,0,0,2618,
        2619,1,0,0,0,2619,2620,1,0,0,0,2620,2621,5,412,0,0,2621,2626,3,448,
        224,0,2622,2623,5,2353,0,0,2623,2625,3,448,224,0,2624,2622,1,0,0,
        0,2625,2628,1,0,0,0,2626,2624,1,0,0,0,2626,2627,1,0,0,0,2627,2630,
        1,0,0,0,2628,2626,1,0,0,0,2629,2611,1,0,0,0,2630,2631,1,0,0,0,2631,
        2629,1,0,0,0,2631,2632,1,0,0,0,2632,7,1,0,0,0,2633,2672,5,438,0,
        0,2634,2636,3,88,44,0,2635,2634,1,0,0,0,2635,2636,1,0,0,0,2636,2637,
        1,0,0,0,2637,2638,5,412,0,0,2638,2640,3,2364,1182,0,2639,2641,3,
        38,19,0,2640,2639,1,0,0,0,2640,2641,1,0,0,0,2641,2649,1,0,0,0,2642,
        2643,5,2353,0,0,2643,2645,3,2364,1182,0,2644,2646,3,38,19,0,2645,
        2644,1,0,0,0,2645,2646,1,0,0,0,2646,2648,1,0,0,0,2647,2642,1,0,0,
        0,2648,2651,1,0,0,0,2649,2647,1,0,0,0,2649,2650,1,0,0,0,2650,2673,
        1,0,0,0,2651,2649,1,0,0,0,2652,2653,5,415,0,0,2653,2655,5,696,0,
        0,2654,2656,3,88,44,0,2655,2654,1,0,0,0,2655,2656,1,0,0,0,2656,2657,
        1,0,0,0,2657,2658,5,535,0,0,2658,2660,3,2364,1182,0,2659,2661,3,
        38,19,0,2660,2659,1,0,0,0,2660,2661,1,0,0,0,2661,2669,1,0,0,0,2662,
        2663,5,2353,0,0,2663,2665,3,2364,1182,0,2664,2666,3,38,19,0,2665,
        2664,1,0,0,0,2665,2666,1,0,0,0,2666,2668,1,0,0,0,2667,2662,1,0,0,
        0,2668,2671,1,0,0,0,2669,2667,1,0,0,0,2669,2670,1,0,0,0,2670,2673,
        1,0,0,0,2671,2669,1,0,0,0,2672,2635,1,0,0,0,2672,2652,1,0,0,0,2673,
        9,1,0,0,0,2674,2675,5,1489,0,0,2675,2678,5,38,0,0,2676,2677,5,1617,
        0,0,2677,2679,3,1182,591,0,2678,2676,1,0,0,0,2678,2679,1,0,0,0,2679,
        11,1,0,0,0,2680,2681,5,1484,0,0,2681,2682,5,412,0,0,2682,2683,3,
        2364,1182,0,2683,2684,5,2212,0,0,2684,2686,5,2343,0,0,2685,2687,
        3,38,19,0,2686,2685,1,0,0,0,2686,2687,1,0,0,0,2687,2697,1,0,0,0,
        2688,2689,5,2353,0,0,2689,2690,3,2364,1182,0,2690,2691,5,2212,0,
        0,2691,2693,5,2343,0,0,2692,2694,3,38,19,0,2693,2692,1,0,0,0,2693,
        2694,1,0,0,0,2694,2696,1,0,0,0,2695,2688,1,0,0,0,2696,2699,1,0,0,
        0,2697,2695,1,0,0,0,2697,2698,1,0,0,0,2698,2702,1,0,0,0,2699,2697,
        1,0,0,0,2700,2701,5,1350,0,0,2701,2703,3,2356,1178,0,2702,2700,1,
        0,0,0,2702,2703,1,0,0,0,2703,2705,1,0,0,0,2704,2706,3,14,7,0,2705,
        2704,1,0,0,0,2705,2706,1,0,0,0,2706,13,1,0,0,0,2707,2708,7,0,0,0,
        2708,15,1,0,0,0,2709,2726,5,1481,0,0,2710,2711,5,412,0,0,2711,2712,
        3,2364,1182,0,2712,2713,5,2052,0,0,2713,2721,3,2364,1182,0,2714,
        2715,5,2353,0,0,2715,2716,3,2364,1182,0,2716,2717,5,2052,0,0,2717,
        2718,3,2364,1182,0,2718,2720,1,0,0,0,2719,2714,1,0,0,0,2720,2723,
        1,0,0,0,2721,2719,1,0,0,0,2721,2722,1,0,0,0,2722,2727,1,0,0,0,2723,
        2721,1,0,0,0,2724,2725,5,415,0,0,2725,2727,5,38,0,0,2726,2710,1,
        0,0,0,2726,2724,1,0,0,0,2727,17,1,0,0,0,2728,2760,5,1190,0,0,2729,
        2731,3,88,44,0,2730,2729,1,0,0,0,2730,2731,1,0,0,0,2731,2732,1,0,
        0,0,2732,2733,5,412,0,0,2733,2738,3,2364,1182,0,2734,2735,5,2353,
        0,0,2735,2737,3,2364,1182,0,2736,2734,1,0,0,0,2737,2740,1,0,0,0,
        2738,2736,1,0,0,0,2738,2739,1,0,0,0,2739,2756,1,0,0,0,2740,2738,
        1,0,0,0,2741,2742,5,415,0,0,2742,2744,5,696,0,0,2743,2745,3,88,44,
        0,2744,2743,1,0,0,0,2744,2745,1,0,0,0,2745,2746,1,0,0,0,2746,2747,
        5,535,0,0,2747,2752,3,2364,1182,0,2748,2749,5,2353,0,0,2749,2751,
        3,2364,1182,0,2750,2748,1,0,0,0,2751,2754,1,0,0,0,2752,2750,1,0,
        0,0,2752,2753,1,0,0,0,2753,2756,1,0,0,0,2754,2752,1,0,0,0,2755,2730,
        1,0,0,0,2755,2741,1,0,0,0,2756,2757,1,0,0,0,2757,2755,1,0,0,0,2757,
        2758,1,0,0,0,2758,2761,1,0,0,0,2759,2761,5,38,0,0,2760,2755,1,0,
        0,0,2760,2759,1,0,0,0,2761,2764,1,0,0,0,2762,2763,5,1350,0,0,2763,
        2765,3,2356,1178,0,2764,2762,1,0,0,0,2764,2765,1,0,0,0,2765,2767,
        1,0,0,0,2766,2768,3,14,7,0,2767,2766,1,0,0,0,2767,2768,1,0,0,0,2768,
        19,1,0,0,0,2769,2796,5,1177,0,0,2770,2772,3,88,44,0,2771,2770,1,
        0,0,0,2771,2772,1,0,0,0,2772,2773,1,0,0,0,2773,2774,5,412,0,0,2774,
        2779,3,2364,1182,0,2775,2776,5,2353,0,0,2776,2778,3,2364,1182,0,
        2777,2775,1,0,0,0,2778,2781,1,0,0,0,2779,2777,1,0,0,0,2779,2780,
        1,0,0,0,2780,2797,1,0,0,0,2781,2779,1,0,0,0,2782,2783,5,415,0,0,
        2783,2785,5,696,0,0,2784,2786,3,88,44,0,2785,2784,1,0,0,0,2785,2786,
        1,0,0,0,2786,2787,1,0,0,0,2787,2788,5,535,0,0,2788,2793,3,2364,1182,
        0,2789,2790,5,2353,0,0,2790,2792,3,2364,1182,0,2791,2789,1,0,0,0,
        2792,2795,1,0,0,0,2793,2791,1,0,0,0,2793,2794,1,0,0,0,2794,2797,
        1,0,0,0,2795,2793,1,0,0,0,2796,2771,1,0,0,0,2796,2782,1,0,0,0,2797,
        2799,1,0,0,0,2798,2800,3,22,11,0,2799,2798,1,0,0,0,2799,2800,1,0,
        0,0,2800,21,1,0,0,0,2801,2802,5,438,0,0,2802,2803,5,33,0,0,2803,
        2804,3,2356,1178,0,2804,2805,7,1,0,0,2805,23,1,0,0,0,2806,2826,5,
        1433,0,0,2807,2809,7,2,0,0,2808,2810,3,26,13,0,2809,2808,1,0,0,0,
        2810,2811,1,0,0,0,2811,2809,1,0,0,0,2811,2812,1,0,0,0,2812,2814,
        1,0,0,0,2813,2807,1,0,0,0,2813,2814,1,0,0,0,2814,2815,1,0,0,0,2815,
        2816,5,1350,0,0,2816,2817,3,2356,1178,0,2817,2819,1,0,0,0,2818,2820,
        7,0,0,0,2819,2818,1,0,0,0,2819,2820,1,0,0,0,2820,2827,1,0,0,0,2821,
        2822,5,926,0,0,2822,2824,5,1350,0,0,2823,2825,3,2356,1178,0,2824,
        2823,1,0,0,0,2824,2825,1,0,0,0,2825,2827,1,0,0,0,2826,2813,1,0,0,
        0,2826,2821,1,0,0,0,2827,25,1,0,0,0,2828,2829,3,2364,1182,0,2829,
        27,1,0,0,0,2830,2832,5,190,0,0,2831,2833,5,38,0,0,2832,2831,1,0,
        0,0,2832,2833,1,0,0,0,2833,2835,1,0,0,0,2834,2836,7,3,0,0,2835,2834,
        1,0,0,0,2835,2836,1,0,0,0,2836,29,1,0,0,0,2837,2838,7,4,0,0,2838,
        2839,5,2006,0,0,2839,2840,3,2364,1182,0,2840,2847,3,32,16,0,2841,
        2842,5,2353,0,0,2842,2843,3,2364,1182,0,2843,2844,3,32,16,0,2844,
        2846,1,0,0,0,2845,2841,1,0,0,0,2846,2849,1,0,0,0,2847,2845,1,0,0,
        0,2847,2848,1,0,0,0,2848,2861,1,0,0,0,2849,2847,1,0,0,0,2850,2851,
        5,438,0,0,2851,2852,5,2006,0,0,2852,2857,3,2364,1182,0,2853,2854,
        5,2353,0,0,2854,2856,3,2364,1182,0,2855,2853,1,0,0,0,2856,2859,1,
        0,0,0,2857,2855,1,0,0,0,2857,2858,1,0,0,0,2858,2861,1,0,0,0,2859,
        2857,1,0,0,0,2860,2837,1,0,0,0,2860,2850,1,0,0,0,2861,31,1,0,0,0,
        2862,2863,5,82,0,0,2863,2865,5,2347,0,0,2864,2866,3,34,17,0,2865,
        2864,1,0,0,0,2865,2866,1,0,0,0,2866,2868,1,0,0,0,2867,2869,3,36,
        18,0,2868,2867,1,0,0,0,2868,2869,1,0,0,0,2869,2870,1,0,0,0,2870,
        2871,5,2348,0,0,2871,33,1,0,0,0,2872,2873,7,5,0,0,2873,35,1,0,0,
        0,2874,2875,7,6,0,0,2875,37,1,0,0,0,2876,2877,7,7,0,0,2877,39,1,
        0,0,0,2878,2879,5,21,0,0,2879,2880,5,401,0,0,2880,2885,3,1422,711,
        0,2881,2882,5,2353,0,0,2882,2884,3,1422,711,0,2883,2881,1,0,0,0,
        2884,2887,1,0,0,0,2885,2883,1,0,0,0,2885,2886,1,0,0,0,2886,2920,
        1,0,0,0,2887,2885,1,0,0,0,2888,2889,5,438,0,0,2889,2890,5,401,0,
        0,2890,2892,3,1422,711,0,2891,2893,3,38,19,0,2892,2891,1,0,0,0,2892,
        2893,1,0,0,0,2893,2901,1,0,0,0,2894,2895,5,2353,0,0,2895,2897,3,
        1422,711,0,2896,2898,3,38,19,0,2897,2896,1,0,0,0,2897,2898,1,0,0,
        0,2898,2900,1,0,0,0,2899,2894,1,0,0,0,2900,2903,1,0,0,0,2901,2899,
        1,0,0,0,2901,2902,1,0,0,0,2902,2920,1,0,0,0,2903,2901,1,0,0,0,2904,
        2905,5,1481,0,0,2905,2906,5,401,0,0,2906,2907,3,42,21,0,2907,2908,
        5,2052,0,0,2908,2916,3,42,21,0,2909,2910,5,2353,0,0,2910,2911,3,
        42,21,0,2911,2912,5,2052,0,0,2912,2913,3,42,21,0,2913,2915,1,0,0,
        0,2914,2909,1,0,0,0,2915,2918,1,0,0,0,2916,2914,1,0,0,0,2916,2917,
        1,0,0,0,2917,2920,1,0,0,0,2918,2916,1,0,0,0,2919,2878,1,0,0,0,2919,
        2888,1,0,0,0,2919,2904,1,0,0,0,2920,41,1,0,0,0,2921,2922,5,2343,
        0,0,2922,43,1,0,0,0,2923,2924,5,21,0,0,2924,2925,5,37,0,0,2925,2926,
        5,2343,0,0,2926,2927,5,580,0,0,2927,2934,5,2343,0,0,2928,2929,5,
        2353,0,0,2929,2930,5,2343,0,0,2930,2931,5,580,0,0,2931,2933,5,2343,
        0,0,2932,2928,1,0,0,0,2933,2936,1,0,0,0,2934,2932,1,0,0,0,2934,2935,
        1,0,0,0,2935,2962,1,0,0,0,2936,2934,1,0,0,0,2937,2938,5,438,0,0,
        2938,2939,5,37,0,0,2939,2944,5,2343,0,0,2940,2941,5,2353,0,0,2941,
        2943,5,2343,0,0,2942,2940,1,0,0,0,2943,2946,1,0,0,0,2944,2942,1,
        0,0,0,2944,2945,1,0,0,0,2945,2962,1,0,0,0,2946,2944,1,0,0,0,2947,
        2948,5,1481,0,0,2948,2949,5,37,0,0,2949,2950,5,2343,0,0,2950,2951,
        5,2052,0,0,2951,2958,5,2343,0,0,2952,2953,5,2353,0,0,2953,2954,5,
        2343,0,0,2954,2955,5,2052,0,0,2955,2957,5,2343,0,0,2956,2952,1,0,
        0,0,2957,2960,1,0,0,0,2958,2956,1,0,0,0,2958,2959,1,0,0,0,2959,2962,
        1,0,0,0,2960,2958,1,0,0,0,2961,2923,1,0,0,0,2961,2937,1,0,0,0,2961,
        2947,1,0,0,0,2962,45,1,0,0,0,2963,2975,3,48,24,0,2964,2975,3,50,
        25,0,2965,2966,5,1489,0,0,2966,2967,5,2195,0,0,2967,2968,3,2364,
        1182,0,2968,2969,5,1617,0,0,2969,2970,3,1182,591,0,2970,2975,1,0,
        0,0,2971,2972,5,438,0,0,2972,2973,5,2195,0,0,2973,2975,3,2364,1182,
        0,2974,2963,1,0,0,0,2974,2964,1,0,0,0,2974,2965,1,0,0,0,2974,2971,
        1,0,0,0,2975,47,1,0,0,0,2976,2977,5,21,0,0,2977,2978,5,2195,0,0,
        2978,2979,3,2364,1182,0,2979,2980,5,1617,0,0,2980,2982,3,1182,591,
        0,2981,2983,3,34,17,0,2982,2981,1,0,0,0,2982,2983,1,0,0,0,2983,2988,
        1,0,0,0,2984,2985,5,1685,0,0,2985,2986,3,2356,1178,0,2986,2987,7,
        8,0,0,2987,2989,1,0,0,0,2988,2984,1,0,0,0,2988,2989,1,0,0,0,2989,
        2992,1,0,0,0,2990,2991,5,1684,0,0,2991,2993,3,2356,1178,0,2992,2990,
        1,0,0,0,2992,2993,1,0,0,0,2993,49,1,0,0,0,2994,2995,5,926,0,0,2995,
        2996,5,2195,0,0,2996,2999,3,2364,1182,0,2997,2998,5,935,0,0,2998,
        3000,5,2343,0,0,2999,2997,1,0,0,0,2999,3000,1,0,0,0,3000,3003,1,
        0,0,0,3001,3002,5,2123,0,0,3002,3004,5,2343,0,0,3003,3001,1,0,0,
        0,3003,3004,1,0,0,0,3004,51,1,0,0,0,3005,3006,5,1590,0,0,3006,3007,
        5,81,0,0,3007,3008,5,2343,0,0,3008,3009,5,2369,0,0,3009,3010,5,2343,
        0,0,3010,53,1,0,0,0,3011,3012,5,926,0,0,3012,3013,5,550,0,0,3013,
        3014,5,2343,0,0,3014,3015,5,81,0,0,3015,3016,5,2347,0,0,3016,3017,
        3,56,28,0,3017,3027,5,2348,0,0,3018,3019,5,2353,0,0,3019,3020,5,
        2343,0,0,3020,3021,5,81,0,0,3021,3022,5,2347,0,0,3022,3023,3,56,
        28,0,3023,3024,5,2348,0,0,3024,3026,1,0,0,0,3025,3018,1,0,0,0,3026,
        3029,1,0,0,0,3027,3025,1,0,0,0,3027,3028,1,0,0,0,3028,55,1,0,0,0,
        3029,3027,1,0,0,0,3030,3031,1,0,0,0,3031,57,1,0,0,0,3032,3033,5,
        438,0,0,3033,3034,5,550,0,0,3034,3039,3,1422,711,0,3035,3036,5,2353,
        0,0,3036,3038,3,1422,711,0,3037,3035,1,0,0,0,3038,3041,1,0,0,0,3039,
        3037,1,0,0,0,3039,3040,1,0,0,0,3040,59,1,0,0,0,3041,3039,1,0,0,0,
        3042,3043,5,285,0,0,3043,3044,5,1446,0,0,3044,3045,5,2052,0,0,3045,
        3046,5,569,0,0,3046,61,1,0,0,0,3047,3048,5,21,0,0,3048,3049,5,2140,
        0,0,3049,3050,5,2343,0,0,3050,3051,5,2212,0,0,3051,3052,5,882,0,
        0,3052,3057,5,2343,0,0,3053,3054,5,2353,0,0,3054,3056,5,2343,0,0,
        3055,3053,1,0,0,0,3056,3059,1,0,0,0,3057,3055,1,0,0,0,3057,3058,
        1,0,0,0,3058,3077,1,0,0,0,3059,3057,1,0,0,0,3060,3061,5,926,0,0,
        3061,3062,5,2140,0,0,3062,3063,5,2343,0,0,3063,3064,7,9,0,0,3064,
        3065,5,882,0,0,3065,3070,5,2343,0,0,3066,3067,5,2353,0,0,3067,3069,
        5,2343,0,0,3068,3066,1,0,0,0,3069,3072,1,0,0,0,3070,3068,1,0,0,0,
        3070,3071,1,0,0,0,3071,3077,1,0,0,0,3072,3070,1,0,0,0,3073,3074,
        5,438,0,0,3074,3075,5,2140,0,0,3075,3077,5,2343,0,0,3076,3047,1,
        0,0,0,3076,3060,1,0,0,0,3076,3073,1,0,0,0,3077,63,1,0,0,0,3078,3079,
        5,21,0,0,3079,3080,5,2144,0,0,3080,3085,5,2343,0,0,3081,3082,5,2353,
        0,0,3082,3084,5,2343,0,0,3083,3081,1,0,0,0,3084,3087,1,0,0,0,3085,
        3083,1,0,0,0,3085,3086,1,0,0,0,3086,3116,1,0,0,0,3087,3085,1,0,0,
        0,3088,3089,5,438,0,0,3089,3090,5,2144,0,0,3090,3095,5,2343,0,0,
        3091,3092,5,2353,0,0,3092,3094,5,2343,0,0,3093,3091,1,0,0,0,3094,
        3097,1,0,0,0,3095,3093,1,0,0,0,3095,3096,1,0,0,0,3096,3099,1,0,0,
        0,3097,3095,1,0,0,0,3098,3100,5,171,0,0,3099,3098,1,0,0,0,3099,3100,
        1,0,0,0,3100,3116,1,0,0,0,3101,3102,5,1484,0,0,3102,3103,5,2144,
        0,0,3103,3104,5,2343,0,0,3104,3105,5,2212,0,0,3105,3112,5,2343,0,
        0,3106,3107,5,2353,0,0,3107,3108,5,2343,0,0,3108,3109,5,2212,0,0,
        3109,3111,5,2343,0,0,3110,3106,1,0,0,0,3111,3114,1,0,0,0,3112,3110,
        1,0,0,0,3112,3113,1,0,0,0,3113,3116,1,0,0,0,3114,3112,1,0,0,0,3115,
        3078,1,0,0,0,3115,3088,1,0,0,0,3115,3101,1,0,0,0,3116,65,1,0,0,0,
        3117,3118,5,1590,0,0,3118,3119,5,1315,0,0,3119,3120,7,10,0,0,3120,
        3124,5,2369,0,0,3121,3125,5,1071,0,0,3122,3123,5,1429,0,0,3123,3125,
        7,11,0,0,3124,3121,1,0,0,0,3124,3122,1,0,0,0,3125,3136,1,0,0,0,3126,
        3127,5,2353,0,0,3127,3128,7,10,0,0,3128,3132,5,2369,0,0,3129,3133,
        5,1071,0,0,3130,3131,5,1429,0,0,3131,3133,7,11,0,0,3132,3129,1,0,
        0,0,3132,3130,1,0,0,0,3133,3135,1,0,0,0,3134,3126,1,0,0,0,3135,3138,
        1,0,0,0,3136,3134,1,0,0,0,3136,3137,1,0,0,0,3137,3139,1,0,0,0,3138,
        3136,1,0,0,0,3139,3140,5,580,0,0,3140,3141,5,550,0,0,3141,3146,5,
        2343,0,0,3142,3143,5,2353,0,0,3143,3145,5,2343,0,0,3144,3142,1,0,
        0,0,3145,3148,1,0,0,0,3146,3144,1,0,0,0,3146,3147,1,0,0,0,3147,67,
        1,0,0,0,3148,3146,1,0,0,0,3149,3150,5,1590,0,0,3150,3151,5,1254,
        0,0,3151,3152,7,12,0,0,3152,3153,5,2369,0,0,3153,3160,5,2343,0,0,
        3154,3155,5,2353,0,0,3155,3156,7,12,0,0,3156,3157,5,2369,0,0,3157,
        3159,5,2343,0,0,3158,3154,1,0,0,0,3159,3162,1,0,0,0,3160,3158,1,
        0,0,0,3160,3161,1,0,0,0,3161,3163,1,0,0,0,3162,3160,1,0,0,0,3163,
        3164,5,580,0,0,3164,3165,5,550,0,0,3165,3170,5,2343,0,0,3166,3167,
        5,2353,0,0,3167,3169,5,2343,0,0,3168,3166,1,0,0,0,3169,3172,1,0,
        0,0,3170,3168,1,0,0,0,3170,3171,1,0,0,0,3171,69,1,0,0,0,3172,3170,
        1,0,0,0,3173,3178,5,1551,0,0,3174,3175,5,550,0,0,3175,3179,5,2343,
        0,0,3176,3177,5,412,0,0,3177,3179,3,2364,1182,0,3178,3174,1,0,0,
        0,3178,3176,1,0,0,0,3178,3179,1,0,0,0,3179,3181,1,0,0,0,3180,3182,
        7,3,0,0,3181,3180,1,0,0,0,3181,3182,1,0,0,0,3182,3185,1,0,0,0,3183,
        3184,5,1350,0,0,3184,3186,7,13,0,0,3185,3183,1,0,0,0,3185,3186,1,
        0,0,0,3186,3188,1,0,0,0,3187,3189,3,14,7,0,3188,3187,1,0,0,0,3188,
        3189,1,0,0,0,3189,3191,1,0,0,0,3190,3192,3,38,19,0,3191,3190,1,0,
        0,0,3191,3192,1,0,0,0,3192,3194,1,0,0,0,3193,3195,5,1677,0,0,3194,
        3193,1,0,0,0,3194,3195,1,0,0,0,3195,71,1,0,0,0,3196,3197,5,21,0,
        0,3197,3198,5,1416,0,0,3198,3204,3,2364,1182,0,3199,3200,5,1590,
        0,0,3200,3201,3,74,37,0,3201,3202,5,2369,0,0,3202,3203,3,76,38,0,
        3203,3205,1,0,0,0,3204,3199,1,0,0,0,3204,3205,1,0,0,0,3205,3224,
        1,0,0,0,3206,3207,5,926,0,0,3207,3208,5,1416,0,0,3208,3209,3,2364,
        1182,0,3209,3210,5,1590,0,0,3210,3211,3,74,37,0,3211,3212,5,2369,
        0,0,3212,3213,3,76,38,0,3213,3224,1,0,0,0,3214,3215,5,938,0,0,3215,
        3216,5,1416,0,0,3216,3217,3,2364,1182,0,3217,3218,5,2052,0,0,3218,
        3219,3,2364,1182,0,3219,3224,1,0,0,0,3220,3221,5,438,0,0,3221,3222,
        5,1416,0,0,3222,3224,3,2364,1182,0,3223,3196,1,0,0,0,3223,3206,1,
        0,0,0,3223,3214,1,0,0,0,3223,3220,1,0,0,0,3224,73,1,0,0,0,3225,3226,
        3,2364,1182,0,3226,75,1,0,0,0,3227,3228,3,2364,1182,0,3228,77,1,
        0,0,0,3229,3234,3,80,40,0,3230,3234,3,82,41,0,3231,3234,3,84,42,
        0,3232,3234,3,86,43,0,3233,3229,1,0,0,0,3233,3230,1,0,0,0,3233,3231,
        1,0,0,0,3233,3232,1,0,0,0,3234,79,1,0,0,0,3235,3236,5,21,0,0,3236,
        3237,5,552,0,0,3237,3241,3,2364,1182,0,3238,3239,7,14,0,0,3239,3242,
        3,2364,1182,0,3240,3242,5,2006,0,0,3241,3238,1,0,0,0,3241,3240,1,
        0,0,0,3242,3246,1,0,0,0,3243,3244,5,588,0,0,3244,3245,5,2006,0,0,
        3245,3247,3,2364,1182,0,3246,3243,1,0,0,0,3246,3247,1,0,0,0,3247,
        3252,1,0,0,0,3248,3249,5,1590,0,0,3249,3250,5,2343,0,0,3250,3251,
        5,2369,0,0,3251,3253,5,2343,0,0,3252,3248,1,0,0,0,3252,3253,1,0,
        0,0,3253,81,1,0,0,0,3254,3255,5,926,0,0,3255,3256,5,552,0,0,3256,
        3257,3,2364,1182,0,3257,3258,5,1590,0,0,3258,3259,5,2343,0,0,3259,
        3260,5,2369,0,0,3260,3261,5,2343,0,0,3261,83,1,0,0,0,3262,3263,5,
        938,0,0,3263,3264,5,550,0,0,3264,3265,5,2343,0,0,3265,3266,5,2052,
        0,0,3266,3267,5,552,0,0,3267,3268,3,2364,1182,0,3268,85,1,0,0,0,
        3269,3270,5,438,0,0,3270,3271,5,552,0,0,3271,3273,3,2364,1182,0,
        3272,3274,5,171,0,0,3273,3272,1,0,0,0,3273,3274,1,0,0,0,3274,87,
        1,0,0,0,3275,3276,7,15,0,0,3276,89,1,0,0,0,3277,3278,5,2088,0,0,
        3278,3279,5,415,0,0,3279,91,1,0,0,0,3280,3282,5,934,0,0,3281,3283,
        7,16,0,0,3282,3281,1,0,0,0,3282,3283,1,0,0,0,3283,3285,1,0,0,0,3284,
        3286,7,7,0,0,3285,3284,1,0,0,0,3285,3286,1,0,0,0,3286,3292,1,0,0,
        0,3287,3289,5,416,0,0,3288,3290,7,7,0,0,3289,3288,1,0,0,0,3289,3290,
        1,0,0,0,3290,3292,1,0,0,0,3291,3280,1,0,0,0,3291,3287,1,0,0,0,3292,
        93,1,0,0,0,3293,3294,7,17,0,0,3294,3304,5,2195,0,0,3295,3300,3,2364,
        1182,0,3296,3297,5,2353,0,0,3297,3299,3,2364,1182,0,3298,3296,1,
        0,0,0,3299,3302,1,0,0,0,3300,3298,1,0,0,0,3300,3301,1,0,0,0,3301,
        3305,1,0,0,0,3302,3300,1,0,0,0,3303,3305,5,38,0,0,3304,3295,1,0,
        0,0,3304,3303,1,0,0,0,3305,95,1,0,0,0,3306,3307,5,438,0,0,3307,3308,
        5,592,0,0,3308,3309,3,2278,1139,0,3309,97,1,0,0,0,3310,3311,5,42,
        0,0,3311,3312,5,565,0,0,3312,3313,5,63,0,0,3313,3343,3,2364,1182,
        0,3314,3315,5,1590,0,0,3315,3344,5,368,0,0,3316,3317,7,4,0,0,3317,
        3318,5,1996,0,0,3318,3320,3,2364,1182,0,3319,3321,3,454,227,0,3320,
        3319,1,0,0,0,3320,3321,1,0,0,0,3321,3344,1,0,0,0,3322,3323,5,1480,
        0,0,3323,3324,5,1996,0,0,3324,3344,3,2364,1182,0,3325,3326,5,926,
        0,0,3326,3344,3,456,228,0,3327,3336,5,1400,0,0,3328,3337,5,38,0,
        0,3329,3334,5,109,0,0,3330,3331,5,1549,0,0,3331,3335,3,2052,1026,
        0,3332,3333,5,2020,0,0,3333,3335,3,2052,1026,0,3334,3330,1,0,0,0,
        3334,3332,1,0,0,0,3335,3337,1,0,0,0,3336,3328,1,0,0,0,3336,3329,
        1,0,0,0,3337,3344,1,0,0,0,3338,3340,5,1074,0,0,3339,3338,1,0,0,0,
        3339,3340,1,0,0,0,3340,3341,1,0,0,0,3341,3342,5,1203,0,0,3342,3344,
        5,334,0,0,3343,3314,1,0,0,0,3343,3316,1,0,0,0,3343,3322,1,0,0,0,
        3343,3325,1,0,0,0,3343,3327,1,0,0,0,3343,3339,1,0,0,0,3344,99,1,
        0,0,0,3345,3346,5,42,0,0,3346,3350,5,633,0,0,3347,3348,3,2244,1122,
        0,3348,3349,5,2340,0,0,3349,3351,1,0,0,0,3350,3347,1,0,0,0,3350,
        3351,1,0,0,0,3351,3352,1,0,0,0,3352,3357,3,2364,1182,0,3353,3354,
        5,1481,0,0,3354,3355,5,2052,0,0,3355,3358,3,2364,1182,0,3356,3358,
        5,237,0,0,3357,3353,1,0,0,0,3357,3356,1,0,0,0,3358,101,1,0,0,0,3359,
        3360,5,42,0,0,3360,3361,5,592,0,0,3361,3378,3,2278,1139,0,3362,3379,
        5,451,0,0,3363,3379,5,1070,0,0,3364,3366,5,237,0,0,3365,3367,5,357,
        0,0,3366,3365,1,0,0,0,3366,3367,1,0,0,0,3367,3371,1,0,0,0,3368,3370,
        3,820,410,0,3369,3368,1,0,0,0,3370,3373,1,0,0,0,3371,3369,1,0,0,
        0,3371,3372,1,0,0,0,3372,3376,1,0,0,0,3373,3371,1,0,0,0,3374,3375,
        5,1509,0,0,3375,3377,5,1592,0,0,3376,3374,1,0,0,0,3376,3377,1,0,
        0,0,3377,3379,1,0,0,0,3378,3362,1,0,0,0,3378,3363,1,0,0,0,3378,3364,
        1,0,0,0,3379,103,1,0,0,0,3380,3381,5,42,0,0,3381,3382,5,746,0,0,
        3382,3386,7,18,0,0,3383,3384,3,2244,1122,0,3384,3385,5,2340,0,0,
        3385,3387,1,0,0,0,3386,3383,1,0,0,0,3386,3387,1,0,0,0,3387,3388,
        1,0,0,0,3388,3408,3,2364,1182,0,3389,3390,5,1491,0,0,3390,3402,5,
        2347,0,0,3391,3392,5,2347,0,0,3392,3394,3,106,53,0,3393,3395,5,2353,
        0,0,3394,3393,1,0,0,0,3394,3395,1,0,0,0,3395,3398,1,0,0,0,3396,3399,
        3,2244,1122,0,3397,3399,5,2352,0,0,3398,3396,1,0,0,0,3398,3397,1,
        0,0,0,3399,3400,1,0,0,0,3400,3401,5,2348,0,0,3401,3403,1,0,0,0,3402,
        3391,1,0,0,0,3403,3404,1,0,0,0,3404,3402,1,0,0,0,3404,3405,1,0,0,
        0,3405,3406,1,0,0,0,3406,3407,5,2348,0,0,3407,3409,1,0,0,0,3408,
        3389,1,0,0,0,3408,3409,1,0,0,0,3409,3413,1,0,0,0,3410,3414,5,237,
        0,0,3411,3414,5,1490,0,0,3412,3414,3,1692,846,0,3413,3410,1,0,0,
        0,3413,3411,1,0,0,0,3413,3412,1,0,0,0,3414,105,1,0,0,0,3415,3416,
        7,19,0,0,3416,107,1,0,0,0,3417,3420,5,305,0,0,3418,3419,5,1237,0,
        0,3419,3421,5,1484,0,0,3420,3418,1,0,0,0,3420,3421,1,0,0,0,3421,
        3423,1,0,0,0,3422,3424,7,20,0,0,3423,3422,1,0,0,0,3423,3424,1,0,
        0,0,3424,3425,1,0,0,0,3425,3426,5,592,0,0,3426,3438,3,2278,1139,
        0,3427,3428,5,2347,0,0,3428,3433,3,1708,854,0,3429,3430,5,2353,0,
        0,3430,3432,3,1708,854,0,3431,3429,1,0,0,0,3432,3435,1,0,0,0,3433,
        3431,1,0,0,0,3433,3434,1,0,0,0,3434,3436,1,0,0,0,3435,3433,1,0,0,
        0,3436,3437,5,2348,0,0,3437,3439,1,0,0,0,3438,3427,1,0,0,0,3438,
        3439,1,0,0,0,3439,3440,1,0,0,0,3440,3441,5,1508,0,0,3441,3445,3,
        2334,1167,0,3442,3443,5,1599,0,0,3443,3444,5,2369,0,0,3444,3446,
        7,21,0,0,3445,3442,1,0,0,0,3445,3446,1,0,0,0,3446,3456,1,0,0,0,3447,
        3455,3,1692,846,0,3448,3455,3,118,59,0,3449,3455,3,120,60,0,3450,
        3455,3,112,56,0,3451,3455,3,116,58,0,3452,3455,5,1321,0,0,3453,3455,
        5,396,0,0,3454,3447,1,0,0,0,3454,3448,1,0,0,0,3454,3449,1,0,0,0,
        3454,3450,1,0,0,0,3454,3451,1,0,0,0,3454,3452,1,0,0,0,3454,3453,
        1,0,0,0,3455,3458,1,0,0,0,3456,3454,1,0,0,0,3456,3457,1,0,0,0,3457,
        3473,1,0,0,0,3458,3456,1,0,0,0,3459,3468,7,22,0,0,3460,3462,5,361,
        0,0,3461,3460,1,0,0,0,3461,3462,1,0,0,0,3462,3464,1,0,0,0,3463,3465,
        3,1712,856,0,3464,3463,1,0,0,0,3464,3465,1,0,0,0,3465,3466,1,0,0,
        0,3466,3469,3,1794,897,0,3467,3469,3,1694,847,0,3468,3461,1,0,0,
        0,3468,3467,1,0,0,0,3469,3474,1,0,0,0,3470,3474,3,122,61,0,3471,
        3474,3,124,62,0,3472,3474,3,110,55,0,3473,3459,1,0,0,0,3473,3470,
        1,0,0,0,3473,3471,1,0,0,0,3473,3472,1,0,0,0,3474,109,1,0,0,0,3475,
        3476,5,1641,0,0,3476,3477,5,740,0,0,3477,3478,5,110,0,0,3478,3479,
        5,1508,0,0,3479,3480,3,2360,1180,0,3480,3481,5,2367,0,0,3481,3482,
        5,473,0,0,3482,111,1,0,0,0,3483,3485,5,1259,0,0,3484,3486,3,114,
        57,0,3485,3484,1,0,0,0,3485,3486,1,0,0,0,3486,113,1,0,0,0,3487,3488,
        5,2347,0,0,3488,3489,5,1275,0,0,3489,3490,3,2052,1026,0,3490,3494,
        5,154,0,0,3491,3495,5,54,0,0,3492,3493,7,23,0,0,3493,3495,3,2320,
        1160,0,3494,3491,1,0,0,0,3494,3492,1,0,0,0,3495,3497,1,0,0,0,3496,
        3498,3,130,65,0,3497,3496,1,0,0,0,3497,3498,1,0,0,0,3498,3499,1,
        0,0,0,3499,3500,5,2348,0,0,3500,115,1,0,0,0,3501,3503,5,1501,0,0,
        3502,3504,3,128,64,0,3503,3502,1,0,0,0,3503,3504,1,0,0,0,3504,3509,
        1,0,0,0,3505,3506,5,2347,0,0,3506,3507,5,923,0,0,3507,3508,7,24,
        0,0,3508,3510,5,2348,0,0,3509,3505,1,0,0,0,3509,3510,1,0,0,0,3510,
        117,1,0,0,0,3511,3512,5,6,0,0,3512,3513,5,154,0,0,3513,3514,5,2347,
        0,0,3514,3519,3,126,63,0,3515,3516,5,2353,0,0,3516,3518,3,126,63,
        0,3517,3515,1,0,0,0,3518,3521,1,0,0,0,3519,3517,1,0,0,0,3519,3520,
        1,0,0,0,3520,3522,1,0,0,0,3521,3519,1,0,0,0,3522,3523,5,2348,0,0,
        3523,119,1,0,0,0,3524,3525,5,368,0,0,3525,3526,5,2273,0,0,3526,3527,
        5,2152,0,0,3527,121,1,0,0,0,3528,3529,5,35,0,0,3529,3530,5,2153,
        0,0,3530,3531,3,2250,1125,0,3531,123,1,0,0,0,3532,3535,5,1321,0,
        0,3533,3534,7,25,0,0,3534,3536,5,2332,0,0,3535,3533,1,0,0,0,3535,
        3536,1,0,0,0,3536,3537,1,0,0,0,3537,3538,5,2153,0,0,3538,3539,3,
        2250,1125,0,3539,125,1,0,0,0,3540,3541,7,26,0,0,3541,3542,3,2278,
        1139,0,3542,127,1,0,0,0,3543,3544,5,1474,0,0,3544,3545,5,2347,0,
        0,3545,3550,3,2302,1151,0,3546,3547,5,2353,0,0,3547,3549,3,2302,
        1151,0,3548,3546,1,0,0,0,3549,3552,1,0,0,0,3550,3548,1,0,0,0,3550,
        3551,1,0,0,0,3551,3553,1,0,0,0,3552,3550,1,0,0,0,3553,3554,5,2348,
        0,0,3554,129,1,0,0,0,3555,3556,7,27,0,0,3556,3557,3,2052,1026,0,
        3557,3558,5,154,0,0,3558,3559,3,2320,1160,0,3559,131,1,0,0,0,3560,
        3561,5,42,0,0,3561,3563,5,1245,0,0,3562,3564,7,28,0,0,3563,3562,
        1,0,0,0,3563,3564,1,0,0,0,3564,3565,1,0,0,0,3565,3567,3,2364,1182,
        0,3566,3568,3,134,67,0,3567,3566,1,0,0,0,3568,3569,1,0,0,0,3569,
        3567,1,0,0,0,3569,3570,1,0,0,0,3570,133,1,0,0,0,3571,3582,5,1434,
        0,0,3572,3573,5,1481,0,0,3573,3574,5,2052,0,0,3574,3582,3,2364,1182,
        0,3575,3576,5,182,0,0,3576,3577,5,175,0,0,3577,3578,5,2052,0,0,3578,
        3582,3,2364,1182,0,3579,3582,5,467,0,0,3580,3582,5,404,0,0,3581,
        3571,1,0,0,0,3581,3572,1,0,0,0,3581,3575,1,0,0,0,3581,3579,1,0,0,
        0,3581,3580,1,0,0,0,3582,135,1,0,0,0,3583,3584,5,42,0,0,3584,3585,
        5,826,0,0,3585,3586,5,1388,0,0,3586,3590,3,2364,1182,0,3587,3591,
        3,138,69,0,3588,3591,3,140,70,0,3589,3591,3,142,71,0,3590,3587,1,
        0,0,0,3590,3588,1,0,0,0,3590,3589,1,0,0,0,3591,3595,1,0,0,0,3592,
        3593,5,2142,0,0,3593,3594,5,2369,0,0,3594,3596,7,29,0,0,3595,3592,
        1,0,0,0,3595,3596,1,0,0,0,3596,137,1,0,0,0,3597,3598,3,152,76,0,
        3598,3613,5,544,0,0,3599,3600,5,2369,0,0,3600,3601,5,2347,0,0,3601,
        3602,3,150,75,0,3602,3603,5,2348,0,0,3603,3614,1,0,0,0,3604,3611,
        5,38,0,0,3605,3606,5,497,0,0,3606,3607,5,2369,0,0,3607,3608,5,2347,
        0,0,3608,3609,3,150,75,0,3609,3610,5,2348,0,0,3610,3612,1,0,0,0,
        3611,3605,1,0,0,0,3611,3612,1,0,0,0,3612,3614,1,0,0,0,3613,3599,
        1,0,0,0,3613,3604,1,0,0,0,3614,139,1,0,0,0,3615,3616,3,152,76,0,
        3616,3631,5,1206,0,0,3617,3618,5,2369,0,0,3618,3619,5,2347,0,0,3619,
        3620,3,150,75,0,3620,3621,5,2348,0,0,3621,3632,1,0,0,0,3622,3629,
        5,38,0,0,3623,3624,5,497,0,0,3624,3625,5,2369,0,0,3625,3626,5,2347,
        0,0,3626,3627,3,150,75,0,3627,3628,5,2348,0,0,3628,3630,1,0,0,0,
        3629,3623,1,0,0,0,3629,3630,1,0,0,0,3630,3632,1,0,0,0,3631,3617,
        1,0,0,0,3631,3622,1,0,0,0,3632,141,1,0,0,0,3633,3634,3,152,76,0,
        3634,3654,5,1659,0,0,3635,3636,5,2369,0,0,3636,3637,5,2347,0,0,3637,
        3638,3,150,75,0,3638,3639,5,2348,0,0,3639,3655,1,0,0,0,3640,3641,
        5,2369,0,0,3641,3642,5,2347,0,0,3642,3643,5,2343,0,0,3643,3644,5,
        2348,0,0,3644,3655,3,144,72,0,3645,3652,5,38,0,0,3646,3647,5,497,
        0,0,3647,3648,5,2369,0,0,3648,3649,5,2347,0,0,3649,3650,3,150,75,
        0,3650,3651,5,2348,0,0,3651,3653,1,0,0,0,3652,3646,1,0,0,0,3652,
        3653,1,0,0,0,3653,3655,1,0,0,0,3654,3635,1,0,0,0,3654,3640,1,0,0,
        0,3654,3645,1,0,0,0,3655,143,1,0,0,0,3656,3676,5,199,0,0,3657,3658,
        5,2369,0,0,3658,3659,5,2347,0,0,3659,3660,3,150,75,0,3660,3661,5,
        2348,0,0,3661,3677,1,0,0,0,3662,3663,5,2369,0,0,3663,3664,5,2347,
        0,0,3664,3665,5,2343,0,0,3665,3666,5,2348,0,0,3666,3677,3,146,73,
        0,3667,3674,5,38,0,0,3668,3669,5,497,0,0,3669,3670,5,2369,0,0,3670,
        3671,5,2347,0,0,3671,3672,3,150,75,0,3672,3673,5,2348,0,0,3673,3675,
        1,0,0,0,3674,3668,1,0,0,0,3674,3675,1,0,0,0,3675,3677,1,0,0,0,3676,
        3657,1,0,0,0,3676,3662,1,0,0,0,3676,3667,1,0,0,0,3677,145,1,0,0,
        0,3678,3702,5,1206,0,0,3679,3680,5,2369,0,0,3680,3681,5,2347,0,0,
        3681,3682,3,150,75,0,3682,3683,5,2348,0,0,3683,3703,1,0,0,0,3684,
        3685,5,2369,0,0,3685,3686,5,2347,0,0,3686,3687,5,2343,0,0,3687,3689,
        5,2348,0,0,3688,3690,3,148,74,0,3689,3688,1,0,0,0,3690,3691,1,0,
        0,0,3691,3689,1,0,0,0,3691,3692,1,0,0,0,3692,3703,1,0,0,0,3693,3700,
        5,38,0,0,3694,3695,5,497,0,0,3695,3696,5,2369,0,0,3696,3697,5,2347,
        0,0,3697,3698,3,150,75,0,3698,3699,5,2348,0,0,3699,3701,1,0,0,0,
        3700,3694,1,0,0,0,3700,3701,1,0,0,0,3701,3703,1,0,0,0,3702,3679,
        1,0,0,0,3702,3684,1,0,0,0,3702,3693,1,0,0,0,3703,147,1,0,0,0,3704,
        3705,5,2165,0,0,3705,3706,5,2369,0,0,3706,3707,5,2347,0,0,3707,3708,
        3,150,75,0,3708,3709,5,2348,0,0,3709,3714,1,0,0,0,3710,3711,7,30,
        0,0,3711,3712,5,2369,0,0,3712,3714,5,2343,0,0,3713,3704,1,0,0,0,
        3713,3710,1,0,0,0,3714,149,1,0,0,0,3715,3720,5,2343,0,0,3716,3717,
        5,2353,0,0,3717,3719,5,2343,0,0,3718,3716,1,0,0,0,3719,3722,1,0,
        0,0,3720,3718,1,0,0,0,3720,3721,1,0,0,0,3721,151,1,0,0,0,3722,3720,
        1,0,0,0,3723,3724,7,17,0,0,3724,153,1,0,0,0,3725,3726,5,438,0,0,
        3726,3727,5,826,0,0,3727,3728,5,1388,0,0,3728,3729,3,2364,1182,0,
        3729,155,1,0,0,0,3730,3731,5,438,0,0,3731,3733,5,1257,0,0,3732,3734,
        5,141,0,0,3733,3732,1,0,0,0,3733,3734,1,0,0,0,3734,3738,1,0,0,0,
        3735,3736,3,2310,1155,0,3736,3737,5,2340,0,0,3737,3739,1,0,0,0,3738,
        3735,1,0,0,0,3738,3739,1,0,0,0,3739,3740,1,0,0,0,3740,3741,3,2248,
        1124,0,3741,157,1,0,0,0,3742,3743,5,42,0,0,3743,3744,5,1257,0,0,
        3744,3745,3,2248,1124,0,3745,3747,5,237,0,0,3746,3748,5,357,0,0,
        3747,3746,1,0,0,0,3747,3748,1,0,0,0,3748,3750,1,0,0,0,3749,3751,
        7,31,0,0,3750,3749,1,0,0,0,3750,3751,1,0,0,0,3751,3755,1,0,0,0,3752,
        3754,3,820,410,0,3753,3752,1,0,0,0,3754,3757,1,0,0,0,3755,3753,1,
        0,0,0,3755,3756,1,0,0,0,3756,3760,1,0,0,0,3757,3755,1,0,0,0,3758,
        3759,5,1509,0,0,3759,3761,5,1592,0,0,3760,3758,1,0,0,0,3760,3761,
        1,0,0,0,3761,159,1,0,0,0,3762,3765,5,305,0,0,3763,3764,5,1237,0,
        0,3764,3766,5,1484,0,0,3765,3763,1,0,0,0,3765,3766,1,0,0,0,3766,
        3768,1,0,0,0,3767,3769,7,20,0,0,3768,3767,1,0,0,0,3768,3769,1,0,
        0,0,3769,3770,1,0,0,0,3770,3774,5,1257,0,0,3771,3772,3,2310,1155,
        0,3772,3773,5,2340,0,0,3773,3775,1,0,0,0,3774,3771,1,0,0,0,3774,
        3775,1,0,0,0,3775,3776,1,0,0,0,3776,3778,3,2248,1124,0,3777,3779,
        3,1692,846,0,3778,3777,1,0,0,0,3778,3779,1,0,0,0,3779,3780,1,0,0,
        0,3780,3784,7,22,0,0,3781,3783,3,164,82,0,3782,3781,1,0,0,0,3783,
        3786,1,0,0,0,3784,3782,1,0,0,0,3784,3785,1,0,0,0,3785,3787,1,0,0,
        0,3786,3784,1,0,0,0,3787,3789,5,473,0,0,3788,3790,3,2248,1124,0,
        3789,3788,1,0,0,0,3789,3790,1,0,0,0,3790,161,1,0,0,0,3791,3794,5,
        305,0,0,3792,3793,5,1237,0,0,3793,3795,5,1484,0,0,3794,3792,1,0,
        0,0,3794,3795,1,0,0,0,3795,3797,1,0,0,0,3796,3798,7,20,0,0,3797,
        3796,1,0,0,0,3797,3798,1,0,0,0,3798,3799,1,0,0,0,3799,3800,5,1257,
        0,0,3800,3804,5,141,0,0,3801,3802,3,2310,1155,0,3802,3803,5,2340,
        0,0,3803,3805,1,0,0,0,3804,3801,1,0,0,0,3804,3805,1,0,0,0,3805,3806,
        1,0,0,0,3806,3807,3,2248,1124,0,3807,3811,7,22,0,0,3808,3810,3,170,
        85,0,3809,3808,1,0,0,0,3810,3813,1,0,0,0,3811,3812,1,0,0,0,3811,
        3809,1,0,0,0,3812,3824,1,0,0,0,3813,3811,1,0,0,0,3814,3815,5,110,
        0,0,3815,3822,3,1742,871,0,3816,3818,5,498,0,0,3817,3819,3,1796,
        898,0,3818,3817,1,0,0,0,3819,3820,1,0,0,0,3820,3818,1,0,0,0,3820,
        3821,1,0,0,0,3821,3823,1,0,0,0,3822,3816,1,0,0,0,3822,3823,1,0,0,
        0,3823,3825,1,0,0,0,3824,3814,1,0,0,0,3824,3825,1,0,0,0,3825,3826,
        1,0,0,0,3826,3828,5,473,0,0,3827,3829,3,2248,1124,0,3828,3827,1,
        0,0,0,3828,3829,1,0,0,0,3829,163,1,0,0,0,3830,3839,3,1726,863,0,
        3831,3839,3,1724,862,0,3832,3839,3,166,83,0,3833,3839,3,168,84,0,
        3834,3839,3,1716,858,0,3835,3839,3,1718,859,0,3836,3839,3,1720,860,
        0,3837,3839,3,1734,867,0,3838,3830,1,0,0,0,3838,3831,1,0,0,0,3838,
        3832,1,0,0,0,3838,3833,1,0,0,0,3838,3834,1,0,0,0,3838,3835,1,0,0,
        0,3838,3836,1,0,0,0,3838,3837,1,0,0,0,3839,165,1,0,0,0,3840,3841,
        5,1386,0,0,3841,3853,3,2362,1181,0,3842,3843,5,2347,0,0,3843,3848,
        3,1708,854,0,3844,3845,5,2353,0,0,3845,3847,3,1708,854,0,3846,3844,
        1,0,0,0,3847,3850,1,0,0,0,3848,3846,1,0,0,0,3848,3849,1,0,0,0,3849,
        3851,1,0,0,0,3850,3848,1,0,0,0,3851,3852,5,2348,0,0,3852,3854,1,
        0,0,0,3853,3842,1,0,0,0,3853,3854,1,0,0,0,3854,3859,1,0,0,0,3855,
        3858,3,118,59,0,3856,3858,5,1259,0,0,3857,3855,1,0,0,0,3857,3856,
        1,0,0,0,3858,3861,1,0,0,0,3859,3857,1,0,0,0,3859,3860,1,0,0,0,3860,
        3862,1,0,0,0,3861,3859,1,0,0,0,3862,3863,5,2367,0,0,3863,167,1,0,
        0,0,3864,3865,5,592,0,0,3865,3877,3,2362,1181,0,3866,3867,5,2347,
        0,0,3867,3872,3,1708,854,0,3868,3869,5,2353,0,0,3869,3871,3,1708,
        854,0,3870,3868,1,0,0,0,3871,3874,1,0,0,0,3872,3870,1,0,0,0,3872,
        3873,1,0,0,0,3873,3875,1,0,0,0,3874,3872,1,0,0,0,3875,3876,5,2348,
        0,0,3876,3878,1,0,0,0,3877,3866,1,0,0,0,3877,3878,1,0,0,0,3878,3879,
        1,0,0,0,3879,3880,5,1508,0,0,3880,3888,3,2334,1167,0,3881,3887,5,
        396,0,0,3882,3887,5,1321,0,0,3883,3887,3,112,56,0,3884,3887,5,1501,
        0,0,3885,3887,3,130,65,0,3886,3881,1,0,0,0,3886,3882,1,0,0,0,3886,
        3883,1,0,0,0,3886,3884,1,0,0,0,3886,3885,1,0,0,0,3887,3890,1,0,0,
        0,3888,3886,1,0,0,0,3888,3889,1,0,0,0,3889,3891,1,0,0,0,3890,3888,
        1,0,0,0,3891,3892,5,2367,0,0,3892,169,1,0,0,0,3893,3905,3,1726,863,
        0,3894,3905,3,1724,862,0,3895,3905,3,166,83,0,3896,3905,3,168,84,
        0,3897,3905,3,1718,859,0,3898,3905,3,1720,860,0,3899,3905,3,1716,
        858,0,3900,3905,3,1734,867,0,3901,3905,3,182,91,0,3902,3905,3,180,
        90,0,3903,3905,3,1788,894,0,3904,3893,1,0,0,0,3904,3894,1,0,0,0,
        3904,3895,1,0,0,0,3904,3896,1,0,0,0,3904,3897,1,0,0,0,3904,3898,
        1,0,0,0,3904,3899,1,0,0,0,3904,3900,1,0,0,0,3904,3901,1,0,0,0,3904,
        3902,1,0,0,0,3904,3903,1,0,0,0,3905,171,1,0,0,0,3906,3907,5,42,0,
        0,3907,3908,5,1337,0,0,3908,3909,5,553,0,0,3909,3926,3,2364,1182,
        0,3910,3911,5,1489,0,0,3911,3927,3,1182,591,0,3912,3927,3,930,465,
        0,3913,3916,5,934,0,0,3914,3915,5,936,0,0,3915,3917,3,202,101,0,
        3916,3914,1,0,0,0,3916,3917,1,0,0,0,3917,3920,1,0,0,0,3918,3919,
        5,99,0,0,3919,3921,3,1422,711,0,3920,3918,1,0,0,0,3920,3921,1,0,
        0,0,3921,3923,1,0,0,0,3922,3924,5,576,0,0,3923,3922,1,0,0,0,3923,
        3924,1,0,0,0,3924,3927,1,0,0,0,3925,3927,5,416,0,0,3926,3910,1,0,
        0,0,3926,3912,1,0,0,0,3926,3913,1,0,0,0,3926,3925,1,0,0,0,3927,173,
        1,0,0,0,3928,3929,5,438,0,0,3929,3930,5,1337,0,0,3930,3931,5,553,
        0,0,3931,3940,3,2364,1182,0,3932,3934,5,576,0,0,3933,3932,1,0,0,
        0,3933,3934,1,0,0,0,3934,3935,1,0,0,0,3935,3938,5,663,0,0,3936,3938,
        5,503,0,0,3937,3933,1,0,0,0,3937,3936,1,0,0,0,3938,3939,1,0,0,0,
        3939,3941,5,280,0,0,3940,3937,1,0,0,0,3940,3941,1,0,0,0,3941,175,
        1,0,0,0,3942,3943,5,438,0,0,3943,3944,5,1386,0,0,3944,3945,3,2280,
        1140,0,3945,177,1,0,0,0,3946,3947,5,42,0,0,3947,3948,5,1386,0,0,
        3948,3949,3,2280,1140,0,3949,3951,5,237,0,0,3950,3952,5,357,0,0,
        3951,3950,1,0,0,0,3951,3952,1,0,0,0,3952,3956,1,0,0,0,3953,3955,
        3,820,410,0,3954,3953,1,0,0,0,3955,3958,1,0,0,0,3956,3954,1,0,0,
        0,3956,3957,1,0,0,0,3957,3961,1,0,0,0,3958,3956,1,0,0,0,3959,3960,
        5,1509,0,0,3960,3962,5,1592,0,0,3961,3959,1,0,0,0,3961,3962,1,0,
        0,0,3962,179,1,0,0,0,3963,3964,5,592,0,0,3964,3976,3,2362,1181,0,
        3965,3966,5,2347,0,0,3966,3971,3,1708,854,0,3967,3968,5,2353,0,0,
        3968,3970,3,1708,854,0,3969,3967,1,0,0,0,3970,3973,1,0,0,0,3971,
        3969,1,0,0,0,3971,3972,1,0,0,0,3972,3974,1,0,0,0,3973,3971,1,0,0,
        0,3974,3975,5,2348,0,0,3975,3977,1,0,0,0,3976,3965,1,0,0,0,3976,
        3977,1,0,0,0,3977,3978,1,0,0,0,3978,3979,5,1508,0,0,3979,3988,3,
        2334,1167,0,3980,3987,5,1321,0,0,3981,3987,5,396,0,0,3982,3987,3,
        1692,846,0,3983,3987,3,112,56,0,3984,3987,3,116,58,0,3985,3987,3,
        130,65,0,3986,3980,1,0,0,0,3986,3981,1,0,0,0,3986,3982,1,0,0,0,3986,
        3983,1,0,0,0,3986,3984,1,0,0,0,3986,3985,1,0,0,0,3987,3990,1,0,0,
        0,3988,3986,1,0,0,0,3988,3989,1,0,0,0,3989,4005,1,0,0,0,3990,3988,
        1,0,0,0,3991,4000,7,22,0,0,3992,3994,5,361,0,0,3993,3992,1,0,0,0,
        3993,3994,1,0,0,0,3994,3996,1,0,0,0,3995,3997,3,1712,856,0,3996,
        3995,1,0,0,0,3996,3997,1,0,0,0,3997,3998,1,0,0,0,3998,4001,3,1794,
        897,0,3999,4001,3,1694,847,0,4000,3993,1,0,0,0,4000,3999,1,0,0,0,
        4001,4006,1,0,0,0,4002,4003,7,32,0,0,4003,4004,5,2153,0,0,4004,4006,
        3,2250,1125,0,4005,3991,1,0,0,0,4005,4002,1,0,0,0,4006,4007,1,0,
        0,0,4007,4008,5,2367,0,0,4008,181,1,0,0,0,4009,4010,5,1386,0,0,4010,
        4022,3,2362,1181,0,4011,4012,5,2347,0,0,4012,4017,3,1708,854,0,4013,
        4014,5,2353,0,0,4014,4016,3,1708,854,0,4015,4013,1,0,0,0,4016,4019,
        1,0,0,0,4017,4015,1,0,0,0,4017,4018,1,0,0,0,4018,4020,1,0,0,0,4019,
        4017,1,0,0,0,4020,4021,5,2348,0,0,4021,4023,1,0,0,0,4022,4011,1,
        0,0,0,4022,4023,1,0,0,0,4023,4028,1,0,0,0,4024,4027,3,118,59,0,4025,
        4027,5,1259,0,0,4026,4024,1,0,0,0,4026,4025,1,0,0,0,4027,4030,1,
        0,0,0,4028,4026,1,0,0,0,4028,4029,1,0,0,0,4029,4031,1,0,0,0,4030,
        4028,1,0,0,0,4031,4041,7,22,0,0,4032,4034,5,361,0,0,4033,4032,1,
        0,0,0,4033,4034,1,0,0,0,4034,4036,1,0,0,0,4035,4037,3,1712,856,0,
        4036,4035,1,0,0,0,4036,4037,1,0,0,0,4037,4038,1,0,0,0,4038,4042,
        3,1794,897,0,4039,4042,3,1694,847,0,4040,4042,5,523,0,0,4041,4033,
        1,0,0,0,4041,4039,1,0,0,0,4041,4040,1,0,0,0,4042,4043,1,0,0,0,4043,
        4044,5,2367,0,0,4044,183,1,0,0,0,4045,4048,5,305,0,0,4046,4047,5,
        1237,0,0,4047,4049,5,1484,0,0,4048,4046,1,0,0,0,4048,4049,1,0,0,
        0,4049,4050,1,0,0,0,4050,4051,5,1386,0,0,4051,4063,3,2280,1140,0,
        4052,4053,5,2347,0,0,4053,4058,3,1708,854,0,4054,4055,5,2353,0,0,
        4055,4057,3,1708,854,0,4056,4054,1,0,0,0,4057,4060,1,0,0,0,4058,
        4056,1,0,0,0,4058,4059,1,0,0,0,4059,4061,1,0,0,0,4060,4058,1,0,0,
        0,4061,4062,5,2348,0,0,4062,4064,1,0,0,0,4063,4052,1,0,0,0,4063,
        4064,1,0,0,0,4064,4066,1,0,0,0,4065,4067,3,1692,846,0,4066,4065,
        1,0,0,0,4066,4067,1,0,0,0,4067,4069,1,0,0,0,4068,4070,5,1259,0,0,
        4069,4068,1,0,0,0,4069,4070,1,0,0,0,4070,4071,1,0,0,0,4071,4081,
        7,22,0,0,4072,4074,5,361,0,0,4073,4072,1,0,0,0,4073,4074,1,0,0,0,
        4074,4076,1,0,0,0,4075,4077,3,1712,856,0,4076,4075,1,0,0,0,4076,
        4077,1,0,0,0,4077,4078,1,0,0,0,4078,4082,3,1794,897,0,4079,4082,
        3,1694,847,0,4080,4082,5,523,0,0,4081,4073,1,0,0,0,4081,4079,1,0,
        0,0,4081,4080,1,0,0,0,4082,185,1,0,0,0,4083,4084,5,42,0,0,4084,4085,
        5,1492,0,0,4085,4088,5,296,0,0,4086,4087,7,33,0,0,4087,4089,5,2341,
        0,0,4088,4086,1,0,0,0,4089,4090,1,0,0,0,4090,4088,1,0,0,0,4090,4091,
        1,0,0,0,4091,187,1,0,0,0,4092,4093,5,438,0,0,4093,4094,5,1245,0,
        0,4094,4095,3,2364,1182,0,4095,189,1,0,0,0,4096,4097,5,42,0,0,4097,
        4098,5,1518,0,0,4098,4099,5,1567,0,0,4099,4108,3,2240,1120,0,4100,
        4109,5,1190,0,0,4101,4109,5,1177,0,0,4102,4109,3,1202,601,0,4103,
        4106,5,1602,0,0,4104,4105,5,2052,0,0,4105,4107,3,1182,591,0,4106,
        4104,1,0,0,0,4106,4107,1,0,0,0,4107,4109,1,0,0,0,4108,4100,1,0,0,
        0,4108,4101,1,0,0,0,4108,4102,1,0,0,0,4108,4103,1,0,0,0,4109,191,
        1,0,0,0,4110,4111,5,438,0,0,4111,4112,5,1496,0,0,4112,4113,5,1338,
        0,0,4113,4118,3,2364,1182,0,4114,4115,5,580,0,0,4115,4116,5,1336,
        0,0,4116,4117,5,333,0,0,4117,4119,3,2364,1182,0,4118,4114,1,0,0,
        0,4118,4119,1,0,0,0,4119,193,1,0,0,0,4120,4121,5,438,0,0,4121,4122,
        5,1518,0,0,4122,4123,5,1567,0,0,4123,4124,3,2240,1120,0,4124,195,
        1,0,0,0,4125,4126,5,438,0,0,4126,4127,5,1515,0,0,4127,4128,3,2266,
        1133,0,4128,197,1,0,0,0,4129,4130,5,305,0,0,4130,4131,5,1337,0,0,
        4131,4132,5,553,0,0,4132,4134,3,2364,1182,0,4133,4135,3,200,100,
        0,4134,4133,1,0,0,0,4135,4136,1,0,0,0,4136,4134,1,0,0,0,4136,4137,
        1,0,0,0,4137,199,1,0,0,0,4138,4139,5,936,0,0,4139,4149,3,202,101,
        0,4140,4141,5,99,0,0,4141,4143,3,1422,711,0,4142,4144,5,1509,0,0,
        4143,4142,1,0,0,0,4143,4144,1,0,0,0,4144,4149,1,0,0,0,4145,4146,
        7,34,0,0,4146,4149,3,1182,591,0,4147,4149,3,930,465,0,4148,4138,
        1,0,0,0,4148,4140,1,0,0,0,4148,4145,1,0,0,0,4148,4147,1,0,0,0,4149,
        201,1,0,0,0,4150,4151,5,2343,0,0,4151,203,1,0,0,0,4152,4154,5,305,
        0,0,4153,4155,5,1398,0,0,4154,4153,1,0,0,0,4154,4155,1,0,0,0,4155,
        4156,1,0,0,0,4156,4157,5,1518,0,0,4157,4158,5,1567,0,0,4158,4164,
        3,2240,1120,0,4159,4160,5,1996,0,0,4160,4163,3,1614,807,0,4161,4163,
        3,1202,601,0,4162,4159,1,0,0,0,4162,4161,1,0,0,0,4163,4166,1,0,0,
        0,4164,4162,1,0,0,0,4164,4165,1,0,0,0,4165,205,1,0,0,0,4166,4164,
        1,0,0,0,4167,4168,5,438,0,0,4168,4169,5,2067,0,0,4169,4170,3,2282,
        1141,0,4170,207,1,0,0,0,4171,4172,5,42,0,0,4172,4173,5,2067,0,0,
        4173,4192,3,2282,1141,0,4174,4193,7,17,0,0,4175,4176,5,1481,0,0,
        4176,4177,5,2052,0,0,4177,4193,3,2282,1141,0,4178,4180,5,237,0,0,
        4179,4181,5,357,0,0,4180,4179,1,0,0,0,4180,4181,1,0,0,0,4181,4185,
        1,0,0,0,4182,4184,3,820,410,0,4183,4182,1,0,0,0,4184,4187,1,0,0,
        0,4185,4183,1,0,0,0,4185,4186,1,0,0,0,4186,4190,1,0,0,0,4187,4185,
        1,0,0,0,4188,4189,5,1509,0,0,4189,4191,5,1592,0,0,4190,4188,1,0,
        0,0,4190,4191,1,0,0,0,4191,4193,1,0,0,0,4192,4174,1,0,0,0,4192,4175,
        1,0,0,0,4192,4178,1,0,0,0,4193,209,1,0,0,0,4194,4197,5,305,0,0,4195,
        4196,5,1237,0,0,4196,4198,5,1484,0,0,4197,4195,1,0,0,0,4197,4198,
        1,0,0,0,4198,4199,1,0,0,0,4199,4200,5,2067,0,0,4200,4204,3,2282,
        1141,0,4201,4205,3,216,108,0,4202,4205,3,220,110,0,4203,4205,3,222,
        111,0,4204,4201,1,0,0,0,4204,4202,1,0,0,0,4204,4203,1,0,0,0,4205,
        4207,1,0,0,0,4206,4208,3,212,106,0,4207,4206,1,0,0,0,4207,4208,1,
        0,0,0,4208,4210,1,0,0,0,4209,4211,7,17,0,0,4210,4209,1,0,0,0,4210,
        4211,1,0,0,0,4211,4213,1,0,0,0,4212,4214,3,214,107,0,4213,4212,1,
        0,0,0,4213,4214,1,0,0,0,4214,4215,1,0,0,0,4215,4216,3,224,112,0,
        4216,211,1,0,0,0,4217,4218,5,574,0,0,4218,4223,3,2282,1141,0,4219,
        4220,5,2353,0,0,4220,4222,3,2282,1141,0,4221,4219,1,0,0,0,4222,4225,
        1,0,0,0,4223,4221,1,0,0,0,4223,4224,1,0,0,0,4224,213,1,0,0,0,4225,
        4223,1,0,0,0,4226,4227,5,2204,0,0,4227,4228,5,2347,0,0,4228,4229,
        3,2048,1024,0,4229,4230,5,2348,0,0,4230,215,1,0,0,0,4231,4236,5,
        109,0,0,4232,4236,5,33,0,0,4233,4234,5,720,0,0,4234,4236,5,1180,
        0,0,4235,4231,1,0,0,0,4235,4232,1,0,0,0,4235,4233,1,0,0,0,4236,4237,
        1,0,0,0,4237,4239,3,234,117,0,4238,4240,3,240,120,0,4239,4238,1,
        0,0,0,4239,4240,1,0,0,0,4240,4242,1,0,0,0,4241,4243,3,218,109,0,
        4242,4241,1,0,0,0,4242,4243,1,0,0,0,4243,217,1,0,0,0,4244,4245,5,
        580,0,0,4245,4246,5,450,0,0,4246,4247,5,1528,0,0,4247,219,1,0,0,
        0,4248,4249,5,580,0,0,4249,4251,3,234,117,0,4250,4252,3,240,120,
        0,4251,4250,1,0,0,0,4251,4252,1,0,0,0,4252,221,1,0,0,0,4253,4254,
        7,35,0,0,4254,4259,3,232,116,0,4255,4256,5,1237,0,0,4256,4258,3,
        232,116,0,4257,4255,1,0,0,0,4258,4261,1,0,0,0,4259,4257,1,0,0,0,
        4259,4260,1,0,0,0,4260,4262,1,0,0,0,4261,4259,1,0,0,0,4262,4270,
        5,1193,0,0,4263,4271,5,333,0,0,4264,4265,3,2244,1122,0,4265,4266,
        5,2340,0,0,4266,4268,1,0,0,0,4267,4264,1,0,0,0,4267,4268,1,0,0,0,
        4268,4269,1,0,0,0,4269,4271,5,1547,0,0,4270,4263,1,0,0,0,4270,4267,
        1,0,0,0,4271,223,1,0,0,0,4272,4277,3,228,114,0,4273,4274,5,165,0,
        0,4274,4277,3,2362,1181,0,4275,4277,3,1798,899,0,4276,4272,1,0,0,
        0,4276,4273,1,0,0,0,4276,4275,1,0,0,0,4277,225,1,0,0,0,4278,4280,
        3,2246,1123,0,4279,4281,3,2324,1162,0,4280,4279,1,0,0,0,4280,4281,
        1,0,0,0,4281,227,1,0,0,0,4282,4283,5,245,0,0,4283,4285,5,2067,0,
        0,4284,4286,3,1712,856,0,4285,4284,1,0,0,0,4285,4286,1,0,0,0,4286,
        4288,1,0,0,0,4287,4289,3,230,115,0,4288,4287,1,0,0,0,4289,4290,1,
        0,0,0,4290,4288,1,0,0,0,4290,4291,1,0,0,0,4291,4292,1,0,0,0,4292,
        4294,5,473,0,0,4293,4295,3,2282,1141,0,4294,4293,1,0,0,0,4294,4295,
        1,0,0,0,4295,229,1,0,0,0,4296,4297,5,109,0,0,4297,4298,5,1659,0,
        0,4298,4299,5,740,0,0,4299,4300,3,1800,900,0,4300,4301,5,109,0,0,
        4301,4302,5,1659,0,0,4302,4303,5,2367,0,0,4303,4333,1,0,0,0,4304,
        4305,5,109,0,0,4305,4306,5,450,0,0,4306,4307,5,1528,0,0,4307,4308,
        5,740,0,0,4308,4309,3,1800,900,0,4309,4310,5,109,0,0,4310,4311,5,
        450,0,0,4311,4312,5,1528,0,0,4312,4313,5,2367,0,0,4313,4333,1,0,
        0,0,4314,4315,5,33,0,0,4315,4316,5,1659,0,0,4316,4317,5,740,0,0,
        4317,4318,3,1800,900,0,4318,4319,5,33,0,0,4319,4320,5,1659,0,0,4320,
        4321,5,2367,0,0,4321,4333,1,0,0,0,4322,4323,5,33,0,0,4323,4324,5,
        450,0,0,4324,4325,5,1528,0,0,4325,4326,5,740,0,0,4326,4327,3,1800,
        900,0,4327,4328,5,33,0,0,4328,4329,5,450,0,0,4329,4330,5,1528,0,
        0,4330,4331,5,2367,0,0,4331,4333,1,0,0,0,4332,4296,1,0,0,0,4332,
        4304,1,0,0,0,4332,4314,1,0,0,0,4332,4322,1,0,0,0,4333,231,1,0,0,
        0,4334,4361,5,42,0,0,4335,4361,5,46,0,0,4336,4337,5,75,0,0,4337,
        4361,5,1662,0,0,4338,4361,5,83,0,0,4339,4361,5,230,0,0,4340,4361,
        5,305,0,0,4341,4342,5,409,0,0,4342,4361,5,1662,0,0,4343,4361,5,438,
        0,0,4344,4361,5,607,0,0,4345,4361,5,1004,0,0,4346,4361,5,1481,0,
        0,4347,4361,5,1511,0,0,4348,4361,5,2069,0,0,4349,4361,5,355,0,0,
        4350,4361,5,1655,0,0,4351,4361,5,1603,0,0,4352,4361,5,351,0,0,4353,
        4361,5,839,0,0,4354,4361,5,838,0,0,4355,4361,5,1581,0,0,4356,4361,
        5,1706,0,0,4357,4361,5,333,0,0,4358,4361,5,1547,0,0,4359,4361,5,
        574,0,0,4360,4334,1,0,0,0,4360,4335,1,0,0,0,4360,4336,1,0,0,0,4360,
        4338,1,0,0,0,4360,4339,1,0,0,0,4360,4340,1,0,0,0,4360,4341,1,0,0,
        0,4360,4343,1,0,0,0,4360,4344,1,0,0,0,4360,4345,1,0,0,0,4360,4346,
        1,0,0,0,4360,4347,1,0,0,0,4360,4348,1,0,0,0,4360,4349,1,0,0,0,4360,
        4350,1,0,0,0,4360,4351,1,0,0,0,4360,4352,1,0,0,0,4360,4353,1,0,0,
        0,4360,4354,1,0,0,0,4360,4355,1,0,0,0,4360,4356,1,0,0,0,4360,4357,
        1,0,0,0,4360,4358,1,0,0,0,4360,4359,1,0,0,0,4361,233,1,0,0,0,4362,
        4367,3,236,118,0,4363,4364,5,1237,0,0,4364,4366,3,236,118,0,4365,
        4363,1,0,0,0,4366,4369,1,0,0,0,4367,4365,1,0,0,0,4367,4368,1,0,0,
        0,4368,4370,1,0,0,0,4369,4367,1,0,0,0,4370,4372,5,1193,0,0,4371,
        4373,3,238,119,0,4372,4371,1,0,0,0,4372,4373,1,0,0,0,4373,4374,1,
        0,0,0,4374,4375,3,2302,1151,0,4375,235,1,0,0,0,4376,4379,7,36,0,
        0,4377,4378,5,1180,0,0,4378,4380,3,2318,1159,0,4379,4377,1,0,0,0,
        4379,4380,1,0,0,0,4380,237,1,0,0,0,4381,4382,5,959,0,0,4382,4383,
        5,1999,0,0,4383,4384,3,2302,1151,0,4384,4385,5,1180,0,0,4385,239,
        1,0,0,0,4386,4387,5,1451,0,0,4387,4390,3,242,121,0,4388,4390,5,1450,
        0,0,4389,4386,1,0,0,0,4389,4388,1,0,0,0,4390,4394,1,0,0,0,4391,4393,
        3,242,121,0,4392,4391,1,0,0,0,4393,4396,1,0,0,0,4394,4392,1,0,0,
        0,4394,4395,1,0,0,0,4395,241,1,0,0,0,4396,4394,1,0,0,0,4397,4398,
        7,37,0,0,4398,4399,3,2222,1111,0,4399,243,1,0,0,0,4400,4401,5,438,
        0,0,4401,4403,5,2076,0,0,4402,4404,5,141,0,0,4403,4402,1,0,0,0,4403,
        4404,1,0,0,0,4404,4405,1,0,0,0,4405,4407,3,2272,1136,0,4406,4408,
        7,38,0,0,4407,4406,1,0,0,0,4407,4408,1,0,0,0,4408,245,1,0,0,0,4409,
        4410,5,42,0,0,4410,4411,5,2076,0,0,4411,4418,3,2272,1136,0,4412,
        4419,3,248,124,0,4413,4419,3,250,125,0,4414,4419,3,252,126,0,4415,
        4419,3,260,130,0,4416,4419,3,294,147,0,4417,4419,3,306,153,0,4418,
        4412,1,0,0,0,4418,4413,1,0,0,0,4418,4414,1,0,0,0,4418,4415,1,0,0,
        0,4418,4416,1,0,0,0,4418,4417,1,0,0,0,4419,4421,1,0,0,0,4420,4422,
        3,262,131,0,4421,4420,1,0,0,0,4421,4422,1,0,0,0,4422,247,1,0,0,0,
        4423,4425,5,237,0,0,4424,4426,5,357,0,0,4425,4424,1,0,0,0,4425,4426,
        1,0,0,0,4426,4428,1,0,0,0,4427,4429,7,39,0,0,4428,4427,1,0,0,0,4428,
        4429,1,0,0,0,4429,4433,1,0,0,0,4430,4432,3,820,410,0,4431,4430,1,
        0,0,0,4432,4435,1,0,0,0,4433,4431,1,0,0,0,4433,4434,1,0,0,0,4434,
        4438,1,0,0,0,4435,4433,1,0,0,0,4436,4437,5,1509,0,0,4437,4439,5,
        1592,0,0,4438,4436,1,0,0,0,4438,4439,1,0,0,0,4439,249,1,0,0,0,4440,
        4442,5,1484,0,0,4441,4443,3,1692,846,0,4442,4441,1,0,0,0,4442,4443,
        1,0,0,0,4443,4444,1,0,0,0,4444,4445,5,67,0,0,4445,4446,5,1172,0,
        0,4446,4447,5,2347,0,0,4447,4452,3,296,148,0,4448,4449,5,2353,0,
        0,4449,4451,3,296,148,0,4450,4448,1,0,0,0,4451,4454,1,0,0,0,4452,
        4450,1,0,0,0,4452,4453,1,0,0,0,4453,4455,1,0,0,0,4454,4452,1,0,0,
        0,4455,4456,5,2348,0,0,4456,251,1,0,0,0,4457,4462,3,254,127,0,4458,
        4459,5,2353,0,0,4459,4461,3,254,127,0,4460,4458,1,0,0,0,4461,4464,
        1,0,0,0,4462,4460,1,0,0,0,4462,4463,1,0,0,0,4463,253,1,0,0,0,4464,
        4462,1,0,0,0,4465,4468,7,9,0,0,4466,4469,3,316,158,0,4467,4469,3,
        304,152,0,4468,4466,1,0,0,0,4468,4467,1,0,0,0,4469,255,1,0,0,0,4470,
        4471,7,40,0,0,4471,4484,5,81,0,0,4472,4485,3,258,129,0,4473,4474,
        5,2347,0,0,4474,4479,3,258,129,0,4475,4476,5,2353,0,0,4476,4478,
        3,258,129,0,4477,4475,1,0,0,0,4478,4481,1,0,0,0,4479,4477,1,0,0,
        0,4479,4480,1,0,0,0,4480,4482,1,0,0,0,4481,4479,1,0,0,0,4482,4483,
        5,2348,0,0,4483,4485,1,0,0,0,4484,4472,1,0,0,0,4484,4473,1,0,0,0,
        4485,257,1,0,0,0,4486,4488,3,2236,1118,0,4487,4489,3,2334,1167,0,
        4488,4487,1,0,0,0,4488,4489,1,0,0,0,4489,259,1,0,0,0,4490,4496,5,
        926,0,0,4491,4492,5,810,0,0,4492,4497,3,2052,1026,0,4493,4494,5,
        455,0,0,4494,4495,5,2076,0,0,4495,4497,3,2334,1167,0,4496,4491,1,
        0,0,0,4496,4493,1,0,0,0,4497,261,1,0,0,0,4498,4515,5,736,0,0,4499,
        4509,5,171,0,0,4500,4501,5,285,0,0,4501,4502,5,2052,0,0,4502,4510,
        5,1696,0,0,4503,4505,5,1138,0,0,4504,4503,1,0,0,0,4504,4505,1,0,
        0,0,4505,4506,1,0,0,0,4506,4507,5,663,0,0,4507,4508,5,1999,0,0,4508,
        4510,5,334,0,0,4509,4500,1,0,0,0,4509,4504,1,0,0,0,4509,4510,1,0,
        0,0,4510,4512,1,0,0,0,4511,4513,3,264,132,0,4512,4511,1,0,0,0,4512,
        4513,1,0,0,0,4513,4515,1,0,0,0,4514,4498,1,0,0,0,4514,4499,1,0,0,
        0,4515,263,1,0,0,0,4516,4518,5,576,0,0,4517,4516,1,0,0,0,4517,4518,
        1,0,0,0,4518,4519,1,0,0,0,4519,4520,5,500,0,0,4520,4521,5,735,0,
        0,4521,4522,3,2302,1151,0,4522,265,1,0,0,0,4523,4526,5,305,0,0,4524,
        4525,5,1237,0,0,4525,4527,5,1484,0,0,4526,4524,1,0,0,0,4526,4527,
        1,0,0,0,4527,4528,1,0,0,0,4528,4531,5,2076,0,0,4529,4532,3,268,134,
        0,4530,4532,3,280,140,0,4531,4529,1,0,0,0,4531,4530,1,0,0,0,4532,
        267,1,0,0,0,4533,4536,3,2272,1136,0,4534,4535,5,1182,0,0,4535,4537,
        5,2343,0,0,4536,4534,1,0,0,0,4536,4537,1,0,0,0,4537,4539,1,0,0,0,
        4538,4540,5,576,0,0,4539,4538,1,0,0,0,4539,4540,1,0,0,0,4540,4542,
        1,0,0,0,4541,4543,3,270,135,0,4542,4541,1,0,0,0,4542,4543,1,0,0,
        0,4543,269,1,0,0,0,4544,4546,3,1692,846,0,4545,4544,1,0,0,0,4545,
        4546,1,0,0,0,4546,4549,1,0,0,0,4547,4550,3,272,136,0,4548,4550,3,
        274,137,0,4549,4547,1,0,0,0,4549,4548,1,0,0,0,4550,4552,1,0,0,0,
        4551,4553,3,278,139,0,4552,4551,1,0,0,0,4552,4553,1,0,0,0,4553,4565,
        1,0,0,0,4554,4555,5,2347,0,0,4555,4560,3,296,148,0,4556,4557,5,2353,
        0,0,4557,4559,3,296,148,0,4558,4556,1,0,0,0,4559,4562,1,0,0,0,4560,
        4558,1,0,0,0,4560,4561,1,0,0,0,4561,4563,1,0,0,0,4562,4560,1,0,0,
        0,4563,4564,5,2348,0,0,4564,4566,1,0,0,0,4565,4554,1,0,0,0,4565,
        4566,1,0,0,0,4566,4570,1,0,0,0,4567,4569,3,294,147,0,4568,4567,1,
        0,0,0,4569,4572,1,0,0,0,4570,4568,1,0,0,0,4570,4571,1,0,0,0,4571,
        271,1,0,0,0,4572,4570,1,0,0,0,4573,4577,7,22,0,0,4574,4578,5,1172,
        0,0,4575,4578,3,1740,870,0,4576,4578,3,276,138,0,4577,4574,1,0,0,
        0,4577,4575,1,0,0,0,4577,4576,1,0,0,0,4578,273,1,0,0,0,4579,4580,
        5,2086,0,0,4580,4581,3,2334,1167,0,4581,275,1,0,0,0,4582,4583,5,
        1999,0,0,4583,4584,5,1180,0,0,4584,4587,3,2334,1167,0,4585,4586,
        5,1138,0,0,4586,4588,5,1162,0,0,4587,4585,1,0,0,0,4587,4588,1,0,
        0,0,4588,277,1,0,0,0,4589,4590,5,523,0,0,4590,4591,5,943,0,0,4591,
        4592,3,2052,1026,0,4592,4593,5,777,0,0,4593,4594,5,746,0,0,4594,
        4595,5,2153,0,0,4595,4596,7,41,0,0,4596,279,1,0,0,0,4597,4598,5,
        141,0,0,4598,4599,3,2272,1136,0,4599,4601,7,22,0,0,4600,4602,3,282,
        141,0,4601,4600,1,0,0,0,4602,4603,1,0,0,0,4603,4601,1,0,0,0,4603,
        4604,1,0,0,0,4604,4605,1,0,0,0,4605,4606,5,473,0,0,4606,281,1,0,
        0,0,4607,4611,3,284,142,0,4608,4611,3,286,143,0,4609,4611,3,306,
        153,0,4610,4607,1,0,0,0,4610,4608,1,0,0,0,4610,4609,1,0,0,0,4611,
        283,1,0,0,0,4612,4613,7,42,0,0,4613,4614,5,882,0,0,4614,4615,3,290,
        145,0,4615,285,1,0,0,0,4616,4620,7,43,0,0,4617,4621,3,288,144,0,
        4618,4621,3,290,145,0,4619,4621,3,292,146,0,4620,4617,1,0,0,0,4620,
        4618,1,0,0,0,4620,4619,1,0,0,0,4621,287,1,0,0,0,4622,4623,5,1386,
        0,0,4623,4624,3,2280,1140,0,4624,4625,5,2347,0,0,4625,4630,3,322,
        161,0,4626,4627,5,2353,0,0,4627,4629,3,322,161,0,4628,4626,1,0,0,
        0,4629,4632,1,0,0,0,4630,4628,1,0,0,0,4630,4631,1,0,0,0,4631,4633,
        1,0,0,0,4632,4630,1,0,0,0,4633,4634,5,2348,0,0,4634,4645,7,22,0,
        0,4635,4646,3,1694,847,0,4636,4638,5,361,0,0,4637,4636,1,0,0,0,4637,
        4638,1,0,0,0,4638,4640,1,0,0,0,4639,4641,3,1712,856,0,4640,4639,
        1,0,0,0,4640,4641,1,0,0,0,4641,4642,1,0,0,0,4642,4643,3,1794,897,
        0,4643,4644,5,2367,0,0,4644,4646,1,0,0,0,4645,4635,1,0,0,0,4645,
        4637,1,0,0,0,4646,289,1,0,0,0,4647,4648,5,592,0,0,4648,4660,3,2278,
        1139,0,4649,4650,5,2347,0,0,4650,4655,3,322,161,0,4651,4652,5,2353,
        0,0,4652,4654,3,322,161,0,4653,4651,1,0,0,0,4654,4657,1,0,0,0,4655,
        4653,1,0,0,0,4655,4656,1,0,0,0,4656,4658,1,0,0,0,4657,4655,1,0,0,
        0,4658,4659,5,2348,0,0,4659,4661,1,0,0,0,4660,4649,1,0,0,0,4660,
        4661,1,0,0,0,4661,4662,1,0,0,0,4662,4663,5,1508,0,0,4663,4664,3,
        2334,1167,0,4664,4675,7,22,0,0,4665,4676,3,1694,847,0,4666,4668,
        5,361,0,0,4667,4666,1,0,0,0,4667,4668,1,0,0,0,4668,4670,1,0,0,0,
        4669,4671,3,1712,856,0,4670,4669,1,0,0,0,4670,4671,1,0,0,0,4671,
        4672,1,0,0,0,4672,4673,3,1794,897,0,4673,4674,5,2367,0,0,4674,4676,
        1,0,0,0,4675,4665,1,0,0,0,4675,4667,1,0,0,0,4676,291,1,0,0,0,4677,
        4679,5,556,0,0,4678,4677,1,0,0,0,4678,4679,1,0,0,0,4679,4681,1,0,
        0,0,4680,4682,5,718,0,0,4681,4680,1,0,0,0,4681,4682,1,0,0,0,4682,
        4683,1,0,0,0,4683,4684,5,273,0,0,4684,4685,5,592,0,0,4685,4703,3,
        2334,1167,0,4686,4687,5,2347,0,0,4687,4688,5,1570,0,0,4688,4689,
        5,696,0,0,4689,4690,5,1247,0,0,4690,4691,3,2334,1167,0,4691,4692,
        5,2353,0,0,4692,4693,1,0,0,0,4693,4698,3,322,161,0,4694,4695,5,2353,
        0,0,4695,4697,3,322,161,0,4696,4694,1,0,0,0,4697,4700,1,0,0,0,4698,
        4696,1,0,0,0,4698,4699,1,0,0,0,4699,4701,1,0,0,0,4700,4698,1,0,0,
        0,4701,4702,5,2348,0,0,4702,4704,1,0,0,0,4703,4686,1,0,0,0,4703,
        4704,1,0,0,0,4704,4705,1,0,0,0,4705,4706,5,1508,0,0,4706,4707,5,
        1570,0,0,4707,4708,5,67,0,0,4708,4709,5,1502,0,0,4709,4720,7,22,
        0,0,4710,4721,3,1694,847,0,4711,4713,5,361,0,0,4712,4711,1,0,0,0,
        4712,4713,1,0,0,0,4713,4715,1,0,0,0,4714,4716,3,1712,856,0,4715,
        4714,1,0,0,0,4715,4716,1,0,0,0,4716,4717,1,0,0,0,4717,4718,3,1794,
        897,0,4718,4719,5,2367,0,0,4719,4721,1,0,0,0,4720,4710,1,0,0,0,4720,
        4712,1,0,0,0,4721,293,1,0,0,0,4722,4724,5,1138,0,0,4723,4722,1,0,
        0,0,4723,4724,1,0,0,0,4724,4725,1,0,0,0,4725,4726,7,44,0,0,4726,
        295,1,0,0,0,4727,4728,3,2362,1181,0,4728,4730,3,2334,1167,0,4729,
        4731,3,298,149,0,4730,4729,1,0,0,0,4730,4731,1,0,0,0,4731,4734,1,
        0,0,0,4732,4734,3,300,150,0,4733,4727,1,0,0,0,4733,4732,1,0,0,0,
        4734,297,1,0,0,0,4735,4736,5,523,0,0,4736,4737,5,943,0,0,4737,4738,
        3,2052,1026,0,4738,299,1,0,0,0,4739,4741,3,294,147,0,4740,4739,1,
        0,0,0,4740,4741,1,0,0,0,4741,4743,1,0,0,0,4742,4744,3,302,151,0,
        4743,4742,1,0,0,0,4744,4745,1,0,0,0,4745,4743,1,0,0,0,4745,4746,
        1,0,0,0,4746,4749,1,0,0,0,4747,4748,5,2353,0,0,4748,4750,3,318,159,
        0,4749,4747,1,0,0,0,4749,4750,1,0,0,0,4750,301,1,0,0,0,4751,4755,
        3,304,152,0,4752,4755,3,314,157,0,4753,4755,3,316,158,0,4754,4751,
        1,0,0,0,4754,4752,1,0,0,0,4754,4753,1,0,0,0,4755,303,1,0,0,0,4756,
        4759,7,43,0,0,4757,4760,3,310,155,0,4758,4760,3,312,156,0,4759,4757,
        1,0,0,0,4759,4758,1,0,0,0,4760,305,1,0,0,0,4761,4762,5,1252,0,0,
        4762,4763,5,882,0,0,4763,4764,3,308,154,0,4764,307,1,0,0,0,4765,
        4766,5,592,0,0,4766,4778,3,2278,1139,0,4767,4768,5,2347,0,0,4768,
        4773,3,322,161,0,4769,4770,5,2353,0,0,4770,4772,3,322,161,0,4771,
        4769,1,0,0,0,4772,4775,1,0,0,0,4773,4771,1,0,0,0,4773,4774,1,0,0,
        0,4774,4776,1,0,0,0,4775,4773,1,0,0,0,4776,4777,5,2348,0,0,4777,
        4779,1,0,0,0,4778,4767,1,0,0,0,4778,4779,1,0,0,0,4779,4780,1,0,0,
        0,4780,4785,5,1508,0,0,4781,4786,3,2334,1167,0,4782,4783,5,1570,
        0,0,4783,4784,5,67,0,0,4784,4786,5,1502,0,0,4785,4781,1,0,0,0,4785,
        4782,1,0,0,0,4786,4798,1,0,0,0,4787,4789,5,1321,0,0,4788,4787,1,
        0,0,0,4788,4789,1,0,0,0,4789,4790,1,0,0,0,4790,4792,7,22,0,0,4791,
        4793,5,361,0,0,4792,4791,1,0,0,0,4792,4793,1,0,0,0,4793,4795,1,0,
        0,0,4794,4796,3,1712,856,0,4795,4794,1,0,0,0,4795,4796,1,0,0,0,4796,
        4797,1,0,0,0,4797,4799,3,1794,897,0,4798,4788,1,0,0,0,4798,4799,
        1,0,0,0,4799,4801,1,0,0,0,4800,4802,5,2367,0,0,4801,4800,1,0,0,0,
        4801,4802,1,0,0,0,4802,309,1,0,0,0,4803,4804,5,1386,0,0,4804,4805,
        3,2280,1140,0,4805,4806,5,2347,0,0,4806,4811,3,322,161,0,4807,4808,
        5,2353,0,0,4808,4810,3,322,161,0,4809,4807,1,0,0,0,4810,4813,1,0,
        0,0,4811,4809,1,0,0,0,4811,4812,1,0,0,0,4812,4814,1,0,0,0,4813,4811,
        1,0,0,0,4814,4817,5,2348,0,0,4815,4816,7,22,0,0,4816,4818,3,1694,
        847,0,4817,4815,1,0,0,0,4817,4818,1,0,0,0,4818,311,1,0,0,0,4819,
        4820,5,592,0,0,4820,4832,3,2278,1139,0,4821,4822,5,2347,0,0,4822,
        4827,3,322,161,0,4823,4824,5,2353,0,0,4824,4826,3,322,161,0,4825,
        4823,1,0,0,0,4826,4829,1,0,0,0,4827,4825,1,0,0,0,4827,4828,1,0,0,
        0,4828,4830,1,0,0,0,4829,4827,1,0,0,0,4830,4831,5,2348,0,0,4831,
        4833,1,0,0,0,4832,4821,1,0,0,0,4832,4833,1,0,0,0,4833,4834,1,0,0,
        0,4834,4839,5,1508,0,0,4835,4840,3,2334,1167,0,4836,4837,5,1570,
        0,0,4837,4838,5,67,0,0,4838,4840,5,1502,0,0,4839,4835,1,0,0,0,4839,
        4836,1,0,0,0,4840,4849,1,0,0,0,4841,4842,7,22,0,0,4842,4850,3,1694,
        847,0,4843,4845,5,523,0,0,4844,4846,5,2168,0,0,4845,4844,1,0,0,0,
        4845,4846,1,0,0,0,4846,4847,1,0,0,0,4847,4848,5,943,0,0,4848,4850,
        3,2052,1026,0,4849,4841,1,0,0,0,4849,4843,1,0,0,0,4849,4850,1,0,
        0,0,4850,313,1,0,0,0,4851,4853,5,556,0,0,4852,4851,1,0,0,0,4852,
        4853,1,0,0,0,4853,4855,1,0,0,0,4854,4856,5,718,0,0,4855,4854,1,0,
        0,0,4855,4856,1,0,0,0,4856,4857,1,0,0,0,4857,4858,5,273,0,0,4858,
        4859,5,592,0,0,4859,4877,3,2334,1167,0,4860,4861,5,2347,0,0,4861,
        4862,5,1570,0,0,4862,4863,5,696,0,0,4863,4864,5,1247,0,0,4864,4865,
        3,2334,1167,0,4865,4866,5,2353,0,0,4866,4867,1,0,0,0,4867,4872,3,
        322,161,0,4868,4869,5,2353,0,0,4869,4871,3,322,161,0,4870,4868,1,
        0,0,0,4871,4874,1,0,0,0,4872,4870,1,0,0,0,4872,4873,1,0,0,0,4873,
        4875,1,0,0,0,4874,4872,1,0,0,0,4875,4876,5,2348,0,0,4876,4878,1,
        0,0,0,4877,4860,1,0,0,0,4877,4878,1,0,0,0,4878,4879,1,0,0,0,4879,
        4880,5,1508,0,0,4880,4881,5,1570,0,0,4881,4882,5,67,0,0,4882,4885,
        5,1502,0,0,4883,4884,7,22,0,0,4884,4886,3,1694,847,0,4885,4883,1,
        0,0,0,4885,4886,1,0,0,0,4886,315,1,0,0,0,4887,4888,7,42,0,0,4888,
        4889,5,882,0,0,4889,4890,3,312,156,0,4890,317,1,0,0,0,4891,4892,
        5,1359,0,0,4892,4893,5,1499,0,0,4893,4894,5,2347,0,0,4894,4899,3,
        320,160,0,4895,4896,5,2353,0,0,4896,4898,3,320,160,0,4897,4895,1,
        0,0,0,4898,4901,1,0,0,0,4899,4897,1,0,0,0,4899,4900,1,0,0,0,4900,
        4902,1,0,0,0,4901,4899,1,0,0,0,4902,4903,5,2348,0,0,4903,319,1,0,
        0,0,4904,4907,3,2362,1181,0,4905,4907,5,368,0,0,4906,4904,1,0,0,
        0,4906,4905,1,0,0,0,4907,321,1,0,0,0,4908,4909,3,2252,1126,0,4909,
        4910,3,2334,1167,0,4910,323,1,0,0,0,4911,4912,5,438,0,0,4912,4913,
        5,1575,0,0,4913,4914,3,2274,1137,0,4914,325,1,0,0,0,4915,4916,5,
        42,0,0,4916,4917,5,1575,0,0,4917,4919,3,2274,1137,0,4918,4920,3,
        334,167,0,4919,4918,1,0,0,0,4920,4921,1,0,0,0,4921,4919,1,0,0,0,
        4921,4922,1,0,0,0,4922,327,1,0,0,0,4923,4924,5,42,0,0,4924,4954,
        5,1586,0,0,4925,4926,5,30,0,0,4926,4955,7,45,0,0,4927,4928,5,208,
        0,0,4928,4929,5,333,0,0,4929,4930,5,812,0,0,4930,4955,3,2252,1126,
        0,4931,4932,3,1272,636,0,4932,4933,5,231,0,0,4933,4934,5,696,0,0,
        4934,4935,5,1386,0,0,4935,4955,1,0,0,0,4936,4937,3,1272,636,0,4937,
        4938,5,616,0,0,4938,4955,1,0,0,0,4939,4942,3,1272,636,0,4940,4942,
        5,576,0,0,4941,4939,1,0,0,0,4941,4940,1,0,0,0,4942,4943,1,0,0,0,
        4943,4944,5,1261,0,0,4944,4950,7,46,0,0,4945,4948,5,1261,0,0,4946,
        4949,3,2150,1075,0,4947,4949,3,2252,1126,0,4948,4946,1,0,0,0,4948,
        4947,1,0,0,0,4949,4951,1,0,0,0,4950,4945,1,0,0,0,4950,4951,1,0,0,
        0,4951,4955,1,0,0,0,4952,4953,5,1590,0,0,4953,4955,3,330,165,0,4954,
        4925,1,0,0,0,4954,4927,1,0,0,0,4954,4931,1,0,0,0,4954,4936,1,0,0,
        0,4954,4941,1,0,0,0,4954,4952,1,0,0,0,4955,329,1,0,0,0,4956,4957,
        3,2252,1126,0,4957,4958,5,2369,0,0,4958,4959,3,822,411,0,4959,4961,
        1,0,0,0,4960,4956,1,0,0,0,4961,4962,1,0,0,0,4962,4960,1,0,0,0,4962,
        4963,1,0,0,0,4963,4987,1,0,0,0,4964,4965,5,452,0,0,4965,4966,5,2369,
        0,0,4966,4987,3,2364,1182,0,4967,4968,5,274,0,0,4968,4969,5,2369,
        0,0,4969,4973,3,2364,1182,0,4970,4971,5,1583,0,0,4971,4972,5,2369,
        0,0,4972,4974,3,2364,1182,0,4973,4970,1,0,0,0,4973,4974,1,0,0,0,
        4974,4987,1,0,0,0,4975,4976,5,1528,0,0,4976,4977,5,62,0,0,4977,4978,
        5,2193,0,0,4978,4979,5,2369,0,0,4979,4987,7,47,0,0,4980,4981,5,370,
        0,0,4981,4984,5,2369,0,0,4982,4985,3,2364,1182,0,4983,4985,5,1071,
        0,0,4984,4982,1,0,0,0,4984,4983,1,0,0,0,4985,4987,1,0,0,0,4986,4960,
        1,0,0,0,4986,4964,1,0,0,0,4986,4967,1,0,0,0,4986,4975,1,0,0,0,4986,
        4980,1,0,0,0,4987,331,1,0,0,0,4988,4989,5,305,0,0,4989,4990,5,1575,
        0,0,4990,4995,3,2274,1137,0,4991,4994,3,336,168,0,4992,4994,3,334,
        167,0,4993,4991,1,0,0,0,4993,4992,1,0,0,0,4994,4997,1,0,0,0,4995,
        4993,1,0,0,0,4995,4996,1,0,0,0,4996,333,1,0,0,0,4997,4995,1,0,0,
        0,4998,4999,5,665,0,0,4999,5000,5,154,0,0,5000,5015,5,2341,0,0,5001,
        5002,5,878,0,0,5002,5015,5,2341,0,0,5003,5015,5,1059,0,0,5004,5005,
        5,906,0,0,5005,5015,5,2341,0,0,5006,5015,5,1062,0,0,5007,5015,5,
        331,0,0,5008,5015,5,1027,0,0,5009,5010,5,158,0,0,5010,5015,5,2341,
        0,0,5011,5015,5,1010,0,0,5012,5015,5,1233,0,0,5013,5015,5,1077,0,
        0,5014,4998,1,0,0,0,5014,5001,1,0,0,0,5014,5003,1,0,0,0,5014,5004,
        1,0,0,0,5014,5006,1,0,0,0,5014,5007,1,0,0,0,5014,5008,1,0,0,0,5014,
        5009,1,0,0,0,5014,5011,1,0,0,0,5014,5012,1,0,0,0,5014,5013,1,0,0,
        0,5015,335,1,0,0,0,5016,5017,5,1654,0,0,5017,5018,5,2212,0,0,5018,
        5019,5,2341,0,0,5019,337,1,0,0,0,5020,5023,5,305,0,0,5021,5022,5,
        1237,0,0,5022,5024,5,1484,0,0,5023,5021,1,0,0,0,5023,5024,1,0,0,
        0,5024,5026,1,0,0,0,5025,5027,7,7,0,0,5026,5025,1,0,0,0,5026,5027,
        1,0,0,0,5027,5028,1,0,0,0,5028,5029,5,45,0,0,5029,5030,5,2190,0,
        0,5030,5034,3,2364,1182,0,5031,5032,5,1599,0,0,5032,5033,5,2369,
        0,0,5033,5035,7,21,0,0,5034,5031,1,0,0,0,5034,5035,1,0,0,0,5035,
        5039,1,0,0,0,5036,5038,3,340,170,0,5037,5036,1,0,0,0,5038,5041,1,
        0,0,0,5039,5037,1,0,0,0,5039,5040,1,0,0,0,5040,5043,1,0,0,0,5041,
        5039,1,0,0,0,5042,5044,3,350,175,0,5043,5042,1,0,0,0,5043,5044,1,
        0,0,0,5044,5046,1,0,0,0,5045,5047,3,352,176,0,5046,5045,1,0,0,0,
        5046,5047,1,0,0,0,5047,5049,1,0,0,0,5048,5050,3,360,180,0,5049,5048,
        1,0,0,0,5049,5050,1,0,0,0,5050,5052,1,0,0,0,5051,5053,3,370,185,
        0,5052,5051,1,0,0,0,5052,5053,1,0,0,0,5053,5055,1,0,0,0,5054,5056,
        3,372,186,0,5055,5054,1,0,0,0,5055,5056,1,0,0,0,5056,5058,1,0,0,
        0,5057,5059,3,374,187,0,5058,5057,1,0,0,0,5058,5059,1,0,0,0,5059,
        5061,1,0,0,0,5060,5062,3,384,192,0,5061,5060,1,0,0,0,5061,5062,1,
        0,0,0,5062,5064,1,0,0,0,5063,5065,3,386,193,0,5064,5063,1,0,0,0,
        5064,5065,1,0,0,0,5065,339,1,0,0,0,5066,5068,3,342,171,0,5067,5069,
        3,344,172,0,5068,5067,1,0,0,0,5068,5069,1,0,0,0,5069,5075,1,0,0,
        0,5070,5072,3,342,171,0,5071,5070,1,0,0,0,5071,5072,1,0,0,0,5072,
        5073,1,0,0,0,5073,5075,3,344,172,0,5074,5066,1,0,0,0,5074,5071,1,
        0,0,0,5075,5079,1,0,0,0,5076,5078,3,346,173,0,5077,5076,1,0,0,0,
        5078,5081,1,0,0,0,5079,5077,1,0,0,0,5079,5080,1,0,0,0,5080,5094,
        1,0,0,0,5081,5079,1,0,0,0,5082,5084,3,342,171,0,5083,5082,1,0,0,
        0,5083,5084,1,0,0,0,5084,5086,1,0,0,0,5085,5087,3,344,172,0,5086,
        5085,1,0,0,0,5086,5087,1,0,0,0,5087,5089,1,0,0,0,5088,5090,3,346,
        173,0,5089,5088,1,0,0,0,5090,5091,1,0,0,0,5091,5089,1,0,0,0,5091,
        5092,1,0,0,0,5092,5094,1,0,0,0,5093,5074,1,0,0,0,5093,5083,1,0,0,
        0,5094,341,1,0,0,0,5095,5096,5,169,0,0,5096,5097,3,2360,1180,0,5097,
        343,1,0,0,0,5098,5099,5,392,0,0,5099,5100,3,2360,1180,0,5100,345,
        1,0,0,0,5101,5102,5,197,0,0,5102,5105,3,2364,1182,0,5103,5104,5,
        2165,0,0,5104,5106,3,2360,1180,0,5105,5103,1,0,0,0,5105,5106,1,0,
        0,0,5106,5109,1,0,0,0,5107,5108,5,777,0,0,5108,5110,3,348,174,0,
        5109,5107,1,0,0,0,5109,5110,1,0,0,0,5110,347,1,0,0,0,5111,5114,5,
        1162,0,0,5112,5114,3,2364,1182,0,5113,5111,1,0,0,0,5113,5112,1,0,
        0,0,5114,349,1,0,0,0,5115,5119,5,2153,0,0,5116,5117,3,2244,1122,
        0,5117,5118,5,2340,0,0,5118,5120,1,0,0,0,5119,5116,1,0,0,0,5119,
        5120,1,0,0,0,5120,5121,1,0,0,0,5121,5123,3,2364,1182,0,5122,5124,
        5,1478,0,0,5123,5122,1,0,0,0,5123,5124,1,0,0,0,5124,5129,1,0,0,0,
        5125,5127,5,67,0,0,5126,5125,1,0,0,0,5126,5127,1,0,0,0,5127,5128,
        1,0,0,0,5128,5130,3,2364,1182,0,5129,5126,1,0,0,0,5129,5130,1,0,
        0,0,5130,351,1,0,0,0,5131,5132,5,398,0,0,5132,5133,5,154,0,0,5133,
        5134,5,2347,0,0,5134,5139,3,354,177,0,5135,5136,5,2353,0,0,5136,
        5138,3,354,177,0,5137,5135,1,0,0,0,5138,5141,1,0,0,0,5139,5137,1,
        0,0,0,5139,5140,1,0,0,0,5140,5142,1,0,0,0,5141,5139,1,0,0,0,5142,
        5143,5,2348,0,0,5143,353,1,0,0,0,5144,5148,3,356,178,0,5145,5147,
        3,340,170,0,5146,5145,1,0,0,0,5147,5150,1,0,0,0,5148,5146,1,0,0,
        0,5148,5149,1,0,0,0,5149,5151,1,0,0,0,5150,5148,1,0,0,0,5151,5179,
        5,770,0,0,5152,5156,5,2347,0,0,5153,5154,3,2364,1182,0,5154,5155,
        5,2340,0,0,5155,5157,1,0,0,0,5156,5153,1,0,0,0,5156,5157,1,0,0,0,
        5157,5158,1,0,0,0,5158,5168,3,2300,1150,0,5159,5163,5,2353,0,0,5160,
        5161,3,2364,1182,0,5161,5162,5,2340,0,0,5162,5164,1,0,0,0,5163,5160,
        1,0,0,0,5163,5164,1,0,0,0,5164,5165,1,0,0,0,5165,5167,3,2300,1150,
        0,5166,5159,1,0,0,0,5167,5170,1,0,0,0,5168,5166,1,0,0,0,5168,5169,
        1,0,0,0,5169,5171,1,0,0,0,5170,5168,1,0,0,0,5171,5172,5,2348,0,0,
        5172,5180,1,0,0,0,5173,5174,3,2364,1182,0,5174,5175,5,2340,0,0,5175,
        5177,1,0,0,0,5176,5173,1,0,0,0,5176,5177,1,0,0,0,5177,5178,1,0,0,
        0,5178,5180,3,2300,1150,0,5179,5152,1,0,0,0,5179,5176,1,0,0,0,5180,
        5181,1,0,0,0,5181,5183,5,1450,0,0,5182,5184,5,417,0,0,5183,5182,
        1,0,0,0,5183,5184,1,0,0,0,5184,5193,1,0,0,0,5185,5186,5,2347,0,0,
        5186,5187,3,2236,1118,0,5187,5188,5,2353,0,0,5188,5189,3,2236,1118,
        0,5189,5190,1,0,0,0,5190,5191,5,2348,0,0,5191,5194,1,0,0,0,5192,
        5194,3,2236,1118,0,5193,5185,1,0,0,0,5193,5192,1,0,0,0,5194,5195,
        1,0,0,0,5195,5196,5,632,0,0,5196,5197,5,2347,0,0,5197,5202,3,358,
        179,0,5198,5199,5,2353,0,0,5199,5201,3,358,179,0,5200,5198,1,0,0,
        0,5201,5204,1,0,0,0,5202,5200,1,0,0,0,5202,5203,1,0,0,0,5203,5205,
        1,0,0,0,5204,5202,1,0,0,0,5205,5206,5,2348,0,0,5206,355,1,0,0,0,
        5207,5208,3,2244,1122,0,5208,5209,5,2340,0,0,5209,5211,1,0,0,0,5210,
        5207,1,0,0,0,5210,5211,1,0,0,0,5211,5212,1,0,0,0,5212,5217,3,2364,
        1182,0,5213,5215,5,67,0,0,5214,5213,1,0,0,0,5214,5215,1,0,0,0,5215,
        5216,1,0,0,0,5216,5218,3,2364,1182,0,5217,5214,1,0,0,0,5217,5218,
        1,0,0,0,5218,357,1,0,0,0,5219,5220,3,2244,1122,0,5220,5221,5,2340,
        0,0,5221,5223,1,0,0,0,5222,5219,1,0,0,0,5222,5223,1,0,0,0,5223,5224,
        1,0,0,0,5224,5229,3,2364,1182,0,5225,5227,5,67,0,0,5226,5225,1,0,
        0,0,5226,5227,1,0,0,0,5227,5228,1,0,0,0,5228,5230,3,2364,1182,0,
        5229,5226,1,0,0,0,5229,5230,1,0,0,0,5230,5232,1,0,0,0,5231,5233,
        5,368,0,0,5232,5231,1,0,0,0,5232,5233,1,0,0,0,5233,359,1,0,0,0,5234,
        5235,5,880,0,0,5235,5236,5,2347,0,0,5236,5241,3,362,181,0,5237,5238,
        5,2353,0,0,5238,5240,3,362,181,0,5239,5237,1,0,0,0,5240,5243,1,0,
        0,0,5241,5239,1,0,0,0,5241,5242,1,0,0,0,5242,5244,1,0,0,0,5243,5241,
        1,0,0,0,5244,5245,5,2348,0,0,5245,361,1,0,0,0,5246,5249,3,2364,1182,
        0,5247,5250,3,364,182,0,5248,5250,3,368,184,0,5249,5247,1,0,0,0,
        5249,5248,1,0,0,0,5249,5250,1,0,0,0,5250,363,1,0,0,0,5251,5252,5,
        530,0,0,5252,5254,3,2364,1182,0,5253,5255,3,366,183,0,5254,5253,
        1,0,0,0,5254,5255,1,0,0,0,5255,365,1,0,0,0,5256,5257,5,35,0,0,5257,
        5258,5,154,0,0,5258,5259,3,2260,1130,0,5259,367,1,0,0,0,5260,5261,
        5,67,0,0,5261,5262,5,2347,0,0,5262,5263,3,2052,1026,0,5263,5264,
        5,2348,0,0,5264,369,1,0,0,0,5265,5266,5,368,0,0,5266,5267,5,879,
        0,0,5267,5268,3,2364,1182,0,5268,371,1,0,0,0,5269,5270,5,368,0,0,
        5270,5271,5,35,0,0,5271,5272,5,154,0,0,5272,5273,3,2260,1130,0,5273,
        373,1,0,0,0,5274,5275,5,158,0,0,5275,5280,3,376,188,0,5276,5277,
        5,2353,0,0,5277,5279,3,376,188,0,5278,5276,1,0,0,0,5279,5282,1,0,
        0,0,5280,5278,1,0,0,0,5280,5281,1,0,0,0,5281,375,1,0,0,0,5282,5280,
        1,0,0,0,5283,5284,5,879,0,0,5284,5304,5,609,0,0,5285,5305,5,38,0,
        0,5286,5287,5,2347,0,0,5287,5292,3,2364,1182,0,5288,5289,5,2353,
        0,0,5289,5291,3,2364,1182,0,5290,5288,1,0,0,0,5291,5294,1,0,0,0,
        5292,5290,1,0,0,0,5292,5293,1,0,0,0,5293,5295,1,0,0,0,5294,5292,
        1,0,0,0,5295,5296,5,2348,0,0,5296,5301,3,378,189,0,5297,5298,5,2353,
        0,0,5298,5300,3,378,189,0,5299,5297,1,0,0,0,5300,5303,1,0,0,0,5301,
        5299,1,0,0,0,5301,5302,1,0,0,0,5302,5305,1,0,0,0,5303,5301,1,0,0,
        0,5304,5285,1,0,0,0,5304,5286,1,0,0,0,5305,377,1,0,0,0,5306,5307,
        5,800,0,0,5307,5308,5,2347,0,0,5308,5313,3,380,190,0,5309,5310,5,
        2353,0,0,5310,5312,3,380,190,0,5311,5309,1,0,0,0,5312,5315,1,0,0,
        0,5313,5311,1,0,0,0,5313,5314,1,0,0,0,5314,5316,1,0,0,0,5315,5313,
        1,0,0,0,5316,5317,5,2348,0,0,5317,5318,3,382,191,0,5318,379,1,0,
        0,0,5319,5328,5,2347,0,0,5320,5321,3,2364,1182,0,5321,5322,5,2340,
        0,0,5322,5324,1,0,0,0,5323,5320,1,0,0,0,5323,5324,1,0,0,0,5324,5325,
        1,0,0,0,5325,5326,3,2364,1182,0,5326,5327,5,2340,0,0,5327,5329,1,
        0,0,0,5328,5323,1,0,0,0,5328,5329,1,0,0,0,5329,5330,1,0,0,0,5330,
        5331,3,2364,1182,0,5331,5332,5,2348,0,0,5332,381,1,0,0,0,5333,5345,
        5,446,0,0,5334,5342,5,865,0,0,5335,5339,5,2153,0,0,5336,5337,3,2244,
        1122,0,5337,5338,5,2340,0,0,5338,5340,1,0,0,0,5339,5336,1,0,0,0,
        5339,5340,1,0,0,0,5340,5341,1,0,0,0,5341,5343,3,2364,1182,0,5342,
        5335,1,0,0,0,5342,5343,1,0,0,0,5343,5345,1,0,0,0,5344,5333,1,0,0,
        0,5344,5334,1,0,0,0,5345,383,1,0,0,0,5346,5347,5,530,0,0,5347,5348,
        5,226,0,0,5348,5363,3,2300,1150,0,5349,5351,5,67,0,0,5350,5349,1,
        0,0,0,5350,5351,1,0,0,0,5351,5352,1,0,0,0,5352,5360,3,2364,1182,
        0,5353,5355,5,2353,0,0,5354,5356,5,67,0,0,5355,5354,1,0,0,0,5355,
        5356,1,0,0,0,5356,5357,1,0,0,0,5357,5359,3,2364,1182,0,5358,5353,
        1,0,0,0,5359,5362,1,0,0,0,5360,5358,1,0,0,0,5360,5361,1,0,0,0,5361,
        5364,1,0,0,0,5362,5360,1,0,0,0,5363,5350,1,0,0,0,5363,5364,1,0,0,
        0,5364,385,1,0,0,0,5365,5366,5,467,0,0,5366,5367,5,1409,0,0,5367,
        5369,5,2059,0,0,5368,5370,7,48,0,0,5369,5368,1,0,0,0,5369,5370,1,
        0,0,0,5370,387,1,0,0,0,5371,5374,5,305,0,0,5372,5373,5,1237,0,0,
        5373,5375,5,1484,0,0,5374,5372,1,0,0,0,5374,5375,1,0,0,0,5375,5377,
        1,0,0,0,5376,5378,7,7,0,0,5377,5376,1,0,0,0,5377,5378,1,0,0,0,5378,
        5379,1,0,0,0,5379,5380,5,81,0,0,5380,5384,5,398,0,0,5381,5382,3,
        2244,1122,0,5382,5383,5,2340,0,0,5383,5385,1,0,0,0,5384,5381,1,0,
        0,0,5384,5385,1,0,0,0,5385,5386,1,0,0,0,5386,5390,3,2364,1182,0,
        5387,5388,5,1599,0,0,5388,5389,5,2369,0,0,5389,5391,7,21,0,0,5390,
        5387,1,0,0,0,5390,5391,1,0,0,0,5391,5395,1,0,0,0,5392,5394,3,340,
        170,0,5393,5392,1,0,0,0,5394,5397,1,0,0,0,5395,5393,1,0,0,0,5395,
        5396,1,0,0,0,5396,5401,1,0,0,0,5397,5395,1,0,0,0,5398,5399,5,398,
        0,0,5399,5400,5,2076,0,0,5400,5402,7,49,0,0,5401,5398,1,0,0,0,5401,
        5402,1,0,0,0,5402,5403,1,0,0,0,5403,5404,3,390,195,0,5404,5406,3,
        400,200,0,5405,5407,3,404,202,0,5406,5405,1,0,0,0,5407,5408,1,0,
        0,0,5408,5406,1,0,0,0,5408,5409,1,0,0,0,5409,5411,1,0,0,0,5410,5412,
        3,412,206,0,5411,5410,1,0,0,0,5411,5412,1,0,0,0,5412,389,1,0,0,0,
        5413,5414,5,2153,0,0,5414,5419,3,392,196,0,5415,5416,5,2353,0,0,
        5416,5418,3,392,196,0,5417,5415,1,0,0,0,5418,5421,1,0,0,0,5419,5417,
        1,0,0,0,5419,5420,1,0,0,0,5420,5425,1,0,0,0,5421,5419,1,0,0,0,5422,
        5424,3,394,197,0,5423,5422,1,0,0,0,5424,5427,1,0,0,0,5425,5423,1,
        0,0,0,5425,5426,1,0,0,0,5426,391,1,0,0,0,5427,5425,1,0,0,0,5428,
        5429,3,2244,1122,0,5429,5430,5,2340,0,0,5430,5432,1,0,0,0,5431,5428,
        1,0,0,0,5431,5432,1,0,0,0,5432,5433,1,0,0,0,5433,5435,3,2364,1182,
        0,5434,5436,5,1478,0,0,5435,5434,1,0,0,0,5435,5436,1,0,0,0,5436,
        5441,1,0,0,0,5437,5439,5,67,0,0,5438,5437,1,0,0,0,5438,5439,1,0,
        0,0,5439,5440,1,0,0,0,5440,5442,3,2364,1182,0,5441,5438,1,0,0,0,
        5441,5442,1,0,0,0,5442,393,1,0,0,0,5443,5444,5,748,0,0,5444,5445,
        5,1290,0,0,5445,5446,3,2364,1182,0,5446,5447,5,1193,0,0,5447,5448,
        3,396,198,0,5448,395,1,0,0,0,5449,5454,3,398,199,0,5450,5451,5,49,
        0,0,5451,5453,3,398,199,0,5452,5450,1,0,0,0,5453,5456,1,0,0,0,5454,
        5452,1,0,0,0,5454,5455,1,0,0,0,5455,397,1,0,0,0,5456,5454,1,0,0,
        0,5457,5458,3,2364,1182,0,5458,5459,5,2340,0,0,5459,5461,1,0,0,0,
        5460,5457,1,0,0,0,5460,5461,1,0,0,0,5461,5462,1,0,0,0,5462,5463,
        3,2300,1150,0,5463,5467,5,2369,0,0,5464,5465,3,2364,1182,0,5465,
        5466,5,2340,0,0,5466,5468,1,0,0,0,5467,5464,1,0,0,0,5467,5468,1,
        0,0,0,5468,5469,1,0,0,0,5469,5470,3,2300,1150,0,5470,399,1,0,0,0,
        5471,5472,5,82,0,0,5472,5473,5,2347,0,0,5473,5478,3,402,201,0,5474,
        5475,5,2353,0,0,5475,5477,3,402,201,0,5476,5474,1,0,0,0,5477,5480,
        1,0,0,0,5478,5476,1,0,0,0,5478,5479,1,0,0,0,5479,5481,1,0,0,0,5480,
        5478,1,0,0,0,5481,5482,5,2348,0,0,5482,401,1,0,0,0,5483,5484,3,2364,
        1182,0,5484,5485,5,2340,0,0,5485,5487,1,0,0,0,5486,5483,1,0,0,0,
        5486,5487,1,0,0,0,5487,5488,1,0,0,0,5488,5493,3,2300,1150,0,5489,
        5491,5,67,0,0,5490,5489,1,0,0,0,5490,5491,1,0,0,0,5491,5492,1,0,
        0,0,5492,5494,3,2364,1182,0,5493,5490,1,0,0,0,5493,5494,1,0,0,0,
        5494,5498,1,0,0,0,5495,5497,3,340,170,0,5496,5495,1,0,0,0,5497,5500,
        1,0,0,0,5498,5496,1,0,0,0,5498,5499,1,0,0,0,5499,403,1,0,0,0,5500,
        5498,1,0,0,0,5501,5502,5,798,0,0,5502,5508,3,2364,1182,0,5503,5504,
        5,1138,0,0,5504,5509,5,1162,0,0,5505,5506,5,1619,0,0,5506,5507,5,
        2204,0,0,5507,5509,5,1162,0,0,5508,5503,1,0,0,0,5508,5505,1,0,0,
        0,5508,5509,1,0,0,0,5509,5513,1,0,0,0,5510,5511,5,798,0,0,5511,5512,
        5,2076,0,0,5512,5514,7,50,0,0,5513,5510,1,0,0,0,5513,5514,1,0,0,
        0,5514,5518,1,0,0,0,5515,5517,3,340,170,0,5516,5515,1,0,0,0,5517,
        5520,1,0,0,0,5518,5516,1,0,0,0,5518,5519,1,0,0,0,5519,5521,1,0,0,
        0,5520,5518,1,0,0,0,5521,5523,3,406,203,0,5522,5524,3,408,204,0,
        5523,5522,1,0,0,0,5523,5524,1,0,0,0,5524,5528,1,0,0,0,5525,5526,
        5,882,0,0,5526,5527,5,943,0,0,5527,5529,3,2052,1026,0,5528,5525,
        1,0,0,0,5528,5529,1,0,0,0,5529,5533,1,0,0,0,5530,5531,5,882,0,0,
        5531,5532,5,169,0,0,5532,5534,3,2052,1026,0,5533,5530,1,0,0,0,5533,
        5534,1,0,0,0,5534,5538,1,0,0,0,5535,5536,5,882,0,0,5536,5537,5,392,
        0,0,5537,5539,3,2052,1026,0,5538,5535,1,0,0,0,5538,5539,1,0,0,0,
        5539,5556,1,0,0,0,5540,5541,5,1233,0,0,5541,5543,5,154,0,0,5542,
        5544,7,51,0,0,5543,5542,1,0,0,0,5543,5544,1,0,0,0,5544,5545,1,0,
        0,0,5545,5553,3,410,205,0,5546,5548,5,2353,0,0,5547,5549,7,51,0,
        0,5548,5547,1,0,0,0,5548,5549,1,0,0,0,5549,5550,1,0,0,0,5550,5552,
        3,410,205,0,5551,5546,1,0,0,0,5552,5555,1,0,0,0,5553,5551,1,0,0,
        0,5553,5554,1,0,0,0,5554,5557,1,0,0,0,5555,5553,1,0,0,0,5556,5540,
        1,0,0,0,5556,5557,1,0,0,0,5557,5570,1,0,0,0,5558,5559,5,395,0,0,
        5559,5560,5,2347,0,0,5560,5565,3,2364,1182,0,5561,5562,5,2353,0,
        0,5562,5564,3,2364,1182,0,5563,5561,1,0,0,0,5564,5567,1,0,0,0,5565,
        5563,1,0,0,0,5565,5566,1,0,0,0,5566,5568,1,0,0,0,5567,5565,1,0,0,
        0,5568,5569,5,2348,0,0,5569,5571,1,0,0,0,5570,5558,1,0,0,0,5570,
        5571,1,0,0,0,5571,405,1,0,0,0,5572,5585,5,770,0,0,5573,5586,3,2364,
        1182,0,5574,5575,5,2347,0,0,5575,5580,3,2364,1182,0,5576,5577,5,
        2353,0,0,5577,5579,3,2364,1182,0,5578,5576,1,0,0,0,5579,5582,1,0,
        0,0,5580,5578,1,0,0,0,5580,5581,1,0,0,0,5581,5583,1,0,0,0,5582,5580,
        1,0,0,0,5583,5584,5,2348,0,0,5584,5586,1,0,0,0,5585,5573,1,0,0,0,
        5585,5574,1,0,0,0,5586,407,1,0,0,0,5587,5588,5,43,0,0,5588,5589,
        3,406,203,0,5589,409,1,0,0,0,5590,5592,3,2364,1182,0,5591,5593,7,
        52,0,0,5592,5591,1,0,0,0,5592,5593,1,0,0,0,5593,5596,1,0,0,0,5594,
        5595,5,1163,0,0,5595,5597,7,53,0,0,5596,5594,1,0,0,0,5596,5597,1,
        0,0,0,5597,411,1,0,0,0,5598,5599,5,38,0,0,5599,5616,5,882,0,0,5600,
        5601,5,943,0,0,5601,5605,3,2052,1026,0,5602,5603,5,882,0,0,5603,
        5604,5,169,0,0,5604,5606,3,2052,1026,0,5605,5602,1,0,0,0,5605,5606,
        1,0,0,0,5606,5617,1,0,0,0,5607,5608,5,169,0,0,5608,5612,3,2052,1026,
        0,5609,5610,5,882,0,0,5610,5611,5,392,0,0,5611,5613,3,2052,1026,
        0,5612,5609,1,0,0,0,5612,5613,1,0,0,0,5613,5617,1,0,0,0,5614,5615,
        5,392,0,0,5615,5617,3,2052,1026,0,5616,5600,1,0,0,0,5616,5607,1,
        0,0,0,5616,5614,1,0,0,0,5617,413,1,0,0,0,5618,5619,5,305,0,0,5619,
        5620,5,83,0,0,5620,5621,5,1339,0,0,5621,5623,3,2364,1182,0,5622,
        5624,3,416,208,0,5623,5622,1,0,0,0,5623,5624,1,0,0,0,5624,5626,1,
        0,0,0,5625,5627,3,418,209,0,5626,5625,1,0,0,0,5626,5627,1,0,0,0,
        5627,5629,1,0,0,0,5628,5630,3,434,217,0,5629,5628,1,0,0,0,5629,5630,
        1,0,0,0,5630,5637,1,0,0,0,5631,5632,5,2204,0,0,5632,5633,3,2360,
        1180,0,5633,5634,5,493,0,0,5634,5635,5,1317,0,0,5635,5636,7,54,0,
        0,5636,5638,1,0,0,0,5637,5631,1,0,0,0,5637,5638,1,0,0,0,5638,5641,
        1,0,0,0,5639,5640,5,1192,0,0,5640,5642,5,2046,0,0,5641,5639,1,0,
        0,0,5641,5642,1,0,0,0,5642,5644,1,0,0,0,5643,5645,3,774,387,0,5644,
        5643,1,0,0,0,5644,5645,1,0,0,0,5645,415,1,0,0,0,5646,5647,5,1384,
        0,0,5647,5652,3,2352,1176,0,5648,5649,5,2353,0,0,5649,5651,3,2352,
        1176,0,5650,5648,1,0,0,0,5651,5654,1,0,0,0,5652,5650,1,0,0,0,5652,
        5653,1,0,0,0,5653,417,1,0,0,0,5654,5652,1,0,0,0,5655,5659,3,422,
        211,0,5656,5659,3,430,215,0,5657,5659,3,420,210,0,5658,5655,1,0,
        0,0,5658,5656,1,0,0,0,5658,5657,1,0,0,0,5659,5660,1,0,0,0,5660,5658,
        1,0,0,0,5660,5661,1,0,0,0,5661,419,1,0,0,0,5662,5663,5,12,0,0,5663,
        5668,3,2352,1176,0,5664,5665,5,2353,0,0,5665,5667,3,2352,1176,0,
        5666,5664,1,0,0,0,5667,5670,1,0,0,0,5668,5666,1,0,0,0,5668,5669,
        1,0,0,0,5669,421,1,0,0,0,5670,5668,1,0,0,0,5671,5672,5,12,0,0,5672,
        5677,3,424,212,0,5673,5674,5,2353,0,0,5674,5676,3,424,212,0,5675,
        5673,1,0,0,0,5676,5679,1,0,0,0,5677,5675,1,0,0,0,5677,5678,1,0,0,
        0,5678,423,1,0,0,0,5679,5677,1,0,0,0,5680,5683,3,426,213,0,5681,
        5683,5,38,0,0,5682,5680,1,0,0,0,5682,5681,1,0,0,0,5683,5684,1,0,
        0,0,5684,5697,5,1193,0,0,5685,5686,5,401,0,0,5686,5698,3,794,397,
        0,5687,5688,5,901,0,0,5688,5690,5,917,0,0,5689,5687,1,0,0,0,5689,
        5690,1,0,0,0,5690,5694,1,0,0,0,5691,5692,3,2244,1122,0,5692,5693,
        5,2340,0,0,5693,5695,1,0,0,0,5694,5691,1,0,0,0,5694,5695,1,0,0,0,
        5695,5696,1,0,0,0,5696,5698,3,2364,1182,0,5697,5685,1,0,0,0,5697,
        5689,1,0,0,0,5698,5704,1,0,0,0,5699,5702,3,428,214,0,5700,5702,5,
        38,0,0,5701,5699,1,0,0,0,5701,5700,1,0,0,0,5702,5704,1,0,0,0,5703,
        5682,1,0,0,0,5703,5701,1,0,0,0,5704,425,1,0,0,0,5705,5706,7,55,0,
        0,5706,427,1,0,0,0,5707,5715,3,2364,1182,0,5708,5709,7,56,0,0,5709,
        5715,5,746,0,0,5710,5711,5,829,0,0,5711,5715,5,1999,0,0,5712,5713,
        7,57,0,0,5713,5715,5,401,0,0,5714,5707,1,0,0,0,5714,5708,1,0,0,0,
        5714,5710,1,0,0,0,5714,5712,1,0,0,0,5715,429,1,0,0,0,5716,5717,5,
        12,0,0,5717,5718,5,240,0,0,5718,5744,5,2369,0,0,5719,5720,7,58,0,
        0,5720,5725,3,432,216,0,5721,5722,5,2353,0,0,5722,5724,3,432,216,
        0,5723,5721,1,0,0,0,5724,5727,1,0,0,0,5725,5723,1,0,0,0,5725,5726,
        1,0,0,0,5726,5745,1,0,0,0,5727,5725,1,0,0,0,5728,5729,5,445,0,0,
        5729,5730,3,432,216,0,5730,5731,5,1193,0,0,5731,5739,3,2364,1182,
        0,5732,5733,5,2353,0,0,5733,5734,3,432,216,0,5734,5735,5,1193,0,
        0,5735,5736,3,2364,1182,0,5736,5738,1,0,0,0,5737,5732,1,0,0,0,5738,
        5741,1,0,0,0,5739,5737,1,0,0,0,5739,5740,1,0,0,0,5740,5745,1,0,0,
        0,5741,5739,1,0,0,0,5742,5743,5,1395,0,0,5743,5745,7,59,0,0,5744,
        5719,1,0,0,0,5744,5728,1,0,0,0,5744,5742,1,0,0,0,5745,431,1,0,0,
        0,5746,5747,3,2364,1182,0,5747,433,1,0,0,0,5748,5749,5,1517,0,0,
        5749,5754,3,2266,1133,0,5750,5751,5,2353,0,0,5751,5753,3,2266,1133,
        0,5752,5750,1,0,0,0,5753,5756,1,0,0,0,5754,5752,1,0,0,0,5754,5755,
        1,0,0,0,5755,435,1,0,0,0,5756,5754,1,0,0,0,5757,5758,5,305,0,0,5758,
        5760,5,283,0,0,5759,5761,5,1509,0,0,5760,5759,1,0,0,0,5760,5761,
        1,0,0,0,5761,5763,1,0,0,0,5762,5764,5,1590,0,0,5763,5762,1,0,0,0,
        5763,5764,1,0,0,0,5764,5765,1,0,0,0,5765,5766,5,333,0,0,5766,5768,
        3,2364,1182,0,5767,5769,3,440,220,0,5768,5767,1,0,0,0,5768,5769,
        1,0,0,0,5769,5770,1,0,0,0,5770,5780,7,60,0,0,5771,5772,5,335,0,0,
        5772,5777,3,444,222,0,5773,5774,5,2353,0,0,5774,5776,3,444,222,0,
        5775,5773,1,0,0,0,5776,5779,1,0,0,0,5777,5775,1,0,0,0,5777,5778,
        1,0,0,0,5778,5781,1,0,0,0,5779,5777,1,0,0,0,5780,5771,1,0,0,0,5780,
        5781,1,0,0,0,5781,5785,1,0,0,0,5782,5784,3,438,219,0,5783,5782,1,
        0,0,0,5784,5787,1,0,0,0,5785,5783,1,0,0,0,5785,5786,1,0,0,0,5786,
        5789,1,0,0,0,5787,5785,1,0,0,0,5788,5790,3,442,221,0,5789,5788,1,
        0,0,0,5789,5790,1,0,0,0,5790,437,1,0,0,0,5791,5792,5,872,0,0,5792,
        5816,3,2356,1178,0,5793,5794,5,874,0,0,5794,5816,3,2356,1178,0,5795,
        5796,5,873,0,0,5796,5816,3,2356,1178,0,5797,5798,5,868,0,0,5798,
        5816,3,2356,1178,0,5799,5800,5,871,0,0,5800,5816,3,2356,1178,0,5801,
        5816,5,65,0,0,5802,5816,5,1003,0,0,5803,5804,5,576,0,0,5804,5816,
        5,832,0,0,5805,5806,5,1590,0,0,5806,5807,5,1651,0,0,5807,5808,5,
        1057,0,0,5808,5813,5,580,0,0,5809,5810,5,334,0,0,5810,5814,5,96,
        0,0,5811,5812,5,816,0,0,5812,5814,5,1312,0,0,5813,5809,1,0,0,0,5813,
        5811,1,0,0,0,5814,5816,1,0,0,0,5815,5791,1,0,0,0,5815,5793,1,0,0,
        0,5815,5795,1,0,0,0,5815,5797,1,0,0,0,5815,5799,1,0,0,0,5815,5801,
        1,0,0,0,5815,5802,1,0,0,0,5815,5803,1,0,0,0,5815,5805,1,0,0,0,5816,
        439,1,0,0,0,5817,5822,5,830,0,0,5818,5820,5,609,0,0,5819,5818,1,
        0,0,0,5819,5820,1,0,0,0,5820,5821,1,0,0,0,5821,5823,3,2356,1178,
        0,5822,5819,1,0,0,0,5822,5823,1,0,0,0,5823,5824,1,0,0,0,5824,5835,
        3,444,222,0,5825,5830,5,2353,0,0,5826,5828,5,609,0,0,5827,5826,1,
        0,0,0,5827,5828,1,0,0,0,5828,5829,1,0,0,0,5829,5831,3,2356,1178,
        0,5830,5827,1,0,0,0,5830,5831,1,0,0,0,5831,5832,1,0,0,0,5832,5834,
        3,444,222,0,5833,5825,1,0,0,0,5834,5837,1,0,0,0,5835,5833,1,0,0,
        0,5835,5836,1,0,0,0,5836,441,1,0,0,0,5837,5835,1,0,0,0,5838,5839,
        5,185,0,0,5839,5840,5,1590,0,0,5840,5841,3,2364,1182,0,5841,443,
        1,0,0,0,5842,5845,3,926,463,0,5843,5845,3,928,464,0,5844,5842,1,
        0,0,0,5844,5843,1,0,0,0,5845,445,1,0,0,0,5846,5847,5,305,0,0,5847,
        5848,5,413,0,0,5848,5861,3,2364,1182,0,5849,5859,5,634,0,0,5850,
        5859,5,1115,0,0,5851,5859,5,569,0,0,5852,5855,5,2276,0,0,5853,5854,
        5,1606,0,0,5854,5856,3,2364,1182,0,5855,5853,1,0,0,0,5855,5856,1,
        0,0,0,5856,5859,1,0,0,0,5857,5859,5,523,0,0,5858,5849,1,0,0,0,5858,
        5850,1,0,0,0,5858,5851,1,0,0,0,5858,5852,1,0,0,0,5858,5857,1,0,0,
        0,5859,5860,1,0,0,0,5860,5862,5,1446,0,0,5861,5858,1,0,0,0,5861,
        5862,1,0,0,0,5862,5879,1,0,0,0,5863,5865,3,88,44,0,5864,5863,1,0,
        0,0,5864,5865,1,0,0,0,5865,5868,1,0,0,0,5866,5867,5,535,0,0,5867,
        5869,3,2364,1182,0,5868,5866,1,0,0,0,5868,5869,1,0,0,0,5869,5870,
        1,0,0,0,5870,5871,5,412,0,0,5871,5876,3,448,224,0,5872,5873,5,2353,
        0,0,5873,5875,3,448,224,0,5874,5872,1,0,0,0,5875,5878,1,0,0,0,5876,
        5874,1,0,0,0,5876,5877,1,0,0,0,5877,5880,1,0,0,0,5878,5876,1,0,0,
        0,5879,5864,1,0,0,0,5880,5881,1,0,0,0,5881,5879,1,0,0,0,5881,5882,
        1,0,0,0,5882,5896,1,0,0,0,5883,5884,5,81,0,0,5884,5885,5,2343,0,
        0,5885,5886,5,2369,0,0,5886,5893,5,2343,0,0,5887,5888,5,2353,0,0,
        5888,5889,5,2343,0,0,5889,5890,5,2369,0,0,5890,5892,5,2343,0,0,5891,
        5887,1,0,0,0,5892,5895,1,0,0,0,5893,5891,1,0,0,0,5893,5894,1,0,0,
        0,5894,5897,1,0,0,0,5895,5893,1,0,0,0,5896,5883,1,0,0,0,5896,5897,
        1,0,0,0,5897,447,1,0,0,0,5898,5901,5,2343,0,0,5899,5900,5,943,0,
        0,5900,5902,3,2364,1182,0,5901,5899,1,0,0,0,5901,5902,1,0,0,0,5902,
        5905,1,0,0,0,5903,5904,5,1617,0,0,5904,5906,3,1182,591,0,5905,5903,
        1,0,0,0,5905,5906,1,0,0,0,5906,5908,1,0,0,0,5907,5909,3,38,19,0,
        5908,5907,1,0,0,0,5908,5909,1,0,0,0,5909,449,1,0,0,0,5910,5911,5,
        305,0,0,5911,5912,5,452,0,0,5912,5917,3,2364,1182,0,5913,5914,5,
        67,0,0,5914,5915,5,192,0,0,5915,5916,5,1180,0,0,5916,5918,3,2364,
        1182,0,5917,5913,1,0,0,0,5917,5918,1,0,0,0,5918,451,1,0,0,0,5919,
        5920,5,305,0,0,5920,5921,5,565,0,0,5921,5923,5,63,0,0,5922,5924,
        5,368,0,0,5923,5922,1,0,0,0,5923,5924,1,0,0,0,5924,5925,1,0,0,0,
        5925,5926,3,2364,1182,0,5926,5927,5,1996,0,0,5927,5929,3,2364,1182,
        0,5928,5930,3,454,227,0,5929,5928,1,0,0,0,5929,5930,1,0,0,0,5930,
        5936,1,0,0,0,5931,5933,5,1074,0,0,5932,5931,1,0,0,0,5932,5933,1,
        0,0,0,5933,5934,1,0,0,0,5934,5935,5,1203,0,0,5935,5937,5,334,0,0,
        5936,5932,1,0,0,0,5936,5937,1,0,0,0,5937,5938,1,0,0,0,5938,5939,
        3,456,228,0,5939,453,1,0,0,0,5940,5941,5,1415,0,0,5941,5942,5,2341,
        0,0,5942,5943,7,61,0,0,5943,455,1,0,0,0,5944,5945,5,1505,0,0,5945,
        5946,5,2341,0,0,5946,5947,7,62,0,0,5947,457,1,0,0,0,5948,5951,5,
        305,0,0,5949,5950,5,1237,0,0,5950,5952,5,1484,0,0,5951,5949,1,0,
        0,0,5951,5952,1,0,0,0,5952,5957,1,0,0,0,5953,5955,5,1074,0,0,5954,
        5953,1,0,0,0,5954,5955,1,0,0,0,5955,5956,1,0,0,0,5956,5958,5,576,
        0,0,5957,5954,1,0,0,0,5957,5958,1,0,0,0,5958,5959,1,0,0,0,5959,5963,
        5,633,0,0,5960,5961,3,2244,1122,0,5961,5962,5,2340,0,0,5962,5964,
        1,0,0,0,5963,5960,1,0,0,0,5963,5964,1,0,0,0,5964,5965,1,0,0,0,5965,
        5969,3,2364,1182,0,5966,5967,5,1599,0,0,5967,5968,5,2369,0,0,5968,
        5970,7,21,0,0,5969,5966,1,0,0,0,5969,5970,1,0,0,0,5970,5974,1,0,
        0,0,5971,5973,3,340,170,0,5972,5971,1,0,0,0,5973,5976,1,0,0,0,5974,
        5972,1,0,0,0,5974,5975,1,0,0,0,5975,5977,1,0,0,0,5976,5974,1,0,0,
        0,5977,5978,3,460,230,0,5978,5980,3,462,231,0,5979,5981,3,464,232,
        0,5980,5979,1,0,0,0,5980,5981,1,0,0,0,5981,459,1,0,0,0,5982,5986,
        5,2153,0,0,5983,5984,3,2244,1122,0,5984,5985,5,2340,0,0,5985,5987,
        1,0,0,0,5986,5983,1,0,0,0,5986,5987,1,0,0,0,5987,5988,1,0,0,0,5988,
        5989,3,2364,1182,0,5989,461,1,0,0,0,5990,5996,5,2347,0,0,5991,5994,
        3,2364,1182,0,5992,5993,5,192,0,0,5993,5995,5,1180,0,0,5994,5992,
        1,0,0,0,5994,5995,1,0,0,0,5995,5997,1,0,0,0,5996,5991,1,0,0,0,5997,
        5998,1,0,0,0,5998,5996,1,0,0,0,5998,5999,1,0,0,0,5999,6000,1,0,0,
        0,6000,6001,5,2348,0,0,6001,463,1,0,0,0,6002,6003,5,631,0,0,6003,
        6004,5,82,0,0,6004,6005,5,2347,0,0,6005,6006,3,466,233,0,6006,6007,
        5,2348,0,0,6007,465,1,0,0,0,6008,6012,3,468,234,0,6009,6011,3,340,
        170,0,6010,6009,1,0,0,0,6011,6014,1,0,0,0,6012,6010,1,0,0,0,6012,
        6013,1,0,0,0,6013,467,1,0,0,0,6014,6012,1,0,0,0,6015,6016,7,63,0,
        0,6016,469,1,0,0,0,6017,6019,5,305,0,0,6018,6020,7,64,0,0,6019,6018,
        1,0,0,0,6019,6020,1,0,0,0,6020,6021,1,0,0,0,6021,6022,5,675,0,0,
        6022,6026,3,2286,1143,0,6023,6024,5,650,0,0,6024,6025,5,1138,0,0,
        6025,6027,5,508,0,0,6026,6023,1,0,0,0,6026,6027,1,0,0,0,6027,6028,
        1,0,0,0,6028,6032,5,1193,0,0,6029,6033,3,472,236,0,6030,6033,3,476,
        238,0,6031,6033,3,478,239,0,6032,6029,1,0,0,0,6032,6030,1,0,0,0,
        6032,6031,1,0,0,0,6033,6035,1,0,0,0,6034,6036,7,65,0,0,6035,6034,
        1,0,0,0,6035,6036,1,0,0,0,6036,6039,1,0,0,0,6037,6038,7,66,0,0,6038,
        6040,5,737,0,0,6039,6037,1,0,0,0,6039,6040,1,0,0,0,6040,471,1,0,
        0,0,6041,6042,5,210,0,0,6042,6044,3,474,237,0,6043,6045,3,1544,772,
        0,6044,6043,1,0,0,0,6044,6045,1,0,0,0,6045,473,1,0,0,0,6046,6047,
        3,2364,1182,0,6047,6048,5,2340,0,0,6048,6050,1,0,0,0,6049,6046,1,
        0,0,0,6049,6050,1,0,0,0,6050,6051,1,0,0,0,6051,6052,3,2364,1182,
        0,6052,475,1,0,0,0,6053,6055,3,2302,1151,0,6054,6056,3,2224,1112,
        0,6055,6054,1,0,0,0,6055,6056,1,0,0,0,6056,6057,1,0,0,0,6057,6058,
        5,2347,0,0,6058,6060,3,480,240,0,6059,6061,7,52,0,0,6060,6059,1,
        0,0,0,6060,6061,1,0,0,0,6061,6069,1,0,0,0,6062,6063,5,2353,0,0,6063,
        6065,3,480,240,0,6064,6066,7,52,0,0,6065,6064,1,0,0,0,6065,6066,
        1,0,0,0,6066,6068,1,0,0,0,6067,6062,1,0,0,0,6068,6071,1,0,0,0,6069,
        6067,1,0,0,0,6069,6070,1,0,0,0,6070,6072,1,0,0,0,6071,6069,1,0,0,
        0,6072,6074,5,2348,0,0,6073,6075,3,482,241,0,6074,6073,1,0,0,0,6074,
        6075,1,0,0,0,6075,477,1,0,0,0,6076,6077,3,2302,1151,0,6077,6080,
        5,2347,0,0,6078,6081,3,2302,1151,0,6079,6081,3,2224,1112,0,6080,
        6078,1,0,0,0,6080,6079,1,0,0,0,6080,6081,1,0,0,0,6081,6082,1,0,0,
        0,6082,6084,3,2300,1150,0,6083,6085,7,52,0,0,6084,6083,1,0,0,0,6084,
        6085,1,0,0,0,6085,6097,1,0,0,0,6086,6089,5,2353,0,0,6087,6090,3,
        2302,1151,0,6088,6090,3,2224,1112,0,6089,6087,1,0,0,0,6089,6088,
        1,0,0,0,6089,6090,1,0,0,0,6090,6091,1,0,0,0,6091,6093,3,2300,1150,
        0,6092,6094,7,52,0,0,6093,6092,1,0,0,0,6093,6094,1,0,0,0,6094,6096,
        1,0,0,0,6095,6086,1,0,0,0,6096,6099,1,0,0,0,6097,6095,1,0,0,0,6097,
        6098,1,0,0,0,6098,6100,1,0,0,0,6099,6097,1,0,0,0,6100,6101,5,2348,
        0,0,6101,6102,5,588,0,0,6102,6103,3,2302,1151,0,6103,6110,3,2224,
        1112,0,6104,6105,5,2353,0,0,6105,6106,3,2302,1151,0,6106,6107,3,
        2224,1112,0,6107,6109,1,0,0,0,6108,6104,1,0,0,0,6109,6112,1,0,0,
        0,6110,6108,1,0,0,0,6110,6111,1,0,0,0,6111,6113,1,0,0,0,6112,6110,
        1,0,0,0,6113,6115,3,2226,1113,0,6114,6116,3,498,249,0,6115,6114,
        1,0,0,0,6115,6116,1,0,0,0,6116,6118,1,0,0,0,6117,6119,3,1544,772,
        0,6118,6117,1,0,0,0,6118,6119,1,0,0,0,6119,479,1,0,0,0,6120,6123,
        3,2300,1150,0,6121,6123,3,2052,1026,0,6122,6120,1,0,0,0,6122,6121,
        1,0,0,0,6123,481,1,0,0,0,6124,6128,3,492,246,0,6125,6128,3,498,249,
        0,6126,6128,3,1544,772,0,6127,6124,1,0,0,0,6127,6125,1,0,0,0,6127,
        6126,1,0,0,0,6128,6129,1,0,0,0,6129,6127,1,0,0,0,6129,6130,1,0,0,
        0,6130,6138,1,0,0,0,6131,6132,5,689,0,0,6132,6135,5,740,0,0,6133,
        6136,3,484,242,0,6134,6136,3,488,244,0,6135,6133,1,0,0,0,6135,6134,
        1,0,0,0,6136,6138,1,0,0,0,6137,6127,1,0,0,0,6137,6131,1,0,0,0,6138,
        483,1,0,0,0,6139,6141,3,520,260,0,6140,6142,3,486,243,0,6141,6140,
        1,0,0,0,6141,6142,1,0,0,0,6142,6144,1,0,0,0,6143,6145,3,936,468,
        0,6144,6143,1,0,0,0,6144,6145,1,0,0,0,6145,6151,1,0,0,0,6146,6147,
        5,1263,0,0,6147,6148,5,2347,0,0,6148,6149,3,518,259,0,6149,6150,
        5,2348,0,0,6150,6152,1,0,0,0,6151,6146,1,0,0,0,6151,6152,1,0,0,0,
        6152,485,1,0,0,0,6153,6181,5,821,0,0,6154,6155,5,2347,0,0,6155,6156,
        5,1275,0,0,6156,6162,3,1652,826,0,6157,6158,5,1263,0,0,6158,6159,
        5,2347,0,0,6159,6160,3,518,259,0,6160,6161,5,2348,0,0,6161,6163,
        1,0,0,0,6162,6157,1,0,0,0,6162,6163,1,0,0,0,6163,6176,1,0,0,0,6164,
        6165,5,2353,0,0,6165,6166,5,1275,0,0,6166,6172,3,1652,826,0,6167,
        6168,5,1263,0,0,6168,6169,5,2347,0,0,6169,6170,3,518,259,0,6170,
        6171,5,2348,0,0,6171,6173,1,0,0,0,6172,6167,1,0,0,0,6172,6173,1,
        0,0,0,6173,6175,1,0,0,0,6174,6164,1,0,0,0,6175,6178,1,0,0,0,6176,
        6174,1,0,0,0,6176,6177,1,0,0,0,6177,6179,1,0,0,0,6178,6176,1,0,0,
        0,6179,6180,5,2348,0,0,6180,6182,1,0,0,0,6181,6154,1,0,0,0,6181,
        6182,1,0,0,0,6182,487,1,0,0,0,6183,6184,5,2218,0,0,6184,6186,5,2340,
        0,0,6185,6183,1,0,0,0,6185,6186,1,0,0,0,6186,6187,1,0,0,0,6187,6189,
        5,2235,0,0,6188,6190,3,490,245,0,6189,6188,1,0,0,0,6189,6190,1,0,
        0,0,6190,6192,1,0,0,0,6191,6193,3,936,468,0,6192,6191,1,0,0,0,6192,
        6193,1,0,0,0,6193,489,1,0,0,0,6194,6208,5,821,0,0,6195,6196,5,2347,
        0,0,6196,6197,5,1275,0,0,6197,6203,3,1652,826,0,6198,6199,5,2353,
        0,0,6199,6200,5,1275,0,0,6200,6202,3,1652,826,0,6201,6198,1,0,0,
        0,6202,6205,1,0,0,0,6203,6201,1,0,0,0,6203,6204,1,0,0,0,6204,6206,
        1,0,0,0,6205,6203,1,0,0,0,6206,6207,5,2348,0,0,6207,6209,1,0,0,0,
        6208,6195,1,0,0,0,6208,6209,1,0,0,0,6209,491,1,0,0,0,6210,6211,5,
        602,0,0,6211,6212,5,1275,0,0,6212,6250,5,154,0,0,6213,6214,5,1420,
        0,0,6214,6215,5,2347,0,0,6215,6220,3,2300,1150,0,6216,6217,5,2353,
        0,0,6217,6219,3,2300,1150,0,6218,6216,1,0,0,0,6219,6222,1,0,0,0,
        6220,6218,1,0,0,0,6220,6221,1,0,0,0,6221,6223,1,0,0,0,6222,6220,
        1,0,0,0,6223,6224,5,2348,0,0,6224,6225,5,2347,0,0,6225,6230,3,494,
        247,0,6226,6227,5,2353,0,0,6227,6229,3,494,247,0,6228,6226,1,0,0,
        0,6229,6232,1,0,0,0,6230,6228,1,0,0,0,6230,6231,1,0,0,0,6231,6233,
        1,0,0,0,6232,6230,1,0,0,0,6233,6234,5,2348,0,0,6234,6251,1,0,0,0,
        6235,6236,5,619,0,0,6236,6237,5,2347,0,0,6237,6242,3,2300,1150,0,
        6238,6239,5,2353,0,0,6239,6241,3,2300,1150,0,6240,6238,1,0,0,0,6241,
        6244,1,0,0,0,6242,6240,1,0,0,0,6242,6243,1,0,0,0,6243,6245,1,0,0,
        0,6244,6242,1,0,0,0,6245,6248,5,2348,0,0,6246,6249,3,1126,563,0,
        6247,6249,3,1128,564,0,6248,6246,1,0,0,0,6248,6247,1,0,0,0,6249,
        6251,1,0,0,0,6250,6213,1,0,0,0,6250,6235,1,0,0,0,6251,493,1,0,0,
        0,6252,6254,5,1275,0,0,6253,6255,3,1652,826,0,6254,6253,1,0,0,0,
        6254,6255,1,0,0,0,6255,6256,1,0,0,0,6256,6257,5,2164,0,0,6257,6258,
        5,797,0,0,6258,6259,5,2011,0,0,6259,6260,5,2347,0,0,6260,6261,3,
        496,248,0,6261,6263,5,2348,0,0,6262,6264,3,1206,603,0,6263,6262,
        1,0,0,0,6263,6264,1,0,0,0,6264,495,1,0,0,0,6265,6270,3,2150,1075,
        0,6266,6267,5,2353,0,0,6267,6269,3,2150,1075,0,6268,6266,1,0,0,0,
        6269,6272,1,0,0,0,6270,6268,1,0,0,0,6270,6271,1,0,0,0,6271,6284,
        1,0,0,0,6272,6270,1,0,0,0,6273,6274,5,2020,0,0,6274,6280,3,2150,
        1075,0,6275,6276,5,2353,0,0,6276,6277,5,2020,0,0,6277,6279,3,2150,
        1075,0,6278,6275,1,0,0,0,6279,6282,1,0,0,0,6280,6278,1,0,0,0,6280,
        6281,1,0,0,0,6281,6284,1,0,0,0,6282,6280,1,0,0,0,6283,6265,1,0,0,
        0,6283,6273,1,0,0,0,6284,497,1,0,0,0,6285,6290,5,821,0,0,6286,6291,
        3,500,250,0,6287,6291,3,502,251,0,6288,6291,3,506,253,0,6289,6291,
        3,510,255,0,6290,6286,1,0,0,0,6290,6287,1,0,0,0,6290,6288,1,0,0,
        0,6290,6289,1,0,0,0,6290,6291,1,0,0,0,6291,499,1,0,0,0,6292,6293,
        5,2347,0,0,6293,6298,3,504,252,0,6294,6295,5,2353,0,0,6295,6297,
        3,504,252,0,6296,6294,1,0,0,0,6297,6300,1,0,0,0,6298,6296,1,0,0,
        0,6298,6299,1,0,0,0,6299,6301,1,0,0,0,6300,6298,1,0,0,0,6301,6302,
        5,2348,0,0,6302,501,1,0,0,0,6303,6304,5,2347,0,0,6304,6309,3,504,
        252,0,6305,6306,5,2353,0,0,6306,6308,3,504,252,0,6307,6305,1,0,0,
        0,6308,6311,1,0,0,0,6309,6307,1,0,0,0,6309,6310,1,0,0,0,6310,6312,
        1,0,0,0,6311,6309,1,0,0,0,6312,6313,5,2348,0,0,6313,503,1,0,0,0,
        6314,6316,5,1275,0,0,6315,6317,3,1652,826,0,6316,6315,1,0,0,0,6316,
        6317,1,0,0,0,6317,6322,1,0,0,0,6318,6321,3,1206,603,0,6319,6321,
        3,1556,778,0,6320,6318,1,0,0,0,6320,6319,1,0,0,0,6321,6324,1,0,0,
        0,6322,6320,1,0,0,0,6322,6323,1,0,0,0,6323,6326,1,0,0,0,6324,6322,
        1,0,0,0,6325,6327,5,2110,0,0,6326,6325,1,0,0,0,6326,6327,1,0,0,0,
        6327,505,1,0,0,0,6328,6329,5,1679,0,0,6329,6330,5,696,0,0,6330,6331,
        5,2347,0,0,6331,6336,3,1614,807,0,6332,6333,5,2353,0,0,6333,6335,
        3,1614,807,0,6334,6332,1,0,0,0,6335,6338,1,0,0,0,6336,6334,1,0,0,
        0,6336,6337,1,0,0,0,6337,6339,1,0,0,0,6338,6336,1,0,0,0,6339,6340,
        5,2348,0,0,6340,6353,1,0,0,0,6341,6342,5,2347,0,0,6342,6347,3,508,
        254,0,6343,6344,5,2353,0,0,6344,6346,3,508,254,0,6345,6343,1,0,0,
        0,6346,6349,1,0,0,0,6347,6345,1,0,0,0,6347,6348,1,0,0,0,6348,6350,
        1,0,0,0,6349,6347,1,0,0,0,6350,6351,5,2348,0,0,6351,6353,1,0,0,0,
        6352,6328,1,0,0,0,6352,6341,1,0,0,0,6353,507,1,0,0,0,6354,6356,5,
        1275,0,0,6355,6357,3,1652,826,0,6356,6355,1,0,0,0,6356,6357,1,0,
        0,0,6357,6360,1,0,0,0,6358,6359,5,1996,0,0,6359,6361,3,1614,807,
        0,6360,6358,1,0,0,0,6360,6361,1,0,0,0,6361,6363,1,0,0,0,6362,6364,
        3,1556,778,0,6363,6362,1,0,0,0,6363,6364,1,0,0,0,6364,6366,1,0,0,
        0,6365,6367,5,2110,0,0,6366,6365,1,0,0,0,6366,6367,1,0,0,0,6367,
        509,1,0,0,0,6368,6369,5,1679,0,0,6369,6370,5,696,0,0,6370,6371,5,
        2347,0,0,6371,6376,3,1614,807,0,6372,6373,5,2353,0,0,6373,6375,3,
        1614,807,0,6374,6372,1,0,0,0,6375,6378,1,0,0,0,6376,6374,1,0,0,0,
        6376,6377,1,0,0,0,6377,6379,1,0,0,0,6378,6376,1,0,0,0,6379,6380,
        5,2348,0,0,6380,6382,1,0,0,0,6381,6368,1,0,0,0,6381,6382,1,0,0,0,
        6382,6383,1,0,0,0,6383,6384,5,2347,0,0,6384,6389,3,512,256,0,6385,
        6386,5,2353,0,0,6386,6388,3,512,256,0,6387,6385,1,0,0,0,6388,6391,
        1,0,0,0,6389,6387,1,0,0,0,6389,6390,1,0,0,0,6390,6392,1,0,0,0,6391,
        6389,1,0,0,0,6392,6393,5,2348,0,0,6393,511,1,0,0,0,6394,6396,5,1275,
        0,0,6395,6397,3,1652,826,0,6396,6395,1,0,0,0,6396,6397,1,0,0,0,6397,
        6402,1,0,0,0,6398,6401,3,1206,603,0,6399,6401,3,1556,778,0,6400,
        6398,1,0,0,0,6400,6399,1,0,0,0,6401,6404,1,0,0,0,6402,6400,1,0,0,
        0,6402,6403,1,0,0,0,6403,6405,1,0,0,0,6404,6402,1,0,0,0,6405,6407,
        5,2110,0,0,6406,6408,3,514,257,0,6407,6406,1,0,0,0,6407,6408,1,0,
        0,0,6408,513,1,0,0,0,6409,6410,5,1679,0,0,6410,6411,5,696,0,0,6411,
        6412,5,2347,0,0,6412,6417,3,1614,807,0,6413,6414,5,2353,0,0,6414,
        6416,3,1614,807,0,6415,6413,1,0,0,0,6416,6419,1,0,0,0,6417,6415,
        1,0,0,0,6417,6418,1,0,0,0,6418,6420,1,0,0,0,6419,6417,1,0,0,0,6420,
        6421,5,2348,0,0,6421,6434,1,0,0,0,6422,6423,5,2347,0,0,6423,6428,
        3,516,258,0,6424,6425,5,2353,0,0,6425,6427,3,516,258,0,6426,6424,
        1,0,0,0,6427,6430,1,0,0,0,6428,6426,1,0,0,0,6428,6429,1,0,0,0,6429,
        6431,1,0,0,0,6430,6428,1,0,0,0,6431,6432,5,2348,0,0,6432,6434,1,
        0,0,0,6433,6409,1,0,0,0,6433,6422,1,0,0,0,6434,515,1,0,0,0,6435,
        6437,5,1691,0,0,6436,6438,3,1158,579,0,6437,6436,1,0,0,0,6437,6438,
        1,0,0,0,6438,6441,1,0,0,0,6439,6440,5,1996,0,0,6440,6442,3,1614,
        807,0,6441,6439,1,0,0,0,6441,6442,1,0,0,0,6442,6444,1,0,0,0,6443,
        6445,3,1556,778,0,6444,6443,1,0,0,0,6444,6445,1,0,0,0,6445,6447,
        1,0,0,0,6446,6448,5,2110,0,0,6447,6446,1,0,0,0,6447,6448,1,0,0,0,
        6448,517,1,0,0,0,6449,6450,5,2343,0,0,6450,519,1,0,0,0,6451,6452,
        3,2364,1182,0,6452,6453,5,2340,0,0,6453,6455,1,0,0,0,6454,6451,1,
        0,0,0,6454,6455,1,0,0,0,6455,6456,1,0,0,0,6456,6457,3,2364,1182,
        0,6457,521,1,0,0,0,6458,6459,5,42,0,0,6459,6460,5,675,0,0,6460,6463,
        3,2286,1143,0,6461,6464,3,524,262,0,6462,6464,3,526,263,0,6463,6461,
        1,0,0,0,6463,6462,1,0,0,0,6464,523,1,0,0,0,6465,6472,3,1250,625,
        0,6466,6472,3,1248,624,0,6467,6472,3,1252,626,0,6468,6472,3,936,
        468,0,6469,6472,3,1200,600,0,6470,6472,3,894,447,0,6471,6465,1,0,
        0,0,6471,6466,1,0,0,0,6471,6467,1,0,0,0,6471,6468,1,0,0,0,6471,6469,
        1,0,0,0,6471,6470,1,0,0,0,6472,6473,1,0,0,0,6473,6471,1,0,0,0,6473,
        6474,1,0,0,0,6474,525,1,0,0,0,6475,6497,3,532,266,0,6476,6477,5,
        1263,0,0,6477,6478,5,2347,0,0,6478,6479,3,518,259,0,6479,6480,5,
        2348,0,0,6480,6497,1,0,0,0,6481,6497,5,237,0,0,6482,6497,3,1272,
        636,0,6483,6497,5,2110,0,0,6484,6497,3,528,264,0,6485,6486,5,1481,
        0,0,6486,6487,5,2052,0,0,6487,6497,3,560,280,0,6488,6497,5,218,0,
        0,6489,6490,3,530,265,0,6490,6491,5,2123,0,0,6491,6497,1,0,0,0,6492,
        6493,5,2114,0,0,6493,6494,5,137,0,0,6494,6497,5,1450,0,0,6495,6497,
        3,534,267,0,6496,6475,1,0,0,0,6496,6476,1,0,0,0,6496,6481,1,0,0,
        0,6496,6482,1,0,0,0,6496,6483,1,0,0,0,6496,6484,1,0,0,0,6496,6485,
        1,0,0,0,6496,6488,1,0,0,0,6496,6489,1,0,0,0,6496,6492,1,0,0,0,6496,
        6495,1,0,0,0,6497,527,1,0,0,0,6498,6499,7,67,0,0,6499,529,1,0,0,
        0,6500,6501,7,68,0,0,6501,531,1,0,0,0,6502,6509,5,1434,0,0,6503,
        6504,5,1275,0,0,6504,6510,3,1652,826,0,6505,6506,5,1691,0,0,6506,
        6510,3,1158,579,0,6507,6510,5,1510,0,0,6508,6510,5,1112,0,0,6509,
        6503,1,0,0,0,6509,6505,1,0,0,0,6509,6507,1,0,0,0,6509,6508,1,0,0,
        0,6509,6510,1,0,0,0,6510,6525,1,0,0,0,6511,6524,3,936,468,0,6512,
        6513,5,1996,0,0,6513,6524,3,1614,807,0,6514,6515,5,1263,0,0,6515,
        6516,5,2347,0,0,6516,6517,3,518,259,0,6517,6518,5,2348,0,0,6518,
        6524,1,0,0,0,6519,6524,5,1190,0,0,6520,6524,3,1200,600,0,6521,6524,
        3,1556,778,0,6522,6524,3,894,447,0,6523,6511,1,0,0,0,6523,6512,1,
        0,0,0,6523,6514,1,0,0,0,6523,6519,1,0,0,0,6523,6520,1,0,0,0,6523,
        6521,1,0,0,0,6523,6522,1,0,0,0,6524,6527,1,0,0,0,6525,6523,1,0,0,
        0,6525,6526,1,0,0,0,6526,533,1,0,0,0,6527,6525,1,0,0,0,6528,6537,
        3,536,268,0,6529,6537,3,538,269,0,6530,6537,3,542,271,0,6531,6537,
        3,546,273,0,6532,6537,3,548,274,0,6533,6537,3,550,275,0,6534,6537,
        3,540,270,0,6535,6537,3,554,277,0,6536,6528,1,0,0,0,6536,6529,1,
        0,0,0,6536,6530,1,0,0,0,6536,6531,1,0,0,0,6536,6532,1,0,0,0,6536,
        6533,1,0,0,0,6536,6534,1,0,0,0,6536,6535,1,0,0,0,6537,535,1,0,0,
        0,6538,6539,5,926,0,0,6539,6540,5,368,0,0,6540,6544,5,82,0,0,6541,
        6542,5,580,0,0,6542,6543,5,1275,0,0,6543,6545,3,1652,826,0,6544,
        6541,1,0,0,0,6544,6545,1,0,0,0,6545,6553,1,0,0,0,6546,6554,3,1200,
        600,0,6547,6550,5,1996,0,0,6548,6551,3,1614,807,0,6549,6551,5,368,
        0,0,6550,6548,1,0,0,0,6550,6549,1,0,0,0,6551,6554,1,0,0,0,6552,6554,
        3,894,447,0,6553,6546,1,0,0,0,6553,6547,1,0,0,0,6553,6552,1,0,0,
        0,6554,537,1,0,0,0,6555,6556,5,21,0,0,6556,6558,5,1275,0,0,6557,
        6559,3,1652,826,0,6558,6557,1,0,0,0,6558,6559,1,0,0,0,6559,6562,
        1,0,0,0,6560,6561,5,1996,0,0,6561,6563,3,1614,807,0,6562,6560,1,
        0,0,0,6562,6563,1,0,0,0,6563,6565,1,0,0,0,6564,6566,3,1556,778,0,
        6565,6564,1,0,0,0,6565,6566,1,0,0,0,6566,6568,1,0,0,0,6567,6569,
        3,936,468,0,6568,6567,1,0,0,0,6568,6569,1,0,0,0,6569,539,1,0,0,0,
        6570,6571,5,218,0,0,6571,6573,5,1275,0,0,6572,6574,3,936,468,0,6573,
        6572,1,0,0,0,6573,6574,1,0,0,0,6574,541,1,0,0,0,6575,6576,5,926,
        0,0,6576,6577,5,1275,0,0,6577,6593,3,1652,826,0,6578,6580,3,544,
        272,0,6579,6578,1,0,0,0,6580,6581,1,0,0,0,6581,6579,1,0,0,0,6581,
        6582,1,0,0,0,6582,6594,1,0,0,0,6583,6584,5,1263,0,0,6584,6585,5,
        2347,0,0,6585,6586,3,518,259,0,6586,6587,5,2348,0,0,6587,6594,1,
        0,0,0,6588,6594,5,218,0,0,6589,6590,5,2114,0,0,6590,6591,5,137,0,
        0,6591,6594,5,1450,0,0,6592,6594,5,2110,0,0,6593,6579,1,0,0,0,6593,
        6583,1,0,0,0,6593,6588,1,0,0,0,6593,6589,1,0,0,0,6593,6592,1,0,0,
        0,6594,543,1,0,0,0,6595,6601,3,1250,625,0,6596,6601,3,1248,624,0,
        6597,6601,3,1200,600,0,6598,6601,3,894,447,0,6599,6601,3,1556,778,
        0,6600,6595,1,0,0,0,6600,6596,1,0,0,0,6600,6597,1,0,0,0,6600,6598,
        1,0,0,0,6600,6599,1,0,0,0,6601,545,1,0,0,0,6602,6607,5,1481,0,0,
        6603,6604,5,1275,0,0,6604,6608,3,1652,826,0,6605,6606,5,1691,0,0,
        6606,6608,3,1158,579,0,6607,6603,1,0,0,0,6607,6605,1,0,0,0,6608,
        6609,1,0,0,0,6609,6610,5,2052,0,0,6610,6611,3,558,279,0,6611,547,
        1,0,0,0,6612,6613,5,438,0,0,6613,6614,5,1275,0,0,6614,6615,3,1652,
        826,0,6615,549,1,0,0,0,6616,6617,5,1634,0,0,6617,6618,5,1275,0,0,
        6618,6619,3,556,278,0,6619,6620,5,80,0,0,6620,6621,5,2347,0,0,6621,
        6626,3,2150,1075,0,6622,6623,5,2353,0,0,6623,6625,3,2150,1075,0,
        6624,6622,1,0,0,0,6625,6628,1,0,0,0,6626,6624,1,0,0,0,6626,6627,
        1,0,0,0,6627,6629,1,0,0,0,6628,6626,1,0,0,0,6629,6637,5,2348,0,0,
        6630,6631,5,735,0,0,6631,6632,5,2347,0,0,6632,6633,3,552,276,0,6633,
        6634,5,2353,0,0,6634,6635,3,552,276,0,6635,6636,5,2348,0,0,6636,
        6638,1,0,0,0,6637,6630,1,0,0,0,6637,6638,1,0,0,0,6638,6640,1,0,0,
        0,6639,6641,3,936,468,0,6640,6639,1,0,0,0,6640,6641,1,0,0,0,6641,
        551,1,0,0,0,6642,6660,5,1275,0,0,6643,6655,3,1652,826,0,6644,6647,
        3,1206,603,0,6645,6647,3,1556,778,0,6646,6644,1,0,0,0,6646,6645,
        1,0,0,0,6647,6648,1,0,0,0,6648,6646,1,0,0,0,6648,6649,1,0,0,0,6649,
        6656,1,0,0,0,6650,6651,5,1263,0,0,6651,6652,5,2347,0,0,6652,6653,
        3,518,259,0,6653,6654,5,2348,0,0,6654,6656,1,0,0,0,6655,6646,1,0,
        0,0,6655,6650,1,0,0,0,6656,6658,1,0,0,0,6657,6659,5,2110,0,0,6658,
        6657,1,0,0,0,6658,6659,1,0,0,0,6659,6661,1,0,0,0,6660,6643,1,0,0,
        0,6660,6661,1,0,0,0,6661,553,1,0,0,0,6662,6663,5,926,0,0,6663,6664,
        5,1691,0,0,6664,6668,3,1158,579,0,6665,6669,5,2110,0,0,6666,6669,
        3,1248,624,0,6667,6669,3,1250,625,0,6668,6665,1,0,0,0,6668,6666,
        1,0,0,0,6668,6667,1,0,0,0,6669,555,1,0,0,0,6670,6671,3,1652,826,
        0,6671,557,1,0,0,0,6672,6673,3,1652,826,0,6673,559,1,0,0,0,6674,
        6675,3,2286,1143,0,6675,561,1,0,0,0,6676,6677,5,42,0,0,6677,6678,
        5,704,0,0,6678,6679,5,748,0,0,6679,6683,5,609,0,0,6680,6681,3,2244,
        1122,0,6681,6682,5,2340,0,0,6682,6684,1,0,0,0,6683,6680,1,0,0,0,
        6683,6684,1,0,0,0,6684,6685,1,0,0,0,6685,6686,3,2364,1182,0,6686,
        6687,7,69,0,0,6687,6691,5,2347,0,0,6688,6689,3,2244,1122,0,6689,
        6690,5,2340,0,0,6690,6692,1,0,0,0,6691,6688,1,0,0,0,6691,6692,1,
        0,0,0,6692,6693,1,0,0,0,6693,6694,3,2364,1182,0,6694,6695,5,2347,
        0,0,6695,6696,3,2364,1182,0,6696,6697,5,2348,0,0,6697,6698,5,2348,
        0,0,6698,563,1,0,0,0,6699,6700,5,305,0,0,6700,6701,5,2144,0,0,6701,
        6705,3,2314,1157,0,6702,6703,5,650,0,0,6703,6704,5,1138,0,0,6704,
        6706,5,508,0,0,6705,6702,1,0,0,0,6705,6706,1,0,0,0,6706,6716,1,0,
        0,0,6707,6717,3,572,286,0,6708,6717,3,574,287,0,6709,6717,3,576,
        288,0,6710,6717,3,578,289,0,6711,6717,3,580,290,0,6712,6717,3,586,
        293,0,6713,6717,3,588,294,0,6714,6717,3,590,295,0,6715,6717,3,774,
        387,0,6716,6707,1,0,0,0,6716,6708,1,0,0,0,6716,6709,1,0,0,0,6716,
        6710,1,0,0,0,6716,6711,1,0,0,0,6716,6712,1,0,0,0,6716,6713,1,0,0,
        0,6716,6714,1,0,0,0,6716,6715,1,0,0,0,6717,6718,1,0,0,0,6718,6716,
        1,0,0,0,6718,6719,1,0,0,0,6719,565,1,0,0,0,6720,6721,5,42,0,0,6721,
        6722,5,2144,0,0,6722,6734,3,2314,1157,0,6723,6735,3,570,285,0,6724,
        6735,3,574,287,0,6725,6735,3,576,288,0,6726,6735,3,578,289,0,6727,
        6735,3,580,290,0,6728,6735,3,584,292,0,6729,6735,3,586,293,0,6730,
        6735,3,588,294,0,6731,6735,3,592,296,0,6732,6735,3,774,387,0,6733,
        6735,3,602,301,0,6734,6723,1,0,0,0,6734,6724,1,0,0,0,6734,6725,1,
        0,0,0,6734,6726,1,0,0,0,6734,6727,1,0,0,0,6734,6728,1,0,0,0,6734,
        6729,1,0,0,0,6734,6730,1,0,0,0,6734,6731,1,0,0,0,6734,6732,1,0,0,
        0,6734,6733,1,0,0,0,6735,6736,1,0,0,0,6736,6734,1,0,0,0,6736,6737,
        1,0,0,0,6737,6749,1,0,0,0,6738,6743,3,2314,1157,0,6739,6740,5,2353,
        0,0,6740,6742,3,2314,1157,0,6741,6739,1,0,0,0,6742,6745,1,0,0,0,
        6743,6741,1,0,0,0,6743,6744,1,0,0,0,6744,6746,1,0,0,0,6745,6743,
        1,0,0,0,6746,6747,3,594,297,0,6747,6749,1,0,0,0,6748,6720,1,0,0,
        0,6748,6738,1,0,0,0,6749,567,1,0,0,0,6750,6751,5,438,0,0,6751,6752,
        5,2144,0,0,6752,6755,3,2314,1157,0,6753,6754,5,650,0,0,6754,6756,
        5,508,0,0,6755,6753,1,0,0,0,6755,6756,1,0,0,0,6756,6758,1,0,0,0,
        6757,6759,5,171,0,0,6758,6757,1,0,0,0,6758,6759,1,0,0,0,6759,569,
        1,0,0,0,6760,6763,3,572,286,0,6761,6762,5,1484,0,0,6762,6764,3,2364,
        1182,0,6763,6761,1,0,0,0,6763,6764,1,0,0,0,6764,571,1,0,0,0,6765,
        6766,5,644,0,0,6766,6767,5,154,0,0,6767,6768,3,2364,1182,0,6768,
        573,1,0,0,0,6769,6770,5,644,0,0,6770,6773,7,70,0,0,6771,6772,5,67,
        0,0,6772,6774,3,2360,1180,0,6773,6771,1,0,0,0,6773,6774,1,0,0,0,
        6774,575,1,0,0,0,6775,6776,7,71,0,0,6776,6777,5,1996,0,0,6777,6778,
        3,2364,1182,0,6778,577,1,0,0,0,6779,6782,5,1415,0,0,6780,6783,3,
        1182,591,0,6781,6783,5,2093,0,0,6782,6780,1,0,0,0,6782,6781,1,0,
        0,0,6783,6784,1,0,0,0,6784,6785,5,1193,0,0,6785,6786,3,2364,1182,
        0,6786,579,1,0,0,0,6787,6788,5,1388,0,0,6788,6789,3,2364,1182,0,
        6789,581,1,0,0,0,6790,6795,3,2266,1133,0,6791,6792,5,2353,0,0,6792,
        6794,3,2266,1133,0,6793,6791,1,0,0,0,6794,6797,1,0,0,0,6795,6793,
        1,0,0,0,6795,6796,1,0,0,0,6796,6814,1,0,0,0,6797,6795,1,0,0,0,6798,
        6810,5,38,0,0,6799,6800,5,497,0,0,6800,6805,3,2266,1133,0,6801,6802,
        5,2353,0,0,6802,6804,3,2266,1133,0,6803,6801,1,0,0,0,6804,6807,1,
        0,0,0,6805,6803,1,0,0,0,6805,6806,1,0,0,0,6806,6809,1,0,0,0,6807,
        6805,1,0,0,0,6808,6799,1,0,0,0,6809,6812,1,0,0,0,6810,6808,1,0,0,
        0,6810,6811,1,0,0,0,6811,6814,1,0,0,0,6812,6810,1,0,0,0,6813,6790,
        1,0,0,0,6813,6798,1,0,0,0,6814,583,1,0,0,0,6815,6816,5,368,0,0,6816,
        6819,5,1515,0,0,6817,6820,5,1071,0,0,6818,6820,3,582,291,0,6819,
        6817,1,0,0,0,6819,6818,1,0,0,0,6820,585,1,0,0,0,6821,6822,5,1283,
        0,0,6822,6823,5,514,0,0,6823,587,1,0,0,0,6824,6825,5,7,0,0,6825,
        6826,7,72,0,0,6826,589,1,0,0,0,6827,6828,5,467,0,0,6828,6829,5,454,
        0,0,6829,591,1,0,0,0,6830,6840,3,590,295,0,6831,6832,5,580,0,0,6832,
        6837,3,2370,1185,0,6833,6834,5,2353,0,0,6834,6836,3,2370,1185,0,
        6835,6833,1,0,0,0,6836,6839,1,0,0,0,6837,6835,1,0,0,0,6837,6838,
        1,0,0,0,6838,6841,1,0,0,0,6839,6837,1,0,0,0,6840,6831,1,0,0,0,6840,
        6841,1,0,0,0,6841,6843,1,0,0,0,6842,6844,5,576,0,0,6843,6842,1,0,
        0,0,6843,6844,1,0,0,0,6844,593,1,0,0,0,6845,6846,5,1511,0,0,6846,
        6847,5,265,0,0,6847,6851,5,2015,0,0,6848,6849,5,478,0,0,6849,6852,
        5,2142,0,0,6850,6852,3,2314,1157,0,6851,6848,1,0,0,0,6851,6850,1,
        0,0,0,6852,6885,1,0,0,0,6853,6854,5,607,0,0,6854,6855,5,265,0,0,
        6855,6882,5,2015,0,0,6856,6857,5,478,0,0,6857,6883,5,2142,0,0,6858,
        6866,3,2314,1157,0,6859,6864,5,2212,0,0,6860,6861,5,1074,0,0,6861,
        6865,5,1517,0,0,6862,6863,5,1515,0,0,6863,6865,3,582,291,0,6864,
        6860,1,0,0,0,6864,6862,1,0,0,0,6865,6867,1,0,0,0,6866,6859,1,0,0,
        0,6866,6867,1,0,0,0,6867,6870,1,0,0,0,6868,6869,5,85,0,0,6869,6871,
        5,1486,0,0,6870,6868,1,0,0,0,6870,6871,1,0,0,0,6871,6880,1,0,0,0,
        6872,6873,5,84,0,0,6873,6878,5,2153,0,0,6874,6879,5,1283,0,0,6875,
        6879,5,179,0,0,6876,6877,5,418,0,0,6877,6879,5,943,0,0,6878,6874,
        1,0,0,0,6878,6875,1,0,0,0,6878,6876,1,0,0,0,6879,6881,1,0,0,0,6880,
        6872,1,0,0,0,6880,6881,1,0,0,0,6881,6883,1,0,0,0,6882,6856,1,0,0,
        0,6882,6858,1,0,0,0,6883,6885,1,0,0,0,6884,6845,1,0,0,0,6884,6853,
        1,0,0,0,6885,595,1,0,0,0,6886,6887,5,2347,0,0,6887,6892,3,2364,1182,
        0,6888,6889,5,2353,0,0,6889,6891,3,2364,1182,0,6890,6888,1,0,0,0,
        6891,6894,1,0,0,0,6892,6890,1,0,0,0,6892,6893,1,0,0,0,6893,6895,
        1,0,0,0,6894,6892,1,0,0,0,6895,6896,5,2348,0,0,6896,597,1,0,0,0,
        6897,6898,5,1590,0,0,6898,6899,5,277,0,0,6899,6903,5,2369,0,0,6900,
        6904,5,38,0,0,6901,6904,5,368,0,0,6902,6904,3,596,298,0,6903,6900,
        1,0,0,0,6903,6901,1,0,0,0,6903,6902,1,0,0,0,6904,599,1,0,0,0,6905,
        6906,7,69,0,0,6906,6907,5,277,0,0,6907,6908,5,2369,0,0,6908,6909,
        3,596,298,0,6909,601,1,0,0,0,6910,6917,3,598,299,0,6911,6914,3,600,
        300,0,6912,6913,5,580,0,0,6913,6915,3,2258,1129,0,6914,6912,1,0,
        0,0,6914,6915,1,0,0,0,6915,6917,1,0,0,0,6916,6910,1,0,0,0,6916,6911,
        1,0,0,0,6917,603,1,0,0,0,6918,6919,5,27,0,0,6919,6920,5,770,0,0,
        6920,6925,5,853,0,0,6921,6926,3,606,303,0,6922,6926,3,628,314,0,
        6923,6926,3,658,329,0,6924,6926,3,668,334,0,6925,6921,1,0,0,0,6925,
        6922,1,0,0,0,6925,6923,1,0,0,0,6925,6924,1,0,0,0,6926,605,1,0,0,
        0,6927,6937,3,608,304,0,6928,6937,3,610,305,0,6929,6937,3,614,307,
        0,6930,6937,3,616,308,0,6931,6937,3,618,309,0,6932,6937,3,620,310,
        0,6933,6937,3,622,311,0,6934,6937,3,624,312,0,6935,6937,3,626,313,
        0,6936,6927,1,0,0,0,6936,6928,1,0,0,0,6936,6929,1,0,0,0,6936,6930,
        1,0,0,0,6936,6931,1,0,0,0,6936,6932,1,0,0,0,6936,6933,1,0,0,0,6936,
        6934,1,0,0,0,6936,6935,1,0,0,0,6937,607,1,0,0,0,6938,6949,5,305,
        0,0,6939,6940,5,774,0,0,6940,6950,5,2343,0,0,6941,6943,5,821,0,0,
        6942,6941,1,0,0,0,6942,6943,1,0,0,0,6943,6944,1,0,0,0,6944,6945,
        5,92,0,0,6945,6946,5,774,0,0,6946,6947,5,588,0,0,6947,6948,5,774,
        0,0,6948,6950,5,2343,0,0,6949,6939,1,0,0,0,6949,6942,1,0,0,0,6950,
        6951,1,0,0,0,6951,6952,5,644,0,0,6952,6953,5,154,0,0,6953,6954,3,
        674,337,0,6954,609,1,0,0,0,6955,6956,5,1590,0,0,6956,6957,5,774,
        0,0,6957,6959,5,1198,0,0,6958,6960,3,612,306,0,6959,6958,1,0,0,0,
        6959,6960,1,0,0,0,6960,6961,1,0,0,0,6961,6963,3,652,326,0,6962,6964,
        3,774,387,0,6963,6962,1,0,0,0,6963,6964,1,0,0,0,6964,611,1,0,0,0,
        6965,6966,5,576,0,0,6966,6967,5,774,0,0,6967,613,1,0,0,0,6968,6969,
        5,1590,0,0,6969,6970,5,774,0,0,6970,6972,5,208,0,0,6971,6973,3,652,
        326,0,6972,6971,1,0,0,0,6972,6973,1,0,0,0,6973,6975,1,0,0,0,6974,
        6976,3,774,387,0,6975,6974,1,0,0,0,6975,6976,1,0,0,0,6976,615,1,
        0,0,0,6977,6978,5,100,0,0,6978,6981,5,774,0,0,6979,6980,5,2153,0,
        0,6980,6982,5,2343,0,0,6981,6979,1,0,0,0,6981,6982,1,0,0,0,6982,
        6984,1,0,0,0,6983,6985,3,612,306,0,6984,6983,1,0,0,0,6984,6985,1,
        0,0,0,6985,6986,1,0,0,0,6986,6989,3,652,326,0,6987,6988,5,2052,0,
        0,6988,6990,5,2343,0,0,6989,6987,1,0,0,0,6989,6990,1,0,0,0,6990,
        617,1,0,0,0,6991,6992,5,42,0,0,6992,6993,5,774,0,0,6993,6995,5,1283,
        0,0,6994,6996,3,612,306,0,6995,6994,1,0,0,0,6995,6996,1,0,0,0,6996,
        6997,1,0,0,0,6997,6998,5,644,0,0,6998,6999,5,154,0,0,6999,7000,3,
        674,337,0,7000,7001,5,1590,0,0,7001,7003,3,674,337,0,7002,7004,3,
        670,335,0,7003,7002,1,0,0,0,7003,7004,1,0,0,0,7004,619,1,0,0,0,7005,
        7006,5,892,0,0,7006,7007,5,774,0,0,7007,7009,5,2343,0,0,7008,7010,
        3,672,336,0,7009,7008,1,0,0,0,7009,7010,1,0,0,0,7010,7011,1,0,0,
        0,7011,7012,5,49,0,0,7012,7013,5,774,0,0,7013,7015,5,2343,0,0,7014,
        7016,3,672,336,0,7015,7014,1,0,0,0,7015,7016,1,0,0,0,7016,7017,1,
        0,0,0,7017,7018,5,735,0,0,7018,7019,5,967,0,0,7019,7020,5,774,0,
        0,7020,7021,5,2343,0,0,7021,7022,3,672,336,0,7022,621,1,0,0,0,7023,
        7024,5,892,0,0,7024,7025,5,774,0,0,7025,7027,5,2343,0,0,7026,7028,
        3,672,336,0,7027,7026,1,0,0,0,7027,7028,1,0,0,0,7028,7029,1,0,0,
        0,7029,7030,5,735,0,0,7030,7031,5,507,0,0,7031,7032,5,774,0,0,7032,
        7033,5,2343,0,0,7033,7035,3,672,336,0,7034,7036,3,670,335,0,7035,
        7034,1,0,0,0,7035,7036,1,0,0,0,7036,623,1,0,0,0,7037,7039,5,576,
        0,0,7038,7037,1,0,0,0,7038,7039,1,0,0,0,7039,7040,1,0,0,0,7040,7041,
        5,2287,0,0,7041,7042,5,774,0,0,7042,7043,5,644,0,0,7043,7044,5,154,
        0,0,7044,7045,3,674,337,0,7045,7046,5,588,0,0,7046,7047,5,2288,0,
        0,7047,7049,5,774,0,0,7048,7050,3,612,306,0,7049,7048,1,0,0,0,7049,
        7050,1,0,0,0,7050,7051,1,0,0,0,7051,7053,3,652,326,0,7052,7054,3,
        670,335,0,7053,7052,1,0,0,0,7053,7054,1,0,0,0,7054,625,1,0,0,0,7055,
        7056,5,2289,0,0,7056,7057,5,774,0,0,7057,7058,5,644,0,0,7058,7059,
        5,154,0,0,7059,7060,3,674,337,0,7060,7061,5,2212,0,0,7061,7062,5,
        2288,0,0,7062,7064,5,774,0,0,7063,7065,3,612,306,0,7064,7063,1,0,
        0,0,7064,7065,1,0,0,0,7065,7066,1,0,0,0,7066,7068,3,652,326,0,7067,
        7069,3,670,335,0,7068,7067,1,0,0,0,7068,7069,1,0,0,0,7069,627,1,
        0,0,0,7070,7080,3,630,315,0,7071,7080,3,632,316,0,7072,7080,3,638,
        319,0,7073,7080,3,640,320,0,7074,7080,3,642,321,0,7075,7080,3,644,
        322,0,7076,7080,3,646,323,0,7077,7080,3,648,324,0,7078,7080,3,650,
        325,0,7079,7070,1,0,0,0,7079,7071,1,0,0,0,7079,7072,1,0,0,0,7079,
        7073,1,0,0,0,7079,7074,1,0,0,0,7079,7075,1,0,0,0,7079,7076,1,0,0,
        0,7079,7077,1,0,0,0,7079,7078,1,0,0,0,7080,629,1,0,0,0,7081,7083,
        5,1590,0,0,7082,7084,5,472,0,0,7083,7082,1,0,0,0,7083,7084,1,0,0,
        0,7084,7085,1,0,0,0,7085,7092,5,770,0,0,7086,7087,3,634,317,0,7087,
        7088,5,2366,0,0,7088,7090,1,0,0,0,7089,7086,1,0,0,0,7089,7090,1,
        0,0,0,7090,7091,1,0,0,0,7091,7093,3,636,318,0,7092,7089,1,0,0,0,
        7092,7093,1,0,0,0,7093,7095,1,0,0,0,7094,7096,3,656,328,0,7095,7094,
        1,0,0,0,7095,7096,1,0,0,0,7096,7098,1,0,0,0,7097,7099,3,654,327,
        0,7098,7097,1,0,0,0,7098,7099,1,0,0,0,7099,7101,1,0,0,0,7100,7102,
        3,612,306,0,7101,7100,1,0,0,0,7101,7102,1,0,0,0,7102,7103,1,0,0,
        0,7103,7105,3,652,326,0,7104,7106,3,670,335,0,7105,7104,1,0,0,0,
        7105,7106,1,0,0,0,7106,7108,1,0,0,0,7107,7109,3,774,387,0,7108,7107,
        1,0,0,0,7108,7109,1,0,0,0,7109,631,1,0,0,0,7110,7112,5,305,0,0,7111,
        7113,5,472,0,0,7112,7111,1,0,0,0,7112,7113,1,0,0,0,7113,7114,1,0,
        0,0,7114,7121,5,770,0,0,7115,7116,3,634,317,0,7116,7117,5,2366,0,
        0,7117,7119,1,0,0,0,7118,7115,1,0,0,0,7118,7119,1,0,0,0,7119,7120,
        1,0,0,0,7120,7122,3,636,318,0,7121,7118,1,0,0,0,7121,7122,1,0,0,
        0,7122,7124,1,0,0,0,7123,7125,3,656,328,0,7124,7123,1,0,0,0,7124,
        7125,1,0,0,0,7125,7127,1,0,0,0,7126,7128,3,654,327,0,7127,7126,1,
        0,0,0,7127,7128,1,0,0,0,7128,7130,1,0,0,0,7129,7131,3,612,306,0,
        7130,7129,1,0,0,0,7130,7131,1,0,0,0,7131,7132,1,0,0,0,7132,7134,
        3,652,326,0,7133,7135,3,670,335,0,7134,7133,1,0,0,0,7134,7135,1,
        0,0,0,7135,7137,1,0,0,0,7136,7138,3,774,387,0,7137,7136,1,0,0,0,
        7137,7138,1,0,0,0,7138,633,1,0,0,0,7139,7140,5,2343,0,0,7140,635,
        1,0,0,0,7141,7142,5,2343,0,0,7142,637,1,0,0,0,7143,7145,5,2148,0,
        0,7144,7146,5,472,0,0,7145,7144,1,0,0,0,7145,7146,1,0,0,0,7146,7147,
        1,0,0,0,7147,7148,5,770,0,0,7148,7150,5,2343,0,0,7149,7151,3,656,
        328,0,7150,7149,1,0,0,0,7150,7151,1,0,0,0,7151,7153,1,0,0,0,7152,
        7154,3,612,306,0,7153,7152,1,0,0,0,7153,7154,1,0,0,0,7154,7155,1,
        0,0,0,7155,7157,3,652,326,0,7156,7158,3,670,335,0,7157,7156,1,0,
        0,0,7157,7158,1,0,0,0,7158,639,1,0,0,0,7159,7160,5,1590,0,0,7160,
        7161,5,2001,0,0,7161,7162,5,2343,0,0,7162,7163,5,580,0,0,7163,7165,
        5,2343,0,0,7164,7166,3,612,306,0,7165,7164,1,0,0,0,7165,7166,1,0,
        0,0,7166,7167,1,0,0,0,7167,7169,3,652,326,0,7168,7170,3,670,335,
        0,7169,7168,1,0,0,0,7169,7170,1,0,0,0,7170,641,1,0,0,0,7171,7173,
        5,517,0,0,7172,7174,5,472,0,0,7173,7172,1,0,0,0,7173,7174,1,0,0,
        0,7174,7175,1,0,0,0,7175,7176,5,773,0,0,7176,7177,5,2212,0,0,7177,
        7178,5,1560,0,0,7178,7179,3,678,339,0,7179,7180,5,2052,0,0,7180,
        7182,3,1422,711,0,7181,7183,3,612,306,0,7182,7181,1,0,0,0,7182,7183,
        1,0,0,0,7183,7184,1,0,0,0,7184,7202,3,652,326,0,7185,7186,5,2212,
        0,0,7186,7187,5,645,0,0,7187,7200,5,696,0,0,7188,7193,5,2343,0,0,
        7189,7190,5,2353,0,0,7190,7192,5,2343,0,0,7191,7189,1,0,0,0,7192,
        7195,1,0,0,0,7193,7191,1,0,0,0,7193,7194,1,0,0,0,7194,7201,1,0,0,
        0,7195,7193,1,0,0,0,7196,7197,5,2347,0,0,7197,7198,3,1870,935,0,
        7198,7199,5,2348,0,0,7199,7201,1,0,0,0,7200,7188,1,0,0,0,7200,7196,
        1,0,0,0,7201,7203,1,0,0,0,7202,7185,1,0,0,0,7202,7203,1,0,0,0,7203,
        643,1,0,0,0,7204,7206,5,658,0,0,7205,7207,5,472,0,0,7206,7205,1,
        0,0,0,7206,7207,1,0,0,0,7207,7208,1,0,0,0,7208,7209,5,773,0,0,7209,
        7210,5,2212,0,0,7210,7211,5,1560,0,0,7211,7212,3,678,339,0,7212,
        7213,5,588,0,0,7213,7215,3,1422,711,0,7214,7216,3,612,306,0,7215,
        7214,1,0,0,0,7215,7216,1,0,0,0,7216,7217,1,0,0,0,7217,7219,3,652,
        326,0,7218,7220,3,670,335,0,7219,7218,1,0,0,0,7219,7220,1,0,0,0,
        7220,645,1,0,0,0,7221,7223,5,1590,0,0,7222,7224,5,472,0,0,7223,7222,
        1,0,0,0,7223,7224,1,0,0,0,7224,7225,1,0,0,0,7225,7226,5,770,0,0,
        7226,7227,5,644,0,0,7227,7228,5,154,0,0,7228,7230,3,678,339,0,7229,
        7231,3,612,306,0,7230,7229,1,0,0,0,7230,7231,1,0,0,0,7231,7232,1,
        0,0,0,7232,7233,5,896,0,0,7233,7234,5,2153,0,0,7234,7236,3,674,337,
        0,7235,7237,3,670,335,0,7236,7235,1,0,0,0,7236,7237,1,0,0,0,7237,
        647,1,0,0,0,7238,7240,5,1590,0,0,7239,7241,5,472,0,0,7240,7239,1,
        0,0,0,7240,7241,1,0,0,0,7241,7242,1,0,0,0,7242,7243,5,770,0,0,7243,
        7244,5,644,0,0,7244,7245,5,154,0,0,7245,7247,3,678,339,0,7246,7248,
        3,612,306,0,7247,7246,1,0,0,0,7247,7248,1,0,0,0,7248,7249,1,0,0,
        0,7249,7250,5,1510,0,0,7250,7251,5,896,0,0,7251,7252,5,2153,0,0,
        7252,7253,3,678,339,0,7253,649,1,0,0,0,7254,7256,5,938,0,0,7255,
        7257,5,472,0,0,7256,7255,1,0,0,0,7256,7257,1,0,0,0,7257,7258,1,0,
        0,0,7258,7259,5,773,0,0,7259,7260,5,2052,0,0,7260,7261,5,967,0,0,
        7261,7262,5,774,0,0,7262,7263,5,2343,0,0,7263,7264,5,644,0,0,7264,
        7265,5,154,0,0,7265,7266,3,674,337,0,7266,7268,5,588,0,0,7267,7269,
        5,576,0,0,7268,7267,1,0,0,0,7268,7269,1,0,0,0,7269,7270,1,0,0,0,
        7270,7271,5,774,0,0,7271,7272,5,644,0,0,7272,7273,5,154,0,0,7273,
        7288,3,674,337,0,7274,7275,5,2212,0,0,7275,7276,5,645,0,0,7276,7286,
        5,696,0,0,7277,7282,5,2343,0,0,7278,7279,5,2353,0,0,7279,7281,5,
        2343,0,0,7280,7278,1,0,0,0,7281,7284,1,0,0,0,7282,7280,1,0,0,0,7282,
        7283,1,0,0,0,7283,7287,1,0,0,0,7284,7282,1,0,0,0,7285,7287,3,1870,
        935,0,7286,7277,1,0,0,0,7286,7285,1,0,0,0,7287,7289,1,0,0,0,7288,
        7274,1,0,0,0,7288,7289,1,0,0,0,7289,7291,1,0,0,0,7290,7292,3,670,
        335,0,7291,7290,1,0,0,0,7291,7292,1,0,0,0,7292,651,1,0,0,0,7293,
        7294,5,644,0,0,7294,7298,5,154,0,0,7295,7296,5,523,0,0,7296,7299,
        5,1679,0,0,7297,7299,3,674,337,0,7298,7295,1,0,0,0,7298,7297,1,0,
        0,0,7299,653,1,0,0,0,7300,7301,5,2153,0,0,7301,7302,5,2290,0,0,7302,
        7303,5,2343,0,0,7303,655,1,0,0,0,7304,7305,5,2153,0,0,7305,7306,
        5,2001,0,0,7306,7307,5,2343,0,0,7307,657,1,0,0,0,7308,7313,3,660,
        330,0,7309,7313,3,662,331,0,7310,7313,3,664,332,0,7311,7313,3,666,
        333,0,7312,7308,1,0,0,0,7312,7309,1,0,0,0,7312,7310,1,0,0,0,7312,
        7311,1,0,0,0,7313,659,1,0,0,0,7314,7315,7,73,0,0,7315,7316,5,1560,
        0,0,7316,7317,5,2343,0,0,7317,7318,5,580,0,0,7318,7319,5,204,0,0,
        7319,7321,5,2343,0,0,7320,7322,3,656,328,0,7321,7320,1,0,0,0,7321,
        7322,1,0,0,0,7322,7324,1,0,0,0,7323,7325,3,612,306,0,7324,7323,1,
        0,0,0,7324,7325,1,0,0,0,7325,7327,1,0,0,0,7326,7328,3,652,326,0,
        7327,7326,1,0,0,0,7327,7328,1,0,0,0,7328,7330,1,0,0,0,7329,7331,
        3,670,335,0,7330,7329,1,0,0,0,7330,7331,1,0,0,0,7331,661,1,0,0,0,
        7332,7333,5,381,0,0,7333,7334,5,1560,0,0,7334,7335,5,580,0,0,7335,
        7336,5,204,0,0,7336,7338,5,2343,0,0,7337,7339,3,612,306,0,7338,7337,
        1,0,0,0,7338,7339,1,0,0,0,7339,7340,1,0,0,0,7340,7342,3,652,326,
        0,7341,7343,3,670,335,0,7342,7341,1,0,0,0,7342,7343,1,0,0,0,7343,
        663,1,0,0,0,7344,7345,7,73,0,0,7345,7346,5,1560,0,0,7346,7347,5,
        2343,0,0,7347,7348,5,580,0,0,7348,7349,5,204,0,0,7349,7351,5,2343,
        0,0,7350,7352,3,656,328,0,7351,7350,1,0,0,0,7351,7352,1,0,0,0,7352,
        7353,1,0,0,0,7353,7355,5,2052,0,0,7354,7356,5,821,0,0,7355,7354,
        1,0,0,0,7355,7356,1,0,0,0,7356,7357,1,0,0,0,7357,7358,5,92,0,0,7358,
        7359,5,774,0,0,7359,7360,3,796,398,0,7360,665,1,0,0,0,7361,7362,
        5,381,0,0,7362,7363,5,1560,0,0,7363,7364,5,2343,0,0,7364,7365,5,
        2358,0,0,7365,7366,5,580,0,0,7366,7367,5,204,0,0,7367,7368,5,2343,
        0,0,7368,7370,5,588,0,0,7369,7371,5,821,0,0,7370,7369,1,0,0,0,7370,
        7371,1,0,0,0,7371,7372,1,0,0,0,7372,7373,5,92,0,0,7373,7374,5,774,
        0,0,7374,7375,3,796,398,0,7375,667,1,0,0,0,7376,7378,5,1708,0,0,
        7377,7379,5,2052,0,0,7378,7377,1,0,0,0,7378,7379,1,0,0,0,7379,7380,
        1,0,0,0,7380,7381,5,801,0,0,7381,7382,3,676,338,0,7382,7383,5,580,
        0,0,7383,7384,5,38,0,0,7384,7385,5,275,0,0,7385,669,1,0,0,0,7386,
        7387,5,2212,0,0,7387,7390,5,100,0,0,7388,7389,5,2153,0,0,7389,7391,
        5,2343,0,0,7390,7388,1,0,0,0,7390,7391,1,0,0,0,7391,671,1,0,0,0,
        7392,7393,5,644,0,0,7393,7394,5,154,0,0,7394,7395,3,674,337,0,7395,
        673,1,0,0,0,7396,7397,5,2344,0,0,7397,675,1,0,0,0,7398,7399,5,2343,
        0,0,7399,677,1,0,0,0,7400,7401,5,2344,0,0,7401,679,1,0,0,0,7402,
        7407,5,46,0,0,7403,7404,5,1999,0,0,7404,7408,3,2302,1151,0,7405,
        7406,5,675,0,0,7406,7408,3,2286,1143,0,7407,7403,1,0,0,0,7407,7405,
        1,0,0,0,7408,7410,1,0,0,0,7409,7411,3,682,341,0,7410,7409,1,0,0,
        0,7410,7411,1,0,0,0,7411,7416,1,0,0,0,7412,7413,5,46,0,0,7413,7414,
        5,210,0,0,7414,7416,3,474,237,0,7415,7402,1,0,0,0,7415,7412,1,0,
        0,0,7416,7429,1,0,0,0,7417,7430,3,684,342,0,7418,7419,5,813,0,0,
        7419,7420,5,181,0,0,7420,7422,5,1529,0,0,7421,7423,3,692,346,0,7422,
        7421,1,0,0,0,7422,7423,1,0,0,0,7423,7430,1,0,0,0,7424,7426,5,381,
        0,0,7425,7427,5,1865,0,0,7426,7425,1,0,0,0,7426,7427,1,0,0,0,7427,
        7428,1,0,0,0,7428,7430,5,1662,0,0,7429,7417,1,0,0,0,7429,7418,1,
        0,0,0,7429,7424,1,0,0,0,7430,681,1,0,0,0,7431,7448,5,1275,0,0,7432,
        7433,5,2347,0,0,7433,7434,3,1652,826,0,7434,7435,5,2348,0,0,7435,
        7449,1,0,0,0,7436,7437,5,580,0,0,7437,7438,5,2347,0,0,7438,7443,
        3,694,347,0,7439,7440,5,2353,0,0,7440,7442,3,694,347,0,7441,7439,
        1,0,0,0,7442,7445,1,0,0,0,7443,7441,1,0,0,0,7443,7444,1,0,0,0,7444,
        7446,1,0,0,0,7445,7443,1,0,0,0,7446,7447,5,2348,0,0,7447,7449,1,
        0,0,0,7448,7432,1,0,0,0,7448,7436,1,0,0,0,7449,7470,1,0,0,0,7450,
        7467,5,1691,0,0,7451,7452,5,2347,0,0,7452,7453,3,1158,579,0,7453,
        7454,5,2348,0,0,7454,7468,1,0,0,0,7455,7456,5,580,0,0,7456,7457,
        5,2347,0,0,7457,7462,3,696,348,0,7458,7459,5,2353,0,0,7459,7461,
        3,696,348,0,7460,7458,1,0,0,0,7461,7464,1,0,0,0,7462,7460,1,0,0,
        0,7462,7463,1,0,0,0,7463,7465,1,0,0,0,7464,7462,1,0,0,0,7465,7466,
        5,2348,0,0,7466,7468,1,0,0,0,7467,7451,1,0,0,0,7467,7455,1,0,0,0,
        7468,7470,1,0,0,0,7469,7431,1,0,0,0,7469,7450,1,0,0,0,7470,683,1,
        0,0,0,7471,7472,5,2160,0,0,7472,7473,5,1452,0,0,7473,7478,5,2114,
        0,0,7474,7475,5,1590,0,0,7475,7476,5,332,0,0,7476,7477,5,2052,0,
        0,7477,7479,5,1162,0,0,7478,7474,1,0,0,0,7478,7479,1,0,0,0,7479,
        7501,1,0,0,0,7480,7481,5,2160,0,0,7481,7492,5,1687,0,0,7482,7483,
        5,171,0,0,7483,7493,5,541,0,0,7484,7486,5,171,0,0,7485,7487,3,690,
        345,0,7486,7485,1,0,0,0,7486,7487,1,0,0,0,7487,7489,1,0,0,0,7488,
        7490,3,2230,1115,0,7489,7488,1,0,0,0,7489,7490,1,0,0,0,7490,7493,
        1,0,0,0,7491,7493,5,171,0,0,7492,7482,1,0,0,0,7492,7484,1,0,0,0,
        7492,7491,1,0,0,0,7492,7493,1,0,0,0,7493,7495,1,0,0,0,7494,7496,
        3,690,345,0,7495,7494,1,0,0,0,7495,7496,1,0,0,0,7496,7498,1,0,0,
        0,7497,7499,3,2230,1115,0,7498,7497,1,0,0,0,7498,7499,1,0,0,0,7499,
        7501,1,0,0,0,7500,7471,1,0,0,0,7500,7480,1,0,0,0,7501,685,1,0,0,
        0,7502,7504,5,247,0,0,7503,7505,5,1865,0,0,7504,7503,1,0,0,0,7504,
        7505,1,0,0,0,7505,7506,1,0,0,0,7506,7508,5,1662,0,0,7507,7509,3,
        688,344,0,7508,7507,1,0,0,0,7508,7509,1,0,0,0,7509,687,1,0,0,0,7510,
        7558,5,580,0,0,7511,7515,5,1999,0,0,7512,7514,3,688,344,0,7513,7512,
        1,0,0,0,7514,7517,1,0,0,0,7515,7513,1,0,0,0,7515,7516,1,0,0,0,7516,
        7559,1,0,0,0,7517,7515,1,0,0,0,7518,7537,5,38,0,0,7519,7521,5,671,
        0,0,7520,7519,1,0,0,0,7520,7521,1,0,0,0,7521,7522,1,0,0,0,7522,7525,
        5,227,0,0,7523,7524,5,1617,0,0,7524,7526,5,2341,0,0,7525,7523,1,
        0,0,0,7525,7526,1,0,0,0,7526,7530,1,0,0,0,7527,7529,3,688,344,0,
        7528,7527,1,0,0,0,7529,7532,1,0,0,0,7530,7528,1,0,0,0,7530,7531,
        1,0,0,0,7531,7538,1,0,0,0,7532,7530,1,0,0,0,7533,7535,5,821,0,0,
        7534,7533,1,0,0,0,7534,7535,1,0,0,0,7535,7536,1,0,0,0,7536,7538,
        5,672,0,0,7537,7520,1,0,0,0,7537,7534,1,0,0,0,7538,7559,1,0,0,0,
        7539,7542,5,227,0,0,7540,7541,5,1617,0,0,7541,7543,5,2341,0,0,7542,
        7540,1,0,0,0,7542,7543,1,0,0,0,7543,7548,1,0,0,0,7544,7545,3,2300,
        1150,0,7545,7546,5,1617,0,0,7546,7547,5,2341,0,0,7547,7549,1,0,0,
        0,7548,7544,1,0,0,0,7549,7550,1,0,0,0,7550,7548,1,0,0,0,7550,7551,
        1,0,0,0,7551,7555,1,0,0,0,7552,7554,3,688,344,0,7553,7552,1,0,0,
        0,7554,7557,1,0,0,0,7555,7553,1,0,0,0,7555,7556,1,0,0,0,7556,7559,
        1,0,0,0,7557,7555,1,0,0,0,7558,7511,1,0,0,0,7558,7518,1,0,0,0,7558,
        7539,1,0,0,0,7559,689,1,0,0,0,7560,7561,7,74,0,0,7561,691,1,0,0,
        0,7562,7564,5,735,0,0,7563,7565,3,2302,1151,0,7564,7563,1,0,0,0,
        7564,7565,1,0,0,0,7565,693,1,0,0,0,7566,7570,3,2150,1075,0,7567,
        7568,5,2020,0,0,7568,7570,3,2360,1180,0,7569,7566,1,0,0,0,7569,7567,
        1,0,0,0,7570,695,1,0,0,0,7571,7575,3,2150,1075,0,7572,7573,5,2020,
        0,0,7573,7575,3,2360,1180,0,7574,7571,1,0,0,0,7574,7572,1,0,0,0,
        7575,697,1,0,0,0,7576,7577,5,75,0,0,7577,7578,5,1662,0,0,7578,7581,
        5,2212,0,0,7579,7582,3,700,350,0,7580,7582,3,702,351,0,7581,7579,
        1,0,0,0,7581,7580,1,0,0,0,7582,7584,1,0,0,0,7583,7585,3,722,361,
        0,7584,7583,1,0,0,0,7584,7585,1,0,0,0,7585,699,1,0,0,0,7586,7587,
        5,227,0,0,7587,7588,3,2302,1151,0,7588,7589,5,2340,0,0,7589,7597,
        3,2300,1150,0,7590,7591,5,2353,0,0,7591,7592,3,2302,1151,0,7592,
        7593,5,2340,0,0,7593,7594,3,2300,1150,0,7594,7596,1,0,0,0,7595,7590,
        1,0,0,0,7596,7599,1,0,0,0,7597,7595,1,0,0,0,7597,7598,1,0,0,0,7598,
        7600,1,0,0,0,7599,7597,1,0,0,0,7600,7601,3,706,353,0,7601,701,1,
        0,0,0,7602,7603,5,593,0,0,7603,7608,3,2278,1139,0,7604,7605,5,2353,
        0,0,7605,7607,3,2278,1139,0,7606,7604,1,0,0,0,7607,7610,1,0,0,0,
        7608,7606,1,0,0,0,7608,7609,1,0,0,0,7609,7648,1,0,0,0,7610,7608,
        1,0,0,0,7611,7612,5,1258,0,0,7612,7617,3,2248,1124,0,7613,7614,5,
        2353,0,0,7614,7616,3,2248,1124,0,7615,7613,1,0,0,0,7616,7619,1,0,
        0,0,7617,7615,1,0,0,0,7617,7618,1,0,0,0,7618,7648,1,0,0,0,7619,7617,
        1,0,0,0,7620,7621,5,2075,0,0,7621,7626,3,2272,1136,0,7622,7623,5,
        2353,0,0,7623,7625,3,2272,1136,0,7624,7622,1,0,0,0,7625,7628,1,0,
        0,0,7626,7624,1,0,0,0,7626,7627,1,0,0,0,7627,7648,1,0,0,0,7628,7626,
        1,0,0,0,7629,7630,5,672,0,0,7630,7635,3,2286,1143,0,7631,7632,5,
        2353,0,0,7632,7634,3,2286,1143,0,7633,7631,1,0,0,0,7634,7637,1,0,
        0,0,7635,7633,1,0,0,0,7635,7636,1,0,0,0,7636,7648,1,0,0,0,7637,7635,
        1,0,0,0,7638,7639,5,690,0,0,7639,7644,3,704,352,0,7640,7641,5,2353,
        0,0,7641,7643,3,704,352,0,7642,7640,1,0,0,0,7643,7646,1,0,0,0,7644,
        7642,1,0,0,0,7644,7645,1,0,0,0,7645,7648,1,0,0,0,7646,7644,1,0,0,
        0,7647,7602,1,0,0,0,7647,7611,1,0,0,0,7647,7620,1,0,0,0,7647,7629,
        1,0,0,0,7647,7638,1,0,0,0,7648,7660,1,0,0,0,7649,7661,3,706,353,
        0,7650,7653,3,710,355,0,7651,7652,5,2353,0,0,7652,7654,3,718,359,
        0,7653,7651,1,0,0,0,7653,7654,1,0,0,0,7654,7661,1,0,0,0,7655,7658,
        3,718,359,0,7656,7657,5,2353,0,0,7657,7659,3,710,355,0,7658,7656,
        1,0,0,0,7658,7659,1,0,0,0,7659,7661,1,0,0,0,7660,7649,1,0,0,0,7660,
        7650,1,0,0,0,7660,7655,1,0,0,0,7661,703,1,0,0,0,7662,7663,3,2364,
        1182,0,7663,705,1,0,0,0,7664,7667,5,2153,0,0,7665,7668,3,708,354,
        0,7666,7668,5,1162,0,0,7667,7665,1,0,0,0,7667,7666,1,0,0,0,7668,
        707,1,0,0,0,7669,7670,3,2370,1185,0,7670,709,1,0,0,0,7671,7672,5,
        368,0,0,7672,7673,5,296,0,0,7673,7674,5,2347,0,0,7674,7675,3,712,
        356,0,7675,7676,5,2353,0,0,7676,7677,3,714,357,0,7677,7678,5,2353,
        0,0,7678,7679,3,716,358,0,7679,7680,5,2348,0,0,7680,711,1,0,0,0,
        7681,7682,5,2341,0,0,7682,713,1,0,0,0,7683,7684,5,2341,0,0,7684,
        715,1,0,0,0,7685,7686,5,2341,0,0,7686,717,1,0,0,0,7687,7688,5,368,
        0,0,7688,7689,5,1568,0,0,7689,7690,3,720,360,0,7690,719,1,0,0,0,
        7691,7692,5,2341,0,0,7692,721,1,0,0,0,7693,7694,5,2212,0,0,7694,
        7695,7,75,0,0,7695,7696,5,851,0,0,7696,7697,5,1678,0,0,7697,7698,
        5,1997,0,0,7698,723,1,0,0,0,7699,7700,4,362,0,0,7700,7744,5,83,0,
        0,7701,7702,5,1339,0,0,7702,7712,3,726,363,0,7703,7704,7,76,0,0,
        7704,7709,3,738,369,0,7705,7706,5,2353,0,0,7706,7708,3,738,369,0,
        7707,7705,1,0,0,0,7708,7711,1,0,0,0,7709,7707,1,0,0,0,7709,7710,
        1,0,0,0,7710,7713,1,0,0,0,7711,7709,1,0,0,0,7712,7703,1,0,0,0,7712,
        7713,1,0,0,0,7713,7719,1,0,0,0,7714,7716,5,2203,0,0,7715,7717,5,
        1138,0,0,7716,7715,1,0,0,0,7716,7717,1,0,0,0,7717,7718,1,0,0,0,7718,
        7720,5,1702,0,0,7719,7714,1,0,0,0,7719,7720,1,0,0,0,7720,7745,1,
        0,0,0,7721,7722,5,281,0,0,7722,7723,5,944,0,0,7723,7724,3,1024,512,
        0,7724,7725,5,82,0,0,7725,7730,3,2236,1118,0,7726,7727,5,2353,0,
        0,7727,7729,3,2236,1118,0,7728,7726,1,0,0,0,7729,7732,1,0,0,0,7730,
        7728,1,0,0,0,7730,7731,1,0,0,0,7731,7742,1,0,0,0,7732,7730,1,0,0,
        0,7733,7734,5,154,0,0,7734,7739,3,738,369,0,7735,7736,5,2353,0,0,
        7736,7738,3,738,369,0,7737,7735,1,0,0,0,7738,7741,1,0,0,0,7739,7737,
        1,0,0,0,7739,7740,1,0,0,0,7740,7743,1,0,0,0,7741,7739,1,0,0,0,7742,
        7733,1,0,0,0,7742,7743,1,0,0,0,7743,7745,1,0,0,0,7744,7701,1,0,0,
        0,7744,7721,1,0,0,0,7745,725,1,0,0,0,7746,7747,3,2362,1181,0,7747,
        727,1,0,0,0,7748,7759,5,83,0,0,7749,7754,3,734,367,0,7750,7755,3,
        736,368,0,7751,7752,5,696,0,0,7752,7753,5,1586,0,0,7753,7755,5,319,
        0,0,7754,7750,1,0,0,0,7754,7751,1,0,0,0,7754,7755,1,0,0,0,7755,7760,
        1,0,0,0,7756,7760,3,740,370,0,7757,7760,5,965,0,0,7758,7760,3,730,
        365,0,7759,7749,1,0,0,0,7759,7756,1,0,0,0,7759,7757,1,0,0,0,7759,
        7758,1,0,0,0,7760,7763,1,0,0,0,7761,7762,5,154,0,0,7762,7764,7,77,
        0,0,7763,7761,1,0,0,0,7763,7764,1,0,0,0,7764,7770,1,0,0,0,7765,7767,
        5,2203,0,0,7766,7768,5,1138,0,0,7767,7766,1,0,0,0,7767,7768,1,0,
        0,0,7768,7769,1,0,0,0,7769,7771,5,1702,0,0,7770,7765,1,0,0,0,7770,
        7771,1,0,0,0,7771,7773,1,0,0,0,7772,7774,3,732,366,0,7773,7772,1,
        0,0,0,7773,7774,1,0,0,0,7774,729,1,0,0,0,7775,7776,4,365,1,0,7776,
        7777,5,402,0,0,7777,7778,3,736,368,0,7778,731,1,0,0,0,7779,7780,
        4,366,2,0,7780,7781,5,274,0,0,7781,7782,5,2369,0,0,7782,7783,7,78,
        0,0,7783,733,1,0,0,0,7784,7790,3,752,376,0,7785,7787,5,38,0,0,7786,
        7788,5,1658,0,0,7787,7786,1,0,0,0,7787,7788,1,0,0,0,7788,7790,1,
        0,0,0,7789,7784,1,0,0,0,7789,7785,1,0,0,0,7790,7801,1,0,0,0,7791,
        7797,5,2353,0,0,7792,7798,3,752,376,0,7793,7795,5,38,0,0,7794,7796,
        5,1658,0,0,7795,7794,1,0,0,0,7795,7796,1,0,0,0,7796,7798,1,0,0,0,
        7797,7792,1,0,0,0,7797,7793,1,0,0,0,7798,7800,1,0,0,0,7799,7791,
        1,0,0,0,7800,7803,1,0,0,0,7801,7799,1,0,0,0,7801,7802,1,0,0,0,7802,
        7821,1,0,0,0,7803,7801,1,0,0,0,7804,7808,3,2352,1176,0,7805,7806,
        5,38,0,0,7806,7808,5,1384,0,0,7807,7804,1,0,0,0,7807,7805,1,0,0,
        0,7808,7817,1,0,0,0,7809,7813,5,2353,0,0,7810,7814,3,2352,1176,0,
        7811,7812,5,38,0,0,7812,7814,5,1384,0,0,7813,7810,1,0,0,0,7813,7811,
        1,0,0,0,7814,7816,1,0,0,0,7815,7809,1,0,0,0,7816,7819,1,0,0,0,7817,
        7815,1,0,0,0,7817,7818,1,0,0,0,7818,7821,1,0,0,0,7819,7817,1,0,0,
        0,7820,7789,1,0,0,0,7820,7807,1,0,0,0,7821,735,1,0,0,0,7822,7823,
        5,154,0,0,7823,7828,3,738,369,0,7824,7825,5,2353,0,0,7825,7827,3,
        738,369,0,7826,7824,1,0,0,0,7827,7830,1,0,0,0,7828,7826,1,0,0,0,
        7828,7829,1,0,0,0,7829,737,1,0,0,0,7830,7828,1,0,0,0,7831,7832,3,
        2370,1185,0,7832,739,1,0,0,0,7833,7838,3,742,371,0,7834,7835,5,2353,
        0,0,7835,7837,3,742,371,0,7836,7834,1,0,0,0,7837,7840,1,0,0,0,7838,
        7836,1,0,0,0,7838,7839,1,0,0,0,7839,7843,1,0,0,0,7840,7838,1,0,0,
        0,7841,7843,5,38,0,0,7842,7833,1,0,0,0,7842,7841,1,0,0,0,7843,7844,
        1,0,0,0,7844,7845,3,744,372,0,7845,741,1,0,0,0,7846,7847,7,55,0,
        0,7847,743,1,0,0,0,7848,7861,5,1193,0,0,7849,7862,3,748,374,0,7850,
        7851,5,401,0,0,7851,7862,3,2370,1185,0,7852,7853,5,901,0,0,7853,
        7854,5,917,0,0,7854,7862,3,746,373,0,7855,7856,4,372,3,0,7856,7857,
        5,1639,0,0,7857,7858,5,2064,0,0,7858,7859,5,1388,0,0,7859,7862,3,
        750,375,0,7860,7862,5,368,0,0,7861,7849,1,0,0,0,7861,7850,1,0,0,
        0,7861,7852,1,0,0,0,7861,7855,1,0,0,0,7861,7860,1,0,0,0,7862,745,
        1,0,0,0,7863,7864,3,2364,1182,0,7864,7865,5,2340,0,0,7865,7867,1,
        0,0,0,7866,7863,1,0,0,0,7866,7867,1,0,0,0,7867,7868,1,0,0,0,7868,
        7869,3,2364,1182,0,7869,747,1,0,0,0,7870,7871,3,2364,1182,0,7871,
        7872,5,2340,0,0,7872,7874,1,0,0,0,7873,7870,1,0,0,0,7873,7874,1,
        0,0,0,7874,7875,1,0,0,0,7875,7876,3,2364,1182,0,7876,749,1,0,0,0,
        7877,7878,3,2364,1182,0,7878,7879,5,2340,0,0,7879,7881,1,0,0,0,7880,
        7877,1,0,0,0,7880,7881,1,0,0,0,7881,7882,1,0,0,0,7882,7883,3,2364,
        1182,0,7883,751,1,0,0,0,7884,7885,5,42,0,0,7885,7955,5,1865,0,0,
        7886,7955,5,210,0,0,7887,7955,5,281,0,0,7888,7889,5,333,0,0,7889,
        7955,5,812,0,0,7890,7955,5,398,0,0,7891,7955,5,401,0,0,7892,7955,
        5,675,0,0,7893,7894,5,865,0,0,7894,7955,5,2190,0,0,7895,7896,5,1138,
        0,0,7896,7955,5,508,0,0,7897,7955,5,1245,0,0,7898,7899,4,376,4,0,
        7899,7900,5,1336,0,0,7900,7955,5,333,0,0,7901,7955,5,1386,0,0,7902,
        7955,5,1388,0,0,7903,7904,5,1398,0,0,7904,7905,5,333,0,0,7905,7955,
        5,812,0,0,7906,7907,5,1398,0,0,7907,7955,5,1712,0,0,7908,7955,5,
        1515,0,0,7909,7910,5,1518,0,0,7910,7955,5,1567,0,0,7911,7955,5,1575,
        0,0,7912,7955,5,1586,0,0,7913,7955,5,1712,0,0,7914,7915,5,1865,0,
        0,7915,7955,5,83,0,0,7916,7917,5,1865,0,0,7917,7955,5,607,0,0,7918,
        7955,5,1999,0,0,7919,7955,5,1996,0,0,7920,7955,5,2067,0,0,7921,7955,
        5,2076,0,0,7922,7955,5,2144,0,0,7923,7955,5,2190,0,0,7924,7925,5,
        42,0,0,7925,7955,5,1575,0,0,7926,7927,5,42,0,0,7927,7955,5,1999,
        0,0,7928,7929,5,230,0,0,7929,7955,5,1999,0,0,7930,7931,5,381,0,0,
        7931,7955,5,1999,0,0,7932,7933,5,505,0,0,7933,7955,5,1386,0,0,7934,
        7935,5,607,0,0,7935,7955,5,401,0,0,7936,7937,5,607,0,0,7937,7955,
        5,1386,0,0,7938,7939,5,607,0,0,7939,7955,5,1575,0,0,7940,7941,5,
        607,0,0,7941,7955,5,1999,0,0,7942,7943,5,607,0,0,7943,7955,5,2076,
        0,0,7944,7945,5,713,0,0,7945,7955,5,1999,0,0,7946,7947,5,829,0,0,
        7947,7955,5,1999,0,0,7948,7949,5,1569,0,0,7949,7955,5,1575,0,0,7950,
        7951,5,1569,0,0,7951,7955,5,1999,0,0,7952,7953,5,2114,0,0,7953,7955,
        5,1999,0,0,7954,7884,1,0,0,0,7954,7886,1,0,0,0,7954,7887,1,0,0,0,
        7954,7888,1,0,0,0,7954,7890,1,0,0,0,7954,7891,1,0,0,0,7954,7892,
        1,0,0,0,7954,7893,1,0,0,0,7954,7895,1,0,0,0,7954,7897,1,0,0,0,7954,
        7898,1,0,0,0,7954,7901,1,0,0,0,7954,7902,1,0,0,0,7954,7903,1,0,0,
        0,7954,7906,1,0,0,0,7954,7908,1,0,0,0,7954,7909,1,0,0,0,7954,7911,
        1,0,0,0,7954,7912,1,0,0,0,7954,7913,1,0,0,0,7954,7914,1,0,0,0,7954,
        7916,1,0,0,0,7954,7918,1,0,0,0,7954,7919,1,0,0,0,7954,7920,1,0,0,
        0,7954,7921,1,0,0,0,7954,7922,1,0,0,0,7954,7923,1,0,0,0,7954,7924,
        1,0,0,0,7954,7926,1,0,0,0,7954,7928,1,0,0,0,7954,7930,1,0,0,0,7954,
        7932,1,0,0,0,7954,7934,1,0,0,0,7954,7936,1,0,0,0,7954,7938,1,0,0,
        0,7954,7940,1,0,0,0,7954,7942,1,0,0,0,7954,7944,1,0,0,0,7954,7946,
        1,0,0,0,7954,7948,1,0,0,0,7954,7950,1,0,0,0,7954,7952,1,0,0,0,7955,
        753,1,0,0,0,7956,7957,5,438,0,0,7957,7958,5,675,0,0,7958,7961,3,
        2286,1143,0,7959,7960,5,650,0,0,7960,7962,5,508,0,0,7961,7959,1,
        0,0,0,7961,7962,1,0,0,0,7962,755,1,0,0,0,7963,7964,5,409,0,0,7964,
        7965,5,1662,0,0,7965,8085,5,588,0,0,7966,7970,5,227,0,0,7967,7968,
        3,2244,1122,0,7968,7969,5,2340,0,0,7969,7971,1,0,0,0,7970,7967,1,
        0,0,0,7970,7971,1,0,0,0,7971,7972,1,0,0,0,7972,7973,3,2364,1182,
        0,7973,7974,5,2340,0,0,7974,7987,3,2364,1182,0,7975,7979,5,2353,
        0,0,7976,7977,3,2244,1122,0,7977,7978,5,2340,0,0,7978,7980,1,0,0,
        0,7979,7976,1,0,0,0,7979,7980,1,0,0,0,7980,7981,1,0,0,0,7981,7982,
        3,2364,1182,0,7982,7983,5,2340,0,0,7983,7984,3,2364,1182,0,7984,
        7986,1,0,0,0,7985,7975,1,0,0,0,7986,7989,1,0,0,0,7987,7985,1,0,0,
        0,7987,7988,1,0,0,0,7988,8086,1,0,0,0,7989,7987,1,0,0,0,7990,7994,
        5,593,0,0,7991,7992,3,2244,1122,0,7992,7993,5,2340,0,0,7993,7995,
        1,0,0,0,7994,7991,1,0,0,0,7994,7995,1,0,0,0,7995,7996,1,0,0,0,7996,
        8006,3,2364,1182,0,7997,8001,5,2353,0,0,7998,7999,3,2244,1122,0,
        7999,8000,5,2340,0,0,8000,8002,1,0,0,0,8001,7998,1,0,0,0,8001,8002,
        1,0,0,0,8002,8003,1,0,0,0,8003,8005,3,2364,1182,0,8004,7997,1,0,
        0,0,8005,8008,1,0,0,0,8006,8004,1,0,0,0,8006,8007,1,0,0,0,8007,8086,
        1,0,0,0,8008,8006,1,0,0,0,8009,8013,5,1258,0,0,8010,8011,3,2244,
        1122,0,8011,8012,5,2340,0,0,8012,8014,1,0,0,0,8013,8010,1,0,0,0,
        8013,8014,1,0,0,0,8014,8015,1,0,0,0,8015,8025,3,2364,1182,0,8016,
        8020,5,2353,0,0,8017,8018,3,2244,1122,0,8018,8019,5,2340,0,0,8019,
        8021,1,0,0,0,8020,8017,1,0,0,0,8020,8021,1,0,0,0,8021,8022,1,0,0,
        0,8022,8024,3,2364,1182,0,8023,8016,1,0,0,0,8024,8027,1,0,0,0,8025,
        8023,1,0,0,0,8025,8026,1,0,0,0,8026,8086,1,0,0,0,8027,8025,1,0,0,
        0,8028,8032,5,2075,0,0,8029,8030,3,2244,1122,0,8030,8031,5,2340,
        0,0,8031,8033,1,0,0,0,8032,8029,1,0,0,0,8032,8033,1,0,0,0,8033,8034,
        1,0,0,0,8034,8044,3,2364,1182,0,8035,8039,5,2353,0,0,8036,8037,3,
        2244,1122,0,8037,8038,5,2340,0,0,8038,8040,1,0,0,0,8039,8036,1,0,
        0,0,8039,8040,1,0,0,0,8040,8041,1,0,0,0,8041,8043,3,2364,1182,0,
        8042,8035,1,0,0,0,8043,8046,1,0,0,0,8044,8042,1,0,0,0,8044,8045,
        1,0,0,0,8045,8086,1,0,0,0,8046,8044,1,0,0,0,8047,8051,5,672,0,0,
        8048,8049,3,2244,1122,0,8049,8050,5,2340,0,0,8050,8052,1,0,0,0,8051,
        8048,1,0,0,0,8051,8052,1,0,0,0,8052,8053,1,0,0,0,8053,8063,3,2364,
        1182,0,8054,8058,5,2353,0,0,8055,8056,3,2244,1122,0,8056,8057,5,
        2340,0,0,8057,8059,1,0,0,0,8058,8055,1,0,0,0,8058,8059,1,0,0,0,8059,
        8060,1,0,0,0,8060,8062,3,2364,1182,0,8061,8054,1,0,0,0,8062,8065,
        1,0,0,0,8063,8061,1,0,0,0,8063,8064,1,0,0,0,8064,8086,1,0,0,0,8065,
        8063,1,0,0,0,8066,8070,5,690,0,0,8067,8068,3,2244,1122,0,8068,8069,
        5,2340,0,0,8069,8071,1,0,0,0,8070,8067,1,0,0,0,8070,8071,1,0,0,0,
        8071,8072,1,0,0,0,8072,8082,3,2364,1182,0,8073,8077,5,2353,0,0,8074,
        8075,3,2244,1122,0,8075,8076,5,2340,0,0,8076,8078,1,0,0,0,8077,8074,
        1,0,0,0,8077,8078,1,0,0,0,8078,8079,1,0,0,0,8079,8081,3,2364,1182,
        0,8080,8073,1,0,0,0,8081,8084,1,0,0,0,8082,8080,1,0,0,0,8082,8083,
        1,0,0,0,8083,8086,1,0,0,0,8084,8082,1,0,0,0,8085,7966,1,0,0,0,8085,
        7990,1,0,0,0,8085,8009,1,0,0,0,8085,8028,1,0,0,0,8085,8047,1,0,0,
        0,8085,8066,1,0,0,0,8086,8088,1,0,0,0,8087,8089,5,576,0,0,8088,8087,
        1,0,0,0,8088,8089,1,0,0,0,8089,757,1,0,0,0,8090,8091,5,438,0,0,8091,
        8095,5,689,0,0,8092,8093,3,2244,1122,0,8093,8094,5,2340,0,0,8094,
        8096,1,0,0,0,8095,8092,1,0,0,0,8095,8096,1,0,0,0,8096,8097,1,0,0,
        0,8097,8099,3,2364,1182,0,8098,8100,5,576,0,0,8099,8098,1,0,0,0,
        8099,8100,1,0,0,0,8100,759,1,0,0,0,8101,8102,5,438,0,0,8102,8103,
        5,704,0,0,8103,8104,5,748,0,0,8104,8108,5,609,0,0,8105,8106,3,2244,
        1122,0,8106,8107,5,2340,0,0,8107,8109,1,0,0,0,8108,8105,1,0,0,0,
        8108,8109,1,0,0,0,8109,8110,1,0,0,0,8110,8111,3,2364,1182,0,8111,
        761,1,0,0,0,8112,8113,5,565,0,0,8113,8114,5,1999,0,0,8114,8119,3,
        2302,1151,0,8115,8116,5,2353,0,0,8116,8118,3,2302,1151,0,8117,8115,
        1,0,0,0,8118,8121,1,0,0,0,8119,8117,1,0,0,0,8119,8120,1,0,0,0,8120,
        8122,1,0,0,0,8121,8119,1,0,0,0,8122,8141,5,2052,0,0,8123,8124,7,
        79,0,0,8124,8129,3,2052,1026,0,8125,8126,5,1496,0,0,8126,8127,5,
        1338,0,0,8127,8129,3,764,382,0,8128,8123,1,0,0,0,8128,8125,1,0,0,
        0,8129,8132,1,0,0,0,8130,8131,7,17,0,0,8131,8133,5,2066,0,0,8132,
        8130,1,0,0,0,8132,8133,1,0,0,0,8133,8142,1,0,0,0,8134,8135,5,109,
        0,0,8135,8139,5,438,0,0,8136,8137,5,1481,0,0,8137,8138,5,2052,0,
        0,8138,8140,3,2302,1151,0,8139,8136,1,0,0,0,8139,8140,1,0,0,0,8140,
        8142,1,0,0,0,8141,8128,1,0,0,0,8141,8134,1,0,0,0,8142,763,1,0,0,
        0,8143,8148,3,2362,1181,0,8144,8145,5,2340,0,0,8145,8147,3,2364,
        1182,0,8146,8144,1,0,0,0,8147,8150,1,0,0,0,8148,8146,1,0,0,0,8148,
        8149,1,0,0,0,8149,765,1,0,0,0,8150,8148,1,0,0,0,8151,8165,5,1400,
        0,0,8152,8153,7,80,0,0,8153,8166,3,2364,1182,0,8154,8156,5,1996,
        0,0,8155,8157,5,1590,0,0,8156,8155,1,0,0,0,8156,8157,1,0,0,0,8157,
        8158,1,0,0,0,8158,8161,3,2364,1182,0,8159,8160,5,2144,0,0,8160,8162,
        3,2364,1182,0,8161,8159,1,0,0,0,8161,8162,1,0,0,0,8162,8166,1,0,
        0,0,8163,8166,5,1440,0,0,8164,8166,5,349,0,0,8165,8152,1,0,0,0,8165,
        8154,1,0,0,0,8165,8163,1,0,0,0,8165,8164,1,0,0,0,8166,767,1,0,0,
        0,8167,8179,5,1004,0,0,8168,8170,3,734,367,0,8169,8171,3,736,368,
        0,8170,8169,1,0,0,0,8170,8171,1,0,0,0,8171,8180,1,0,0,0,8172,8180,
        3,740,370,0,8173,8180,5,965,0,0,8174,8175,5,402,0,0,8175,8177,5,
        816,0,0,8176,8178,3,736,368,0,8177,8176,1,0,0,0,8177,8178,1,0,0,
        0,8178,8180,1,0,0,0,8179,8168,1,0,0,0,8179,8172,1,0,0,0,8179,8173,
        1,0,0,0,8179,8174,1,0,0,0,8180,8186,1,0,0,0,8181,8183,5,2203,0,0,
        8182,8184,5,1138,0,0,8183,8182,1,0,0,0,8183,8184,1,0,0,0,8184,8185,
        1,0,0,0,8185,8187,5,1702,0,0,8186,8181,1,0,0,0,8186,8187,1,0,0,0,
        8187,8189,1,0,0,0,8188,8190,3,774,387,0,8189,8188,1,0,0,0,8189,8190,
        1,0,0,0,8190,769,1,0,0,0,8191,8192,5,1481,0,0,8192,8193,3,748,374,
        0,8193,8194,5,2052,0,0,8194,8195,3,748,374,0,8195,771,1,0,0,0,8196,
        8208,5,607,0,0,8197,8199,5,2353,0,0,8198,8197,1,0,0,0,8198,8199,
        1,0,0,0,8199,8206,1,0,0,0,8200,8207,3,2266,1133,0,8201,8207,3,2352,
        1176,0,8202,8204,3,2350,1175,0,8203,8205,3,2320,1160,0,8204,8203,
        1,0,0,0,8204,8205,1,0,0,0,8205,8207,1,0,0,0,8206,8200,1,0,0,0,8206,
        8201,1,0,0,0,8206,8202,1,0,0,0,8207,8209,1,0,0,0,8208,8198,1,0,0,
        0,8209,8210,1,0,0,0,8210,8208,1,0,0,0,8210,8211,1,0,0,0,8211,8214,
        1,0,0,0,8212,8213,5,1193,0,0,8213,8215,3,2316,1158,0,8214,8212,1,
        0,0,0,8214,8215,1,0,0,0,8215,8216,1,0,0,0,8216,8219,5,2052,0,0,8217,
        8220,3,2264,1132,0,8218,8220,5,1398,0,0,8219,8217,1,0,0,0,8219,8218,
        1,0,0,0,8220,8228,1,0,0,0,8221,8224,5,2353,0,0,8222,8225,3,2264,
        1132,0,8223,8225,5,1398,0,0,8224,8222,1,0,0,0,8224,8223,1,0,0,0,
        8225,8227,1,0,0,0,8226,8221,1,0,0,0,8227,8230,1,0,0,0,8228,8226,
        1,0,0,0,8228,8229,1,0,0,0,8229,8234,1,0,0,0,8230,8228,1,0,0,0,8231,
        8232,5,2212,0,0,8232,8233,7,81,0,0,8233,8235,5,1206,0,0,8234,8231,
        1,0,0,0,8234,8235,1,0,0,0,8235,8239,1,0,0,0,8236,8237,5,2212,0,0,
        8237,8238,5,633,0,0,8238,8240,5,1206,0,0,8239,8236,1,0,0,0,8239,
        8240,1,0,0,0,8240,8244,1,0,0,0,8241,8242,5,2212,0,0,8242,8243,5,
        607,0,0,8243,8245,5,1206,0,0,8244,8241,1,0,0,0,8244,8245,1,0,0,0,
        8245,8247,1,0,0,0,8246,8248,3,774,387,0,8247,8246,1,0,0,0,8247,8248,
        1,0,0,0,8248,773,1,0,0,0,8249,8250,5,274,0,0,8250,8251,5,2369,0,
        0,8251,8252,7,78,0,0,8252,775,1,0,0,0,8253,8262,5,1511,0,0,8254,
        8257,3,778,389,0,8255,8257,3,782,391,0,8256,8254,1,0,0,0,8256,8255,
        1,0,0,0,8257,8259,1,0,0,0,8258,8260,3,774,387,0,8259,8258,1,0,0,
        0,8259,8260,1,0,0,0,8260,8263,1,0,0,0,8261,8263,3,786,393,0,8262,
        8256,1,0,0,0,8262,8261,1,0,0,0,8263,777,1,0,0,0,8264,8269,3,2352,
        1176,0,8265,8269,3,2266,1133,0,8266,8267,5,38,0,0,8267,8269,5,1384,
        0,0,8268,8264,1,0,0,0,8268,8265,1,0,0,0,8268,8266,1,0,0,0,8269,8270,
        1,0,0,0,8270,8271,5,588,0,0,8271,8272,3,780,390,0,8272,779,1,0,0,
        0,8273,8276,3,2364,1182,0,8274,8276,5,1398,0,0,8275,8273,1,0,0,0,
        8275,8274,1,0,0,0,8276,8284,1,0,0,0,8277,8280,5,2353,0,0,8278,8281,
        3,2364,1182,0,8279,8281,5,1398,0,0,8280,8278,1,0,0,0,8280,8279,1,
        0,0,0,8281,8283,1,0,0,0,8282,8277,1,0,0,0,8283,8286,1,0,0,0,8284,
        8282,1,0,0,0,8284,8285,1,0,0,0,8285,781,1,0,0,0,8286,8284,1,0,0,
        0,8287,8293,3,2350,1175,0,8288,8290,5,38,0,0,8289,8291,5,1384,0,
        0,8290,8289,1,0,0,0,8290,8291,1,0,0,0,8291,8293,1,0,0,0,8292,8287,
        1,0,0,0,8292,8288,1,0,0,0,8293,8304,1,0,0,0,8294,8300,5,2353,0,0,
        8295,8301,3,2350,1175,0,8296,8298,5,38,0,0,8297,8299,5,1384,0,0,
        8298,8297,1,0,0,0,8298,8299,1,0,0,0,8299,8301,1,0,0,0,8300,8295,
        1,0,0,0,8300,8296,1,0,0,0,8301,8303,1,0,0,0,8302,8294,1,0,0,0,8303,
        8306,1,0,0,0,8304,8302,1,0,0,0,8304,8305,1,0,0,0,8305,8307,1,0,0,
        0,8306,8304,1,0,0,0,8307,8308,3,784,392,0,8308,8309,5,588,0,0,8309,
        8313,3,780,390,0,8310,8311,5,171,0,0,8311,8314,5,272,0,0,8312,8314,
        5,576,0,0,8313,8310,1,0,0,0,8313,8312,1,0,0,0,8313,8314,1,0,0,0,
        8314,783,1,0,0,0,8315,8360,5,1193,0,0,8316,8317,3,2244,1122,0,8317,
        8318,5,2340,0,0,8318,8320,1,0,0,0,8319,8316,1,0,0,0,8319,8320,1,
        0,0,0,8320,8321,1,0,0,0,8321,8361,3,2364,1182,0,8322,8323,5,2144,
        0,0,8323,8328,3,2364,1182,0,8324,8325,5,2353,0,0,8325,8327,3,2364,
        1182,0,8326,8324,1,0,0,0,8327,8330,1,0,0,0,8328,8326,1,0,0,0,8328,
        8329,1,0,0,0,8329,8361,1,0,0,0,8330,8328,1,0,0,0,8331,8332,5,401,
        0,0,8332,8361,3,794,397,0,8333,8334,5,452,0,0,8334,8361,3,1418,709,
        0,8335,8336,5,901,0,0,8336,8340,5,917,0,0,8337,8338,3,2244,1122,
        0,8338,8339,5,2340,0,0,8339,8341,1,0,0,0,8340,8337,1,0,0,0,8340,
        8341,1,0,0,0,8341,8342,1,0,0,0,8342,8361,3,2364,1182,0,8343,8344,
        5,746,0,0,8344,8348,7,82,0,0,8345,8346,3,2244,1122,0,8346,8347,5,
        2340,0,0,8347,8349,1,0,0,0,8348,8345,1,0,0,0,8348,8349,1,0,0,0,8349,
        8350,1,0,0,0,8350,8361,3,2364,1182,0,8351,8352,5,1639,0,0,8352,8353,
        5,2064,0,0,8353,8357,5,1388,0,0,8354,8355,3,2244,1122,0,8355,8356,
        5,2340,0,0,8356,8358,1,0,0,0,8357,8354,1,0,0,0,8357,8358,1,0,0,0,
        8358,8359,1,0,0,0,8359,8361,3,2364,1182,0,8360,8319,1,0,0,0,8360,
        8322,1,0,0,0,8360,8331,1,0,0,0,8360,8333,1,0,0,0,8360,8335,1,0,0,
        0,8360,8343,1,0,0,0,8360,8351,1,0,0,0,8361,785,1,0,0,0,8362,8367,
        3,2266,1133,0,8363,8364,5,2353,0,0,8364,8366,3,2266,1133,0,8365,
        8363,1,0,0,0,8366,8369,1,0,0,0,8367,8365,1,0,0,0,8367,8368,1,0,0,
        0,8368,8372,1,0,0,0,8369,8367,1,0,0,0,8370,8372,5,38,0,0,8371,8362,
        1,0,0,0,8371,8370,1,0,0,0,8372,8373,1,0,0,0,8373,8374,5,588,0,0,
        8374,8379,3,788,394,0,8375,8376,5,2353,0,0,8376,8378,3,788,394,0,
        8377,8375,1,0,0,0,8378,8381,1,0,0,0,8379,8377,1,0,0,0,8379,8380,
        1,0,0,0,8380,787,1,0,0,0,8381,8379,1,0,0,0,8382,8386,7,83,0,0,8383,
        8384,3,2244,1122,0,8384,8385,5,2340,0,0,8385,8387,1,0,0,0,8386,8383,
        1,0,0,0,8386,8387,1,0,0,0,8387,8388,1,0,0,0,8388,8389,3,2364,1182,
        0,8389,789,1,0,0,0,8390,8391,5,305,0,0,8391,8392,5,398,0,0,8392,
        8394,3,2362,1181,0,8393,8395,3,828,414,0,8394,8393,1,0,0,0,8395,
        8396,1,0,0,0,8396,8394,1,0,0,0,8396,8397,1,0,0,0,8397,8401,1,0,0,
        0,8398,8402,3,830,415,0,8399,8402,3,834,417,0,8400,8402,3,836,418,
        0,8401,8398,1,0,0,0,8401,8399,1,0,0,0,8401,8400,1,0,0,0,8402,8403,
        1,0,0,0,8403,8401,1,0,0,0,8403,8404,1,0,0,0,8404,791,1,0,0,0,8405,
        8408,5,305,0,0,8406,8407,5,1237,0,0,8407,8409,5,1484,0,0,8408,8406,
        1,0,0,0,8408,8409,1,0,0,0,8409,8410,1,0,0,0,8410,8411,5,401,0,0,
        8411,8415,3,794,397,0,8412,8413,5,1599,0,0,8413,8414,5,2369,0,0,
        8414,8416,7,21,0,0,8415,8412,1,0,0,0,8415,8416,1,0,0,0,8416,8417,
        1,0,0,0,8417,8418,5,67,0,0,8418,8419,3,796,398,0,8419,793,1,0,0,
        0,8420,8421,3,2370,1185,0,8421,795,1,0,0,0,8422,8423,5,2343,0,0,
        8423,797,1,0,0,0,8424,8425,5,305,0,0,8425,8426,5,704,0,0,8426,8427,
        5,748,0,0,8427,8431,5,609,0,0,8428,8429,3,2244,1122,0,8429,8430,
        5,2340,0,0,8430,8432,1,0,0,0,8431,8428,1,0,0,0,8431,8432,1,0,0,0,
        8432,8433,1,0,0,0,8433,8434,3,2364,1182,0,8434,8438,5,2347,0,0,8435,
        8436,3,2244,1122,0,8436,8437,5,2340,0,0,8437,8439,1,0,0,0,8438,8435,
        1,0,0,0,8438,8439,1,0,0,0,8439,8440,1,0,0,0,8440,8441,3,2364,1182,
        0,8441,8442,5,2347,0,0,8442,8443,3,2364,1182,0,8443,8455,5,2348,
        0,0,8444,8448,5,2353,0,0,8445,8446,3,2244,1122,0,8446,8447,5,2340,
        0,0,8447,8449,1,0,0,0,8448,8445,1,0,0,0,8448,8449,1,0,0,0,8449,8450,
        1,0,0,0,8450,8451,3,2364,1182,0,8451,8452,5,2347,0,0,8452,8453,3,
        2364,1182,0,8453,8454,5,2348,0,0,8454,8456,1,0,0,0,8455,8444,1,0,
        0,0,8456,8457,1,0,0,0,8457,8455,1,0,0,0,8457,8458,1,0,0,0,8458,8459,
        1,0,0,0,8459,8460,5,2348,0,0,8460,799,1,0,0,0,8461,8462,5,438,0,
        0,8462,8466,5,633,0,0,8463,8464,3,2244,1122,0,8464,8465,5,2340,0,
        0,8465,8467,1,0,0,0,8466,8463,1,0,0,0,8466,8467,1,0,0,0,8467,8468,
        1,0,0,0,8468,8469,3,2364,1182,0,8469,801,1,0,0,0,8470,8471,5,42,
        0,0,8471,8472,5,801,0,0,8472,8488,3,824,412,0,8473,8475,5,237,0,
        0,8474,8476,3,818,409,0,8475,8474,1,0,0,0,8475,8476,1,0,0,0,8476,
        8480,1,0,0,0,8477,8479,3,820,410,0,8478,8477,1,0,0,0,8479,8482,1,
        0,0,0,8480,8478,1,0,0,0,8480,8481,1,0,0,0,8481,8485,1,0,0,0,8482,
        8480,1,0,0,0,8483,8484,5,1509,0,0,8484,8486,5,1592,0,0,8485,8483,
        1,0,0,0,8485,8486,1,0,0,0,8486,8489,1,0,0,0,8487,8489,3,816,408,
        0,8488,8473,1,0,0,0,8488,8487,1,0,0,0,8489,803,1,0,0,0,8490,8491,
        5,438,0,0,8491,8492,5,746,0,0,8492,8496,7,84,0,0,8493,8494,3,2244,
        1122,0,8494,8495,5,2340,0,0,8495,8497,1,0,0,0,8496,8493,1,0,0,0,
        8496,8497,1,0,0,0,8497,8498,1,0,0,0,8498,8499,3,2364,1182,0,8499,
        805,1,0,0,0,8500,8501,5,438,0,0,8501,8502,5,801,0,0,8502,8503,3,
        824,412,0,8503,807,1,0,0,0,8504,8507,5,305,0,0,8505,8506,5,1237,
        0,0,8506,8508,5,1484,0,0,8507,8505,1,0,0,0,8507,8508,1,0,0,0,8508,
        8511,1,0,0,0,8509,8510,5,49,0,0,8510,8512,7,85,0,0,8511,8509,1,0,
        0,0,8511,8512,1,0,0,0,8512,8514,1,0,0,0,8513,8515,5,1044,0,0,8514,
        8513,1,0,0,0,8514,8515,1,0,0,0,8515,8516,1,0,0,0,8516,8530,5,746,
        0,0,8517,8518,7,82,0,0,8518,8522,5,942,0,0,8519,8520,3,2244,1122,
        0,8520,8521,5,2340,0,0,8521,8523,1,0,0,0,8522,8519,1,0,0,0,8522,
        8523,1,0,0,0,8523,8524,1,0,0,0,8524,8531,3,2364,1182,0,8525,8528,
        5,196,0,0,8526,8527,5,1547,0,0,8527,8529,3,2364,1182,0,8528,8526,
        1,0,0,0,8528,8529,1,0,0,0,8529,8531,1,0,0,0,8530,8517,1,0,0,0,8530,
        8525,1,0,0,0,8531,8535,1,0,0,0,8532,8533,5,1599,0,0,8533,8534,5,
        2369,0,0,8534,8536,7,21,0,0,8535,8532,1,0,0,0,8535,8536,1,0,0,0,
        8536,8538,1,0,0,0,8537,8539,3,1692,846,0,8538,8537,1,0,0,0,8538,
        8539,1,0,0,0,8539,8557,1,0,0,0,8540,8541,5,1491,0,0,8541,8552,5,
        2347,0,0,8542,8543,5,2347,0,0,8543,8545,5,2343,0,0,8544,8546,5,2353,
        0,0,8545,8544,1,0,0,0,8545,8546,1,0,0,0,8546,8549,1,0,0,0,8547,8550,
        3,2364,1182,0,8548,8550,5,2352,0,0,8549,8547,1,0,0,0,8549,8548,1,
        0,0,0,8550,8551,1,0,0,0,8551,8553,5,2348,0,0,8552,8542,1,0,0,0,8553,
        8554,1,0,0,0,8554,8552,1,0,0,0,8554,8555,1,0,0,0,8555,8556,1,0,0,
        0,8556,8558,5,2348,0,0,8557,8540,1,0,0,0,8557,8558,1,0,0,0,8558,
        8574,1,0,0,0,8559,8570,5,2153,0,0,8560,8561,5,116,0,0,8561,8562,
        5,2347,0,0,8562,8563,3,2364,1182,0,8563,8564,5,2353,0,0,8564,8565,
        3,1422,711,0,8565,8566,5,2348,0,0,8566,8571,1,0,0,0,8567,8568,7,
        86,0,0,8568,8571,3,1870,935,0,8569,8571,5,2343,0,0,8570,8560,1,0,
        0,0,8570,8567,1,0,0,0,8570,8569,1,0,0,0,8571,8575,1,0,0,0,8572,8573,
        5,67,0,0,8573,8575,5,2343,0,0,8574,8559,1,0,0,0,8574,8572,1,0,0,
        0,8575,809,1,0,0,0,8576,8579,5,305,0,0,8577,8578,5,1237,0,0,8578,
        8580,5,1484,0,0,8579,8577,1,0,0,0,8579,8580,1,0,0,0,8580,8582,1,
        0,0,0,8581,8583,7,20,0,0,8582,8581,1,0,0,0,8582,8583,1,0,0,0,8583,
        8584,1,0,0,0,8584,8585,5,801,0,0,8585,8586,3,812,406,0,8586,811,
        1,0,0,0,8587,8588,3,824,412,0,8588,8589,7,22,0,0,8589,8592,3,2360,
        1180,0,8590,8591,5,696,0,0,8591,8593,3,794,397,0,8592,8590,1,0,0,
        0,8592,8593,1,0,0,0,8593,8596,1,0,0,0,8594,8595,5,34,0,0,8595,8597,
        3,2360,1180,0,8596,8594,1,0,0,0,8596,8597,1,0,0,0,8597,8600,1,0,
        0,0,8598,8599,5,309,0,0,8599,8601,3,814,407,0,8600,8598,1,0,0,0,
        8600,8601,1,0,0,0,8601,813,1,0,0,0,8602,8603,3,2364,1182,0,8603,
        8604,5,2340,0,0,8604,8606,1,0,0,0,8605,8602,1,0,0,0,8605,8606,1,
        0,0,0,8606,8607,1,0,0,0,8607,8608,3,2364,1182,0,8608,815,1,0,0,0,
        8609,8610,4,408,5,0,8610,8611,7,20,0,0,8611,817,1,0,0,0,8612,8613,
        4,409,6,0,8613,8614,5,357,0,0,8614,819,1,0,0,0,8615,8616,3,2252,
        1126,0,8616,8617,5,2369,0,0,8617,8618,3,822,411,0,8618,821,1,0,0,
        0,8619,8622,3,2370,1185,0,8620,8622,5,2343,0,0,8621,8619,1,0,0,0,
        8621,8620,1,0,0,0,8622,823,1,0,0,0,8623,8624,3,2370,1185,0,8624,
        8625,5,2340,0,0,8625,8627,1,0,0,0,8626,8623,1,0,0,0,8626,8627,1,
        0,0,0,8627,8628,1,0,0,0,8628,8629,3,2370,1185,0,8629,825,1,0,0,0,
        8630,8631,5,42,0,0,8631,8632,5,398,0,0,8632,8677,3,2362,1181,0,8633,
        8638,5,21,0,0,8634,8639,3,828,414,0,8635,8639,3,830,415,0,8636,8639,
        3,834,417,0,8637,8639,3,836,418,0,8638,8634,1,0,0,0,8638,8635,1,
        0,0,0,8638,8636,1,0,0,0,8638,8637,1,0,0,0,8639,8641,1,0,0,0,8640,
        8633,1,0,0,0,8641,8642,1,0,0,0,8642,8640,1,0,0,0,8642,8643,1,0,0,
        0,8643,8678,1,0,0,0,8644,8670,5,438,0,0,8645,8646,5,798,0,0,8646,
        8648,3,2362,1181,0,8647,8649,7,87,0,0,8648,8647,1,0,0,0,8648,8649,
        1,0,0,0,8649,8671,1,0,0,0,8650,8651,5,633,0,0,8651,8671,3,2362,1181,
        0,8652,8653,5,81,0,0,8653,8668,3,2362,1181,0,8654,8655,5,798,0,0,
        8655,8666,3,2362,1181,0,8656,8657,5,226,0,0,8657,8663,3,2300,1150,
        0,8658,8659,5,2353,0,0,8659,8660,5,226,0,0,8660,8662,3,2300,1150,
        0,8661,8658,1,0,0,0,8662,8665,1,0,0,0,8663,8661,1,0,0,0,8663,8664,
        1,0,0,0,8664,8667,1,0,0,0,8665,8663,1,0,0,0,8666,8656,1,0,0,0,8666,
        8667,1,0,0,0,8667,8669,1,0,0,0,8668,8654,1,0,0,0,8668,8669,1,0,0,
        0,8669,8671,1,0,0,0,8670,8645,1,0,0,0,8670,8650,1,0,0,0,8670,8652,
        1,0,0,0,8671,8673,1,0,0,0,8672,8644,1,0,0,0,8673,8674,1,0,0,0,8674,
        8672,1,0,0,0,8674,8675,1,0,0,0,8675,8678,1,0,0,0,8676,8678,5,237,
        0,0,8677,8640,1,0,0,0,8677,8672,1,0,0,0,8677,8676,1,0,0,0,8678,827,
        1,0,0,0,8679,8680,5,798,0,0,8680,8681,3,2362,1181,0,8681,8702,5,
        740,0,0,8682,8683,3,1114,557,0,8683,8684,5,2340,0,0,8684,8685,3,
        2300,1150,0,8685,8703,1,0,0,0,8686,8687,5,2347,0,0,8687,8688,3,1114,
        557,0,8688,8689,5,2340,0,0,8689,8697,3,2300,1150,0,8690,8691,5,2353,
        0,0,8691,8692,3,1114,557,0,8692,8693,5,2340,0,0,8693,8694,3,2300,
        1150,0,8694,8696,1,0,0,0,8695,8690,1,0,0,0,8696,8699,1,0,0,0,8697,
        8695,1,0,0,0,8697,8698,1,0,0,0,8698,8700,1,0,0,0,8699,8697,1,0,0,
        0,8700,8701,5,2348,0,0,8701,8703,1,0,0,0,8702,8682,1,0,0,0,8702,
        8686,1,0,0,0,8703,8707,1,0,0,0,8704,8705,5,1619,0,0,8705,8706,5,
        2204,0,0,8706,8708,5,1162,0,0,8707,8704,1,0,0,0,8707,8708,1,0,0,
        0,8708,829,1,0,0,0,8709,8710,5,633,0,0,8710,8711,3,2362,1181,0,8711,
        8712,5,2347,0,0,8712,8716,3,2362,1181,0,8713,8714,5,192,0,0,8714,
        8715,5,1180,0,0,8715,8717,3,2362,1181,0,8716,8713,1,0,0,0,8717,8718,
        1,0,0,0,8718,8716,1,0,0,0,8718,8719,1,0,0,0,8719,8721,1,0,0,0,8720,
        8722,3,832,416,0,8721,8720,1,0,0,0,8721,8722,1,0,0,0,8722,8723,1,
        0,0,0,8723,8724,5,2348,0,0,8724,831,1,0,0,0,8725,8726,5,748,0,0,
        8726,8727,5,770,0,0,8727,8728,3,838,419,0,8728,8729,5,1450,0,0,8729,
        8730,3,2362,1181,0,8730,8732,1,0,0,0,8731,8725,1,0,0,0,8732,8733,
        1,0,0,0,8733,8731,1,0,0,0,8733,8734,1,0,0,0,8734,833,1,0,0,0,8735,
        8736,5,81,0,0,8736,8737,3,2362,1181,0,8737,8738,5,395,0,0,8738,8739,
        3,838,419,0,8739,8741,1,0,0,0,8740,8735,1,0,0,0,8741,8742,1,0,0,
        0,8742,8740,1,0,0,0,8742,8743,1,0,0,0,8743,835,1,0,0,0,8744,8745,
        5,81,0,0,8745,8751,3,2362,1181,0,8746,8747,5,798,0,0,8747,8748,3,
        2362,1181,0,8748,8749,5,395,0,0,8749,8750,3,838,419,0,8750,8752,
        1,0,0,0,8751,8746,1,0,0,0,8752,8753,1,0,0,0,8753,8751,1,0,0,0,8753,
        8754,1,0,0,0,8754,837,1,0,0,0,8755,8768,3,2300,1150,0,8756,8757,
        5,2347,0,0,8757,8762,3,2300,1150,0,8758,8759,5,2353,0,0,8759,8761,
        3,2300,1150,0,8760,8758,1,0,0,0,8761,8764,1,0,0,0,8762,8760,1,0,
        0,0,8762,8763,1,0,0,0,8763,8765,1,0,0,0,8764,8762,1,0,0,0,8765,8766,
        5,2348,0,0,8766,8768,1,0,0,0,8767,8755,1,0,0,0,8767,8756,1,0,0,0,
        8768,839,1,0,0,0,8769,8770,5,42,0,0,8770,8771,5,2190,0,0,8771,8804,
        3,2302,1151,0,8772,8773,5,21,0,0,8773,8805,3,860,430,0,8774,8775,
        5,926,0,0,8775,8776,5,271,0,0,8776,8777,3,2268,1134,0,8777,8778,
        7,48,0,0,8778,8805,1,0,0,0,8779,8796,5,438,0,0,8780,8781,5,271,0,
        0,8781,8797,3,2268,1134,0,8782,8783,5,1376,0,0,8783,8797,5,770,0,
        0,8784,8785,5,2091,0,0,8785,8786,5,2347,0,0,8786,8791,3,2300,1150,
        0,8787,8788,5,2353,0,0,8788,8790,3,2300,1150,0,8789,8787,1,0,0,0,
        8790,8793,1,0,0,0,8791,8789,1,0,0,0,8791,8792,1,0,0,0,8792,8794,
        1,0,0,0,8793,8791,1,0,0,0,8794,8795,5,2348,0,0,8795,8797,1,0,0,0,
        8796,8780,1,0,0,0,8796,8782,1,0,0,0,8796,8784,1,0,0,0,8797,8805,
        1,0,0,0,8798,8805,5,237,0,0,8799,8800,5,1429,0,0,8800,8805,7,11,
        0,0,8801,8803,3,842,421,0,8802,8801,1,0,0,0,8802,8803,1,0,0,0,8803,
        8805,1,0,0,0,8804,8772,1,0,0,0,8804,8774,1,0,0,0,8804,8779,1,0,0,
        0,8804,8798,1,0,0,0,8804,8799,1,0,0,0,8804,8802,1,0,0,0,8805,841,
        1,0,0,0,8806,8807,4,421,7,0,8807,8808,7,20,0,0,8808,843,1,0,0,0,
        8809,8812,5,305,0,0,8810,8811,5,1237,0,0,8811,8813,5,1484,0,0,8812,
        8810,1,0,0,0,8812,8813,1,0,0,0,8813,8818,1,0,0,0,8814,8816,5,1074,
        0,0,8815,8814,1,0,0,0,8815,8816,1,0,0,0,8816,8817,1,0,0,0,8817,8819,
        5,576,0,0,8818,8815,1,0,0,0,8818,8819,1,0,0,0,8819,8821,1,0,0,0,
        8820,8822,3,846,423,0,8821,8820,1,0,0,0,8821,8822,1,0,0,0,8822,8823,
        1,0,0,0,8823,8827,5,2190,0,0,8824,8825,3,2244,1122,0,8825,8826,5,
        2340,0,0,8826,8828,1,0,0,0,8827,8824,1,0,0,0,8827,8828,1,0,0,0,8828,
        8829,1,0,0,0,8829,8833,3,2364,1182,0,8830,8831,5,650,0,0,8831,8832,
        5,1138,0,0,8832,8834,5,508,0,0,8833,8830,1,0,0,0,8833,8834,1,0,0,
        0,8834,8845,1,0,0,0,8835,8836,5,1599,0,0,8836,8843,5,2369,0,0,8837,
        8844,5,894,0,0,8838,8840,5,2276,0,0,8839,8838,1,0,0,0,8839,8840,
        1,0,0,0,8840,8841,1,0,0,0,8841,8844,5,334,0,0,8842,8844,5,1071,0,
        0,8843,8837,1,0,0,0,8843,8839,1,0,0,0,8843,8842,1,0,0,0,8844,8846,
        1,0,0,0,8845,8835,1,0,0,0,8845,8846,1,0,0,0,8846,8848,1,0,0,0,8847,
        8849,3,848,424,0,8848,8847,1,0,0,0,8848,8849,1,0,0,0,8849,8853,1,
        0,0,0,8850,8851,5,368,0,0,8851,8852,5,2273,0,0,8852,8854,3,2364,
        1182,0,8853,8850,1,0,0,0,8853,8854,1,0,0,0,8854,8857,1,0,0,0,8855,
        8856,5,114,0,0,8856,8858,7,88,0,0,8857,8855,1,0,0,0,8857,8858,1,
        0,0,0,8858,8859,1,0,0,0,8859,8860,5,67,0,0,8860,8862,3,1842,921,
        0,8861,8863,3,2042,1021,0,8862,8861,1,0,0,0,8862,8863,1,0,0,0,8863,
        8865,1,0,0,0,8864,8866,7,89,0,0,8865,8864,1,0,0,0,8865,8866,1,0,
        0,0,8866,845,1,0,0,0,8867,8874,5,453,0,0,8868,8870,5,451,0,0,8869,
        8871,5,453,0,0,8870,8869,1,0,0,0,8870,8871,1,0,0,0,8871,8874,1,0,
        0,0,8872,8874,5,1070,0,0,8873,8867,1,0,0,0,8873,8868,1,0,0,0,8873,
        8872,1,0,0,0,8874,847,1,0,0,0,8875,8879,3,850,425,0,8876,8879,3,
        852,426,0,8877,8879,3,864,432,0,8878,8875,1,0,0,0,8878,8876,1,0,
        0,0,8878,8877,1,0,0,0,8879,849,1,0,0,0,8880,8894,5,2347,0,0,8881,
        8883,5,2353,0,0,8882,8881,1,0,0,0,8882,8883,1,0,0,0,8883,8892,1,
        0,0,0,8884,8888,3,2224,1112,0,8885,8887,3,854,427,0,8886,8885,1,
        0,0,0,8887,8890,1,0,0,0,8888,8886,1,0,0,0,8888,8889,1,0,0,0,8889,
        8893,1,0,0,0,8890,8888,1,0,0,0,8891,8893,3,860,430,0,8892,8884,1,
        0,0,0,8892,8891,1,0,0,0,8893,8895,1,0,0,0,8894,8882,1,0,0,0,8895,
        8896,1,0,0,0,8896,8894,1,0,0,0,8896,8897,1,0,0,0,8897,8898,1,0,0,
        0,8898,8899,5,2348,0,0,8899,851,1,0,0,0,8900,8904,5,1180,0,0,8901,
        8902,3,2244,1122,0,8902,8903,5,2340,0,0,8903,8905,1,0,0,0,8904,8901,
        1,0,0,0,8904,8905,1,0,0,0,8905,8906,1,0,0,0,8906,8930,3,2364,1182,
        0,8907,8908,5,2212,0,0,8908,8909,5,1172,0,0,8909,8921,7,90,0,0,8910,
        8922,5,368,0,0,8911,8912,5,2347,0,0,8912,8917,5,2378,0,0,8913,8914,
        5,2353,0,0,8914,8916,5,2378,0,0,8915,8913,1,0,0,0,8916,8919,1,0,
        0,0,8917,8915,1,0,0,0,8917,8918,1,0,0,0,8918,8920,1,0,0,0,8919,8917,
        1,0,0,0,8920,8922,5,2348,0,0,8921,8910,1,0,0,0,8921,8911,1,0,0,0,
        8922,8931,1,0,0,0,8923,8927,5,2086,0,0,8924,8925,3,2244,1122,0,8925,
        8926,5,2340,0,0,8926,8928,1,0,0,0,8927,8924,1,0,0,0,8927,8928,1,
        0,0,0,8928,8929,1,0,0,0,8929,8931,3,2364,1182,0,8930,8907,1,0,0,
        0,8930,8923,1,0,0,0,8931,8949,1,0,0,0,8932,8941,5,2347,0,0,8933,
        8935,5,2353,0,0,8934,8933,1,0,0,0,8934,8935,1,0,0,0,8935,8939,1,
        0,0,0,8936,8940,3,860,430,0,8937,8938,5,2378,0,0,8938,8940,3,854,
        427,0,8939,8936,1,0,0,0,8939,8937,1,0,0,0,8940,8942,1,0,0,0,8941,
        8934,1,0,0,0,8942,8943,1,0,0,0,8943,8941,1,0,0,0,8943,8944,1,0,0,
        0,8944,8945,1,0,0,0,8945,8946,5,2348,0,0,8946,8948,1,0,0,0,8947,
        8932,1,0,0,0,8948,8951,1,0,0,0,8949,8947,1,0,0,0,8949,8950,1,0,0,
        0,8950,853,1,0,0,0,8951,8949,1,0,0,0,8952,8953,5,271,0,0,8953,8955,
        3,2268,1134,0,8954,8952,1,0,0,0,8954,8955,1,0,0,0,8955,8965,1,0,
        0,0,8956,8958,5,1138,0,0,8957,8956,1,0,0,0,8957,8958,1,0,0,0,8958,
        8959,1,0,0,0,8959,8966,5,1162,0,0,8960,8966,5,2091,0,0,8961,8962,
        5,1376,0,0,8962,8966,5,770,0,0,8963,8966,3,1682,841,0,8964,8966,
        3,1672,836,0,8965,8957,1,0,0,0,8965,8960,1,0,0,0,8965,8961,1,0,0,
        0,8965,8963,1,0,0,0,8965,8964,1,0,0,0,8966,8968,1,0,0,0,8967,8969,
        3,862,431,0,8968,8967,1,0,0,0,8968,8969,1,0,0,0,8969,855,1,0,0,0,
        8970,8971,5,1550,0,0,8971,8972,5,740,0,0,8972,8984,3,2302,1151,0,
        8973,8974,5,2212,0,0,8974,8984,5,1523,0,0,8975,8976,5,271,0,0,8976,
        8978,3,2268,1134,0,8977,8975,1,0,0,0,8977,8978,1,0,0,0,8978,8979,
        1,0,0,0,8979,8981,3,1682,841,0,8980,8982,3,862,431,0,8981,8980,1,
        0,0,0,8981,8982,1,0,0,0,8982,8984,1,0,0,0,8983,8970,1,0,0,0,8983,
        8973,1,0,0,0,8983,8977,1,0,0,0,8984,857,1,0,0,0,8985,8986,5,1550,
        0,0,8986,8987,5,580,0,0,8987,8988,5,2347,0,0,8988,8989,3,2370,1185,
        0,8989,8990,5,2348,0,0,8990,8991,5,740,0,0,8991,8992,3,2302,1151,
        0,8992,9021,1,0,0,0,8993,8994,5,1452,0,0,8994,8995,5,2347,0,0,8995,
        8996,3,2370,1185,0,8996,8997,5,2348,0,0,8997,8998,5,2212,0,0,8998,
        8999,5,1523,0,0,8999,9021,1,0,0,0,9000,9001,5,271,0,0,9001,9003,
        3,2268,1134,0,9002,9000,1,0,0,0,9002,9003,1,0,0,0,9003,9004,1,0,
        0,0,9004,9005,5,578,0,0,9005,9006,5,770,0,0,9006,9011,5,2347,0,0,
        9007,9009,5,2353,0,0,9008,9007,1,0,0,0,9008,9009,1,0,0,0,9009,9010,
        1,0,0,0,9010,9012,3,2370,1185,0,9011,9008,1,0,0,0,9012,9013,1,0,
        0,0,9013,9011,1,0,0,0,9013,9014,1,0,0,0,9014,9015,1,0,0,0,9015,9016,
        5,2348,0,0,9016,9018,3,1682,841,0,9017,9019,3,862,431,0,9018,9017,
        1,0,0,0,9018,9019,1,0,0,0,9019,9021,1,0,0,0,9020,8985,1,0,0,0,9020,
        8993,1,0,0,0,9020,9002,1,0,0,0,9021,859,1,0,0,0,9022,9023,7,91,0,
        0,9023,9025,3,2268,1134,0,9024,9022,1,0,0,0,9024,9025,1,0,0,0,9025,
        9057,1,0,0,0,9026,9027,5,2091,0,0,9027,9028,5,2347,0,0,9028,9033,
        3,2300,1150,0,9029,9030,5,2353,0,0,9030,9032,3,2300,1150,0,9031,
        9029,1,0,0,0,9032,9035,1,0,0,0,9033,9031,1,0,0,0,9033,9034,1,0,0,
        0,9034,9036,1,0,0,0,9035,9033,1,0,0,0,9036,9037,5,2348,0,0,9037,
        9058,1,0,0,0,9038,9039,5,1376,0,0,9039,9040,5,770,0,0,9040,9041,
        5,2347,0,0,9041,9046,3,2300,1150,0,9042,9043,5,2353,0,0,9043,9045,
        3,2300,1150,0,9044,9042,1,0,0,0,9045,9048,1,0,0,0,9046,9044,1,0,
        0,0,9046,9047,1,0,0,0,9047,9049,1,0,0,0,9048,9046,1,0,0,0,9049,9050,
        5,2348,0,0,9050,9058,1,0,0,0,9051,9058,3,1680,840,0,9052,9053,5,
        190,0,0,9053,9054,5,2347,0,0,9054,9055,3,2048,1024,0,9055,9056,5,
        2348,0,0,9056,9058,1,0,0,0,9057,9026,1,0,0,0,9057,9038,1,0,0,0,9057,
        9051,1,0,0,0,9057,9052,1,0,0,0,9058,9060,1,0,0,0,9059,9061,3,862,
        431,0,9060,9059,1,0,0,0,9060,9061,1,0,0,0,9061,861,1,0,0,0,9062,
        9064,5,1138,0,0,9063,9062,1,0,0,0,9063,9064,1,0,0,0,9064,9065,1,
        0,0,0,9065,9073,5,372,0,0,9066,9067,5,700,0,0,9067,9073,7,66,0,0,
        9068,9073,7,48,0,0,9069,9073,7,17,0,0,9070,9073,7,92,0,0,9071,9073,
        3,1542,771,0,9072,9063,1,0,0,0,9072,9066,1,0,0,0,9072,9068,1,0,0,
        0,9072,9069,1,0,0,0,9072,9070,1,0,0,0,9072,9071,1,0,0,0,9073,9074,
        1,0,0,0,9074,9072,1,0,0,0,9074,9075,1,0,0,0,9075,863,1,0,0,0,9076,
        9077,5,1180,0,0,9077,9079,5,2253,0,0,9078,9080,3,866,433,0,9079,
        9078,1,0,0,0,9079,9080,1,0,0,0,9080,9081,1,0,0,0,9081,9082,5,2212,
        0,0,9082,9083,5,1172,0,0,9083,9096,7,90,0,0,9084,9097,5,368,0,0,
        9085,9086,5,2347,0,0,9086,9091,3,2052,1026,0,9087,9088,5,2353,0,
        0,9088,9090,3,2052,1026,0,9089,9087,1,0,0,0,9090,9093,1,0,0,0,9091,
        9089,1,0,0,0,9091,9092,1,0,0,0,9092,9094,1,0,0,0,9093,9091,1,0,0,
        0,9094,9095,5,2348,0,0,9095,9097,1,0,0,0,9096,9084,1,0,0,0,9096,
        9085,1,0,0,0,9097,865,1,0,0,0,9098,9099,5,2248,0,0,9099,9101,3,868,
        434,0,9100,9098,1,0,0,0,9100,9101,1,0,0,0,9101,9102,1,0,0,0,9102,
        9108,5,455,0,0,9103,9109,3,870,435,0,9104,9105,3,868,434,0,9105,
        9106,5,2357,0,0,9106,9107,3,870,435,0,9107,9109,1,0,0,0,9108,9103,
        1,0,0,0,9108,9104,1,0,0,0,9109,9115,1,0,0,0,9110,9111,5,1679,0,0,
        9111,9112,5,38,0,0,9112,9113,5,2170,0,0,9113,9114,5,67,0,0,9114,
        9116,7,93,0,0,9115,9110,1,0,0,0,9115,9116,1,0,0,0,9116,9120,1,0,
        0,0,9117,9118,3,1274,637,0,9118,9119,5,1075,0,0,9119,9121,1,0,0,
        0,9120,9117,1,0,0,0,9120,9121,1,0,0,0,9121,9125,1,0,0,0,9122,9123,
        3,1274,637,0,9123,9124,5,55,0,0,9124,9126,1,0,0,0,9125,9122,1,0,
        0,0,9125,9126,1,0,0,0,9126,867,1,0,0,0,9127,9128,5,2344,0,0,9128,
        869,1,0,0,0,9129,9130,5,2344,0,0,9130,871,1,0,0,0,9131,9132,5,42,
        0,0,9132,9133,5,1996,0,0,9133,9166,3,1614,807,0,9134,9136,5,368,
        0,0,9135,9137,3,1184,592,0,9136,9135,1,0,0,0,9136,9137,1,0,0,0,9137,
        9139,1,0,0,0,9138,9140,3,1202,601,0,9139,9138,1,0,0,0,9139,9140,
        1,0,0,0,9140,9167,1,0,0,0,9141,9142,5,900,0,0,9142,9143,5,521,0,
        0,9143,9167,3,1182,591,0,9144,9145,5,1489,0,0,9145,9167,3,1182,591,
        0,9146,9167,5,218,0,0,9147,9148,5,1602,0,0,9148,9151,5,1631,0,0,
        9149,9150,5,768,0,0,9150,9152,3,1182,591,0,9151,9149,1,0,0,0,9151,
        9152,1,0,0,0,9152,9167,1,0,0,0,9153,9154,5,1481,0,0,9154,9155,5,
        2052,0,0,9155,9167,3,886,443,0,9156,9157,3,1344,672,0,9157,9158,
        5,100,0,0,9158,9167,1,0,0,0,9159,9167,3,874,437,0,9160,9167,3,876,
        438,0,9161,9167,3,878,439,0,9162,9167,3,882,441,0,9163,9167,3,930,
        465,0,9164,9167,3,884,442,0,9165,9167,3,904,452,0,9166,9134,1,0,
        0,0,9166,9141,1,0,0,0,9166,9144,1,0,0,0,9166,9146,1,0,0,0,9166,9147,
        1,0,0,0,9166,9153,1,0,0,0,9166,9156,1,0,0,0,9166,9159,1,0,0,0,9166,
        9160,1,0,0,0,9166,9161,1,0,0,0,9166,9162,1,0,0,0,9166,9163,1,0,0,
        0,9166,9164,1,0,0,0,9166,9165,1,0,0,0,9167,873,1,0,0,0,9168,9171,
        5,21,0,0,9169,9172,3,922,461,0,9170,9172,3,924,462,0,9171,9169,1,
        0,0,0,9171,9170,1,0,0,0,9172,9215,1,0,0,0,9173,9174,5,438,0,0,9174,
        9177,7,94,0,0,9175,9178,3,1422,711,0,9176,9178,5,2341,0,0,9177,9175,
        1,0,0,0,9177,9176,1,0,0,0,9178,9181,1,0,0,0,9179,9180,5,768,0,0,
        9180,9182,3,1182,591,0,9181,9179,1,0,0,0,9181,9182,1,0,0,0,9182,
        9215,1,0,0,0,9183,9184,5,1602,0,0,9184,9187,5,2005,0,0,9185,9188,
        3,1422,711,0,9186,9188,5,2341,0,0,9187,9185,1,0,0,0,9187,9186,1,
        0,0,0,9188,9191,1,0,0,0,9189,9190,5,768,0,0,9190,9192,3,1182,591,
        0,9191,9189,1,0,0,0,9191,9192,1,0,0,0,9192,9215,1,0,0,0,9193,9194,
        5,1481,0,0,9194,9195,5,335,0,0,9195,9200,3,1422,711,0,9196,9197,
        5,2353,0,0,9197,9199,3,1422,711,0,9198,9196,1,0,0,0,9199,9202,1,
        0,0,0,9200,9198,1,0,0,0,9200,9201,1,0,0,0,9201,9203,1,0,0,0,9202,
        9200,1,0,0,0,9203,9204,5,2052,0,0,9204,9209,3,1422,711,0,9205,9206,
        5,2353,0,0,9206,9208,3,1422,711,0,9207,9205,1,0,0,0,9208,9211,1,
        0,0,0,9209,9207,1,0,0,0,9209,9210,1,0,0,0,9210,9215,1,0,0,0,9211,
        9209,1,0,0,0,9212,9213,7,94,0,0,9213,9215,3,690,345,0,9214,9168,
        1,0,0,0,9214,9173,1,0,0,0,9214,9183,1,0,0,0,9214,9193,1,0,0,0,9214,
        9212,1,0,0,0,9215,875,1,0,0,0,9216,9223,3,894,447,0,9217,9219,5,
        1074,0,0,9218,9217,1,0,0,0,9218,9219,1,0,0,0,9219,9220,1,0,0,0,9220,
        9221,5,576,0,0,9221,9223,5,832,0,0,9222,9216,1,0,0,0,9222,9218,1,
        0,0,0,9223,877,1,0,0,0,9224,9225,5,1996,0,0,9225,9228,5,609,0,0,
        9226,9229,3,880,440,0,9227,9229,5,2343,0,0,9228,9226,1,0,0,0,9228,
        9227,1,0,0,0,9229,879,1,0,0,0,9230,9231,3,2370,1185,0,9231,881,1,
        0,0,0,9232,9242,5,1190,0,0,9233,9235,5,1177,0,0,9234,9236,7,95,0,
        0,9235,9234,1,0,0,0,9235,9236,1,0,0,0,9236,9242,1,0,0,0,9237,9238,
        5,1429,0,0,9238,9242,7,11,0,0,9239,9242,5,1314,0,0,9240,9242,5,2007,
        0,0,9241,9232,1,0,0,0,9241,9233,1,0,0,0,9241,9237,1,0,0,0,9241,9239,
        1,0,0,0,9241,9240,1,0,0,0,9242,883,1,0,0,0,9243,9244,5,565,0,0,9244,
        9245,7,96,0,0,9245,885,1,0,0,0,9246,9247,3,1614,807,0,9247,887,1,
        0,0,0,9248,9250,5,305,0,0,9249,9251,7,97,0,0,9250,9249,1,0,0,0,9250,
        9251,1,0,0,0,9251,9255,1,0,0,0,9252,9256,3,890,445,0,9253,9256,3,
        900,450,0,9254,9256,3,902,451,0,9255,9252,1,0,0,0,9255,9253,1,0,
        0,0,9255,9254,1,0,0,0,9256,889,1,0,0,0,9257,9258,5,1996,0,0,9258,
        9262,3,2364,1182,0,9259,9260,5,650,0,0,9260,9261,5,1138,0,0,9261,
        9263,5,508,0,0,9262,9259,1,0,0,0,9262,9263,1,0,0,0,9263,9265,1,0,
        0,0,9264,9266,3,922,461,0,9265,9264,1,0,0,0,9265,9266,1,0,0,0,9266,
        9284,1,0,0,0,9267,9268,5,900,0,0,9268,9269,5,521,0,0,9269,9283,3,
        1182,591,0,9270,9271,5,140,0,0,9271,9283,3,1182,591,0,9272,9283,
        3,894,447,0,9273,9274,5,576,0,0,9274,9283,5,832,0,0,9275,9283,7,
        74,0,0,9276,9277,5,472,0,0,9277,9283,3,892,446,0,9278,9283,5,368,
        0,0,9279,9283,3,896,448,0,9280,9283,3,898,449,0,9281,9283,3,884,
        442,0,9282,9267,1,0,0,0,9282,9270,1,0,0,0,9282,9272,1,0,0,0,9282,
        9273,1,0,0,0,9282,9275,1,0,0,0,9282,9276,1,0,0,0,9282,9278,1,0,0,
        0,9282,9279,1,0,0,0,9282,9280,1,0,0,0,9282,9281,1,0,0,0,9283,9286,
        1,0,0,0,9284,9282,1,0,0,0,9284,9285,1,0,0,0,9285,891,1,0,0,0,9286,
        9284,1,0,0,0,9287,9288,5,2153,0,0,9288,9289,5,2343,0,0,9289,893,
        1,0,0,0,9290,9291,7,98,0,0,9291,895,1,0,0,0,9292,9293,5,521,0,0,
        9293,9294,5,853,0,0,9294,9301,5,821,0,0,9295,9302,5,88,0,0,9296,
        9299,5,2089,0,0,9297,9298,5,1617,0,0,9298,9300,3,1182,591,0,9299,
        9297,1,0,0,0,9299,9300,1,0,0,0,9300,9302,1,0,0,0,9301,9295,1,0,0,
        0,9301,9296,1,0,0,0,9301,9302,1,0,0,0,9302,897,1,0,0,0,9303,9304,
        5,1567,0,0,9304,9305,5,1631,0,0,9305,9306,5,853,0,0,9306,9307,7,
        99,0,0,9307,899,1,0,0,0,9308,9309,5,2007,0,0,9309,9310,5,1996,0,
        0,9310,9314,3,2364,1182,0,9311,9312,5,650,0,0,9312,9313,5,1138,0,
        0,9313,9315,5,508,0,0,9314,9311,1,0,0,0,9314,9315,1,0,0,0,9315,9317,
        1,0,0,0,9316,9318,3,924,462,0,9317,9316,1,0,0,0,9317,9318,1,0,0,
        0,9318,9320,1,0,0,0,9319,9321,3,878,439,0,9320,9319,1,0,0,0,9320,
        9321,1,0,0,0,9321,9323,1,0,0,0,9322,9324,3,896,448,0,9323,9322,1,
        0,0,0,9323,9324,1,0,0,0,9324,901,1,0,0,0,9325,9326,5,2087,0,0,9326,
        9327,5,1996,0,0,9327,9331,3,2364,1182,0,9328,9329,5,650,0,0,9329,
        9330,5,1138,0,0,9330,9332,5,508,0,0,9331,9328,1,0,0,0,9331,9332,
        1,0,0,0,9332,9334,1,0,0,0,9333,9335,3,922,461,0,9334,9333,1,0,0,
        0,9334,9335,1,0,0,0,9335,9337,1,0,0,0,9336,9338,3,896,448,0,9337,
        9336,1,0,0,0,9337,9338,1,0,0,0,9338,9340,1,0,0,0,9339,9341,3,904,
        452,0,9340,9339,1,0,0,0,9340,9341,1,0,0,0,9341,903,1,0,0,0,9342,
        9343,5,1505,0,0,9343,9344,7,100,0,0,9344,905,1,0,0,0,9345,9346,5,
        305,0,0,9346,9347,5,1996,0,0,9347,9348,5,1590,0,0,9348,9352,3,2364,
        1182,0,9349,9350,5,696,0,0,9350,9351,5,1595,0,0,9351,9353,3,2364,
        1182,0,9352,9349,1,0,0,0,9352,9353,1,0,0,0,9353,9375,1,0,0,0,9354,
        9355,5,2153,0,0,9355,9356,5,2006,0,0,9356,9366,5,2347,0,0,9357,9358,
        5,335,0,0,9358,9363,3,444,222,0,9359,9360,5,2353,0,0,9360,9362,3,
        444,222,0,9361,9359,1,0,0,0,9362,9365,1,0,0,0,9363,9361,1,0,0,0,
        9363,9364,1,0,0,0,9364,9367,1,0,0,0,9365,9363,1,0,0,0,9366,9357,
        1,0,0,0,9366,9367,1,0,0,0,9367,9369,1,0,0,0,9368,9370,3,908,454,
        0,9369,9368,1,0,0,0,9370,9371,1,0,0,0,9371,9369,1,0,0,0,9371,9372,
        1,0,0,0,9372,9373,1,0,0,0,9373,9374,5,2348,0,0,9374,9376,1,0,0,0,
        9375,9354,1,0,0,0,9375,9376,1,0,0,0,9376,907,1,0,0,0,9377,9378,5,
        900,0,0,9378,9379,5,521,0,0,9379,9397,3,1182,591,0,9380,9381,5,140,
        0,0,9381,9383,3,2356,1178,0,9382,9384,5,766,0,0,9383,9382,1,0,0,
        0,9383,9384,1,0,0,0,9384,9397,1,0,0,0,9385,9397,3,894,447,0,9386,
        9387,5,576,0,0,9387,9397,5,832,0,0,9388,9397,3,910,455,0,9389,9397,
        3,912,456,0,9390,9397,5,1190,0,0,9391,9397,5,1177,0,0,9392,9397,
        3,896,448,0,9393,9397,3,898,449,0,9394,9397,3,884,442,0,9395,9397,
        3,1428,714,0,9396,9377,1,0,0,0,9396,9380,1,0,0,0,9396,9385,1,0,0,
        0,9396,9386,1,0,0,0,9396,9388,1,0,0,0,9396,9389,1,0,0,0,9396,9390,
        1,0,0,0,9396,9391,1,0,0,0,9396,9392,1,0,0,0,9396,9393,1,0,0,0,9396,
        9394,1,0,0,0,9396,9395,1,0,0,0,9397,909,1,0,0,0,9398,9404,5,472,
        0,0,9399,9401,3,892,446,0,9400,9399,1,0,0,0,9400,9401,1,0,0,0,9401,
        9402,1,0,0,0,9402,9405,5,471,0,0,9403,9405,5,366,0,0,9404,9400,1,
        0,0,0,9404,9403,1,0,0,0,9405,911,1,0,0,0,9406,9408,5,368,0,0,9407,
        9409,3,914,457,0,9408,9407,1,0,0,0,9408,9409,1,0,0,0,9409,9411,1,
        0,0,0,9410,9412,3,918,459,0,9411,9410,1,0,0,0,9411,9412,1,0,0,0,
        9412,9414,1,0,0,0,9413,9415,3,920,460,0,9414,9413,1,0,0,0,9414,9415,
        1,0,0,0,9415,9417,1,0,0,0,9416,9418,3,1210,605,0,9417,9416,1,0,0,
        0,9417,9418,1,0,0,0,9418,9420,1,0,0,0,9419,9421,3,1202,601,0,9420,
        9419,1,0,0,0,9420,9421,1,0,0,0,9421,913,1,0,0,0,9422,9433,5,1999,
        0,0,9423,9424,5,246,0,0,9424,9430,5,580,0,0,9425,9431,5,1187,0,0,
        9426,9427,5,1409,0,0,9427,9431,3,916,458,0,9428,9429,5,63,0,0,9429,
        9431,3,916,458,0,9430,9425,1,0,0,0,9430,9426,1,0,0,0,9430,9428,1,
        0,0,0,9431,9434,1,0,0,0,9432,9434,5,1017,0,0,9433,9423,1,0,0,0,9433,
        9432,1,0,0,0,9434,915,1,0,0,0,9435,9436,7,101,0,0,9436,917,1,0,0,
        0,9437,9442,5,675,0,0,9438,9439,5,246,0,0,9439,9440,5,29,0,0,9440,
        9443,3,916,458,0,9441,9443,5,1017,0,0,9442,9438,1,0,0,0,9442,9441,
        1,0,0,0,9443,919,1,0,0,0,9444,9446,5,704,0,0,9445,9447,3,1188,594,
        0,9446,9445,1,0,0,0,9446,9447,1,0,0,0,9447,9472,1,0,0,0,9448,9470,
        5,2010,0,0,9449,9454,3,2300,1150,0,9450,9451,5,2353,0,0,9451,9453,
        3,2300,1150,0,9452,9450,1,0,0,0,9453,9456,1,0,0,0,9454,9452,1,0,
        0,0,9454,9455,1,0,0,0,9455,9471,1,0,0,0,9456,9454,1,0,0,0,9457,9458,
        3,2300,1150,0,9458,9459,5,2153,0,0,9459,9467,3,726,363,0,9460,9461,
        5,2353,0,0,9461,9462,3,2300,1150,0,9462,9463,5,2153,0,0,9463,9464,
        3,726,363,0,9464,9466,1,0,0,0,9465,9460,1,0,0,0,9466,9469,1,0,0,
        0,9467,9465,1,0,0,0,9467,9468,1,0,0,0,9468,9471,1,0,0,0,9469,9467,
        1,0,0,0,9470,9449,1,0,0,0,9470,9457,1,0,0,0,9471,9473,1,0,0,0,9472,
        9448,1,0,0,0,9472,9473,1,0,0,0,9473,9477,1,0,0,0,9474,9475,5,1074,
        0,0,9475,9477,5,704,0,0,9476,9444,1,0,0,0,9476,9474,1,0,0,0,9477,
        921,1,0,0,0,9478,9480,5,335,0,0,9479,9481,5,2353,0,0,9480,9479,1,
        0,0,0,9480,9481,1,0,0,0,9481,9482,1,0,0,0,9482,9483,3,926,463,0,
        9483,923,1,0,0,0,9484,9486,5,2005,0,0,9485,9487,5,2353,0,0,9486,
        9485,1,0,0,0,9486,9487,1,0,0,0,9487,9488,1,0,0,0,9488,9489,3,926,
        463,0,9489,925,1,0,0,0,9490,9492,5,2343,0,0,9491,9490,1,0,0,0,9491,
        9492,1,0,0,0,9492,9495,1,0,0,0,9493,9494,5,1617,0,0,9494,9496,3,
        1182,591,0,9495,9493,1,0,0,0,9495,9496,1,0,0,0,9496,9498,1,0,0,0,
        9497,9499,5,1509,0,0,9498,9497,1,0,0,0,9498,9499,1,0,0,0,9499,9501,
        1,0,0,0,9500,9502,3,930,465,0,9501,9500,1,0,0,0,9501,9502,1,0,0,
        0,9502,927,1,0,0,0,9503,9516,3,1422,711,0,9504,9505,5,2347,0,0,9505,
        9510,3,1422,711,0,9506,9507,5,2353,0,0,9507,9509,3,1422,711,0,9508,
        9506,1,0,0,0,9509,9512,1,0,0,0,9510,9508,1,0,0,0,9510,9511,1,0,0,
        0,9511,9513,1,0,0,0,9512,9510,1,0,0,0,9513,9514,5,2348,0,0,9514,
        9516,1,0,0,0,9515,9503,1,0,0,0,9515,9504,1,0,0,0,9516,9519,1,0,0,
        0,9517,9518,5,1617,0,0,9518,9520,3,1182,591,0,9519,9517,1,0,0,0,
        9519,9520,1,0,0,0,9520,9523,1,0,0,0,9521,9522,5,140,0,0,9522,9524,
        3,1182,591,0,9523,9521,1,0,0,0,9523,9524,1,0,0,0,9524,9526,1,0,0,
        0,9525,9527,5,1509,0,0,9526,9525,1,0,0,0,9526,9527,1,0,0,0,9527,
        929,1,0,0,0,9528,9538,5,91,0,0,9529,9539,5,1178,0,0,9530,9533,5,
        1193,0,0,9531,9532,5,970,0,0,9532,9534,3,1182,591,0,9533,9531,1,
        0,0,0,9533,9534,1,0,0,0,9534,9536,1,0,0,0,9535,9537,3,932,466,0,
        9536,9535,1,0,0,0,9536,9537,1,0,0,0,9537,9539,1,0,0,0,9538,9529,
        1,0,0,0,9538,9530,1,0,0,0,9539,931,1,0,0,0,9540,9543,5,876,0,0,9541,
        9544,5,2093,0,0,9542,9544,3,1182,591,0,9543,9541,1,0,0,0,9543,9542,
        1,0,0,0,9544,933,1,0,0,0,9545,9546,5,152,0,0,9546,9547,7,66,0,0,
        9547,935,1,0,0,0,9548,9554,5,1085,0,0,9549,9551,5,1261,0,0,9550,
        9552,5,2341,0,0,9551,9550,1,0,0,0,9551,9552,1,0,0,0,9552,9554,1,
        0,0,0,9553,9548,1,0,0,0,9553,9549,1,0,0,0,9554,937,1,0,0,0,9555,
        9556,5,42,0,0,9556,9557,5,865,0,0,9557,9558,5,2190,0,0,9558,9584,
        3,2302,1151,0,9559,9585,3,1200,600,0,9560,9585,3,946,473,0,9561,
        9585,3,1184,592,0,9562,9567,3,1598,799,0,9563,9564,5,2353,0,0,9564,
        9566,3,1598,799,0,9565,9563,1,0,0,0,9566,9569,1,0,0,0,9567,9565,
        1,0,0,0,9567,9568,1,0,0,0,9568,9585,1,0,0,0,9569,9567,1,0,0,0,9570,
        9575,3,1600,800,0,9571,9572,5,2353,0,0,9572,9574,3,1600,800,0,9573,
        9571,1,0,0,0,9574,9577,1,0,0,0,9575,9573,1,0,0,0,9575,9576,1,0,0,
        0,9576,9585,1,0,0,0,9577,9575,1,0,0,0,9578,9585,3,936,468,0,9579,
        9585,3,894,447,0,9580,9585,3,1248,624,0,9581,9585,3,1250,625,0,9582,
        9585,3,1252,626,0,9583,9585,3,1328,664,0,9584,9559,1,0,0,0,9584,
        9560,1,0,0,0,9584,9561,1,0,0,0,9584,9562,1,0,0,0,9584,9570,1,0,0,
        0,9584,9578,1,0,0,0,9584,9579,1,0,0,0,9584,9580,1,0,0,0,9584,9581,
        1,0,0,0,9584,9582,1,0,0,0,9584,9583,1,0,0,0,9584,9585,1,0,0,0,9585,
        9587,1,0,0,0,9586,9588,3,1520,760,0,9587,9586,1,0,0,0,9587,9588,
        1,0,0,0,9588,9592,1,0,0,0,9589,9590,5,2153,0,0,9590,9591,5,675,0,
        0,9591,9593,3,1200,600,0,9592,9589,1,0,0,0,9592,9593,1,0,0,0,9593,
        9595,1,0,0,0,9594,9596,3,940,470,0,9595,9594,1,0,0,0,9595,9596,1,
        0,0,0,9596,9604,1,0,0,0,9597,9598,3,1272,636,0,9598,9599,5,1409,
        0,0,9599,9600,5,1513,0,0,9600,9605,1,0,0,0,9601,9605,5,237,0,0,9602,
        9603,5,267,0,0,9603,9605,5,587,0,0,9604,9597,1,0,0,0,9604,9601,1,
        0,0,0,9604,9602,1,0,0,0,9604,9605,1,0,0,0,9605,939,1,0,0,0,9606,
        9607,3,942,471,0,9607,941,1,0,0,0,9608,9635,5,1453,0,0,9609,9636,
        5,541,0,0,9610,9636,5,238,0,0,9611,9636,5,576,0,0,9612,9613,5,1193,
        0,0,9613,9636,7,102,0,0,9614,9615,5,1654,0,0,9615,9616,5,2212,0,
        0,9616,9636,3,2052,1026,0,9617,9618,5,970,0,0,9618,9636,3,2052,1026,
        0,9619,9620,5,2212,0,0,9620,9621,5,1376,0,0,9621,9636,5,770,0,0,
        9622,9624,5,2153,0,0,9623,9625,5,368,0,0,9624,9623,1,0,0,0,9624,
        9625,1,0,0,0,9625,9626,1,0,0,0,9626,9627,5,859,0,0,9627,9628,5,1518,
        0,0,9628,9630,5,1567,0,0,9629,9631,3,944,472,0,9630,9629,1,0,0,0,
        9630,9631,1,0,0,0,9631,9636,1,0,0,0,9632,9633,5,2153,0,0,9633,9634,
        7,103,0,0,9634,9636,5,272,0,0,9635,9609,1,0,0,0,9635,9610,1,0,0,
        0,9635,9611,1,0,0,0,9635,9612,1,0,0,0,9635,9614,1,0,0,0,9635,9617,
        1,0,0,0,9635,9619,1,0,0,0,9635,9622,1,0,0,0,9635,9632,1,0,0,0,9636,
        9637,1,0,0,0,9637,9635,1,0,0,0,9637,9638,1,0,0,0,9638,943,1,0,0,
        0,9639,9640,3,2370,1185,0,9640,945,1,0,0,0,9641,9642,5,926,0,0,9642,
        9643,5,2347,0,0,9643,9647,3,2300,1150,0,9644,9645,5,471,0,0,9645,
        9648,3,1612,806,0,9646,9648,5,366,0,0,9647,9644,1,0,0,0,9647,9646,
        1,0,0,0,9647,9648,1,0,0,0,9648,9649,1,0,0,0,9649,9650,5,2348,0,0,
        9650,947,1,0,0,0,9651,9652,5,42,0,0,9652,9653,5,865,0,0,9653,9654,
        5,2190,0,0,9654,9656,5,836,0,0,9655,9657,5,576,0,0,9656,9655,1,0,
        0,0,9656,9657,1,0,0,0,9657,9658,1,0,0,0,9658,9659,5,1193,0,0,9659,
        9668,3,2302,1151,0,9660,9669,3,1200,600,0,9661,9669,3,950,475,0,
        9662,9669,3,936,468,0,9663,9669,3,894,447,0,9664,9669,3,1248,624,
        0,9665,9669,3,1252,626,0,9666,9669,3,952,476,0,9667,9669,3,1328,
        664,0,9668,9660,1,0,0,0,9668,9661,1,0,0,0,9668,9662,1,0,0,0,9668,
        9663,1,0,0,0,9668,9664,1,0,0,0,9668,9665,1,0,0,0,9668,9666,1,0,0,
        0,9668,9667,1,0,0,0,9668,9669,1,0,0,0,9669,9671,1,0,0,0,9670,9672,
        3,954,477,0,9671,9670,1,0,0,0,9671,9672,1,0,0,0,9672,9674,1,0,0,
        0,9673,9675,3,968,484,0,9674,9673,1,0,0,0,9674,9675,1,0,0,0,9675,
        949,1,0,0,0,9676,9677,5,21,0,0,9677,9678,5,2347,0,0,9678,9679,3,
        2300,1150,0,9679,9680,5,2348,0,0,9680,951,1,0,0,0,9681,9682,5,938,
        0,0,9682,9684,3,1206,603,0,9683,9685,3,936,468,0,9684,9683,1,0,0,
        0,9684,9685,1,0,0,0,9685,953,1,0,0,0,9686,9719,5,21,0,0,9687,9688,
        5,1172,0,0,9688,9694,5,648,0,0,9689,9690,5,1376,0,0,9690,9694,5,
        770,0,0,9691,9694,5,1523,0,0,9692,9694,5,1575,0,0,9693,9687,1,0,
        0,0,9693,9689,1,0,0,0,9693,9691,1,0,0,0,9693,9692,1,0,0,0,9694,9706,
        1,0,0,0,9695,9696,5,2347,0,0,9696,9701,3,2300,1150,0,9697,9698,5,
        2353,0,0,9698,9700,3,2300,1150,0,9699,9697,1,0,0,0,9700,9703,1,0,
        0,0,9701,9699,1,0,0,0,9701,9702,1,0,0,0,9702,9704,1,0,0,0,9703,9701,
        1,0,0,0,9704,9705,5,2348,0,0,9705,9707,1,0,0,0,9706,9695,1,0,0,0,
        9706,9707,1,0,0,0,9707,9720,1,0,0,0,9708,9709,5,2347,0,0,9709,9714,
        3,2300,1150,0,9710,9711,5,2353,0,0,9711,9713,3,2300,1150,0,9712,
        9710,1,0,0,0,9713,9716,1,0,0,0,9714,9712,1,0,0,0,9714,9715,1,0,0,
        0,9715,9717,1,0,0,0,9716,9714,1,0,0,0,9717,9718,5,2348,0,0,9718,
        9720,1,0,0,0,9719,9693,1,0,0,0,9719,9708,1,0,0,0,9720,9722,1,0,0,
        0,9721,9723,3,966,483,0,9722,9721,1,0,0,0,9722,9723,1,0,0,0,9723,
        955,1,0,0,0,9724,9725,3,2052,1026,0,9725,957,1,0,0,0,9726,9727,3,
        2052,1026,0,9727,959,1,0,0,0,9728,9729,7,104,0,0,9729,961,1,0,0,
        0,9730,9731,7,105,0,0,9731,963,1,0,0,0,9732,9733,5,305,0,0,9733,
        9734,5,865,0,0,9734,9735,5,2190,0,0,9735,9736,5,836,0,0,9736,9737,
        5,1193,0,0,9737,9747,3,2302,1151,0,9738,9744,3,1200,600,0,9739,9740,
        5,1996,0,0,9740,9744,3,2364,1182,0,9741,9744,3,894,447,0,9742,9744,
        7,106,0,0,9743,9738,1,0,0,0,9743,9739,1,0,0,0,9743,9741,1,0,0,0,
        9743,9742,1,0,0,0,9744,9745,1,0,0,0,9745,9743,1,0,0,0,9745,9746,
        1,0,0,0,9746,9748,1,0,0,0,9747,9743,1,0,0,0,9747,9748,1,0,0,0,9748,
        9750,1,0,0,0,9749,9751,3,936,468,0,9750,9749,1,0,0,0,9750,9751,1,
        0,0,0,9751,9791,1,0,0,0,9752,9768,5,2212,0,0,9753,9755,5,2353,0,
        0,9754,9753,1,0,0,0,9754,9755,1,0,0,0,9755,9764,1,0,0,0,9756,9757,
        5,1172,0,0,9757,9765,5,648,0,0,9758,9759,5,1376,0,0,9759,9765,5,
        770,0,0,9760,9765,5,1523,0,0,9761,9765,5,1575,0,0,9762,9763,5,231,
        0,0,9763,9765,5,1549,0,0,9764,9756,1,0,0,0,9764,9758,1,0,0,0,9764,
        9760,1,0,0,0,9764,9761,1,0,0,0,9764,9762,1,0,0,0,9765,9767,1,0,0,
        0,9766,9754,1,0,0,0,9767,9770,1,0,0,0,9768,9766,1,0,0,0,9768,9769,
        1,0,0,0,9769,9784,1,0,0,0,9770,9768,1,0,0,0,9771,9776,5,2347,0,0,
        9772,9774,5,2353,0,0,9773,9772,1,0,0,0,9773,9774,1,0,0,0,9774,9775,
        1,0,0,0,9775,9777,3,2370,1185,0,9776,9773,1,0,0,0,9777,9778,1,0,
        0,0,9778,9776,1,0,0,0,9778,9779,1,0,0,0,9779,9780,1,0,0,0,9780,9782,
        5,2348,0,0,9781,9783,3,966,483,0,9782,9781,1,0,0,0,9782,9783,1,0,
        0,0,9783,9785,1,0,0,0,9784,9771,1,0,0,0,9784,9785,1,0,0,0,9785,9787,
        1,0,0,0,9786,9788,3,968,484,0,9787,9786,1,0,0,0,9787,9788,1,0,0,
        0,9788,9790,1,0,0,0,9789,9752,1,0,0,0,9790,9793,1,0,0,0,9791,9789,
        1,0,0,0,9791,9792,1,0,0,0,9792,965,1,0,0,0,9793,9791,1,0,0,0,9794,
        9795,7,105,0,0,9795,9796,5,967,0,0,9796,9797,5,2164,0,0,9797,967,
        1,0,0,0,9798,9799,5,1400,0,0,9799,9801,5,656,0,0,9800,9802,7,104,
        0,0,9801,9800,1,0,0,0,9801,9802,1,0,0,0,9802,969,1,0,0,0,9803,9804,
        5,305,0,0,9804,9805,5,865,0,0,9805,9806,5,2263,0,0,9806,9811,3,980,
        490,0,9807,9808,5,2347,0,0,9808,9809,3,2318,1159,0,9809,9810,5,2348,
        0,0,9810,9812,1,0,0,0,9811,9807,1,0,0,0,9811,9812,1,0,0,0,9812,9814,
        1,0,0,0,9813,9815,3,978,489,0,9814,9813,1,0,0,0,9814,9815,1,0,0,
        0,9815,9817,1,0,0,0,9816,9818,3,976,488,0,9817,9816,1,0,0,0,9817,
        9818,1,0,0,0,9818,9821,1,0,0,0,9819,9820,7,17,0,0,9820,9822,5,1397,
        0,0,9821,9819,1,0,0,0,9821,9822,1,0,0,0,9822,9825,1,0,0,0,9823,9826,
        3,986,493,0,9824,9826,3,988,494,0,9825,9823,1,0,0,0,9825,9824,1,
        0,0,0,9826,971,1,0,0,0,9827,9828,5,42,0,0,9828,9829,5,865,0,0,9829,
        9830,5,2263,0,0,9830,9838,3,980,490,0,9831,9839,3,978,489,0,9832,
        9839,3,976,488,0,9833,9834,7,17,0,0,9834,9839,5,1397,0,0,9835,9839,
        5,237,0,0,9836,9839,5,1434,0,0,9837,9839,5,2110,0,0,9838,9831,1,
        0,0,0,9838,9832,1,0,0,0,9838,9833,1,0,0,0,9838,9835,1,0,0,0,9838,
        9836,1,0,0,0,9838,9837,1,0,0,0,9839,973,1,0,0,0,9840,9841,5,438,
        0,0,9841,9842,5,865,0,0,9842,9843,5,2263,0,0,9843,9844,3,980,490,
        0,9844,975,1,0,0,0,9845,9847,5,1453,0,0,9846,9848,7,107,0,0,9847,
        9846,1,0,0,0,9847,9848,1,0,0,0,9848,9860,1,0,0,0,9849,9858,5,1193,
        0,0,9850,9859,5,383,0,0,9851,9859,5,231,0,0,9852,9859,5,816,0,0,
        9853,9854,5,334,0,0,9854,9859,5,937,0,0,9855,9856,5,816,0,0,9856,
        9857,5,334,0,0,9857,9859,5,937,0,0,9858,9850,1,0,0,0,9858,9851,1,
        0,0,0,9858,9852,1,0,0,0,9858,9853,1,0,0,0,9858,9855,1,0,0,0,9859,
        9861,1,0,0,0,9860,9849,1,0,0,0,9860,9861,1,0,0,0,9861,977,1,0,0,
        0,9862,9863,5,1296,0,0,9863,9872,3,2356,1178,0,9864,9865,5,1299,
        0,0,9865,9872,3,2356,1178,0,9866,9867,5,1542,0,0,9867,9872,3,2356,
        1178,0,9868,9869,5,1996,0,0,9869,9872,3,1614,807,0,9870,9872,7,106,
        0,0,9871,9862,1,0,0,0,9871,9864,1,0,0,0,9871,9866,1,0,0,0,9871,9868,
        1,0,0,0,9871,9870,1,0,0,0,9872,9873,1,0,0,0,9873,9871,1,0,0,0,9873,
        9874,1,0,0,0,9874,979,1,0,0,0,9875,9878,3,2362,1181,0,9876,9877,
        5,2340,0,0,9877,9879,3,2364,1182,0,9878,9876,1,0,0,0,9878,9879,1,
        0,0,0,9879,981,1,0,0,0,9880,9883,3,2362,1181,0,9881,9882,5,2340,
        0,0,9882,9884,3,2364,1182,0,9883,9881,1,0,0,0,9883,9884,1,0,0,0,
        9884,983,1,0,0,0,9885,9890,3,2362,1181,0,9886,9887,5,2340,0,0,9887,
        9889,3,2364,1182,0,9888,9886,1,0,0,0,9889,9892,1,0,0,0,9890,9888,
        1,0,0,0,9890,9891,1,0,0,0,9891,985,1,0,0,0,9892,9890,1,0,0,0,9893,
        9894,5,1193,0,0,9894,9895,3,2302,1151,0,9895,9896,5,2347,0,0,9896,
        9897,3,2318,1159,0,9897,9898,5,2348,0,0,9898,987,1,0,0,0,9899,9900,
        5,67,0,0,9900,9901,3,1870,935,0,9901,989,1,0,0,0,9902,9903,5,42,
        0,0,9903,9904,5,1200,0,0,9904,9908,3,982,491,0,9905,9909,3,998,499,
        0,9906,9909,3,1010,505,0,9907,9909,5,237,0,0,9908,9905,1,0,0,0,9908,
        9906,1,0,0,0,9908,9907,1,0,0,0,9909,991,1,0,0,0,9910,9911,5,438,
        0,0,9911,9912,5,1200,0,0,9912,9914,3,982,491,0,9913,9915,5,576,0,
        0,9914,9913,1,0,0,0,9914,9915,1,0,0,0,9915,993,1,0,0,0,9916,9919,
        5,305,0,0,9917,9918,5,1237,0,0,9918,9920,5,1484,0,0,9919,9917,1,
        0,0,0,9919,9920,1,0,0,0,9920,9921,1,0,0,0,9921,9922,5,1200,0,0,9922,
        9923,3,982,491,0,9923,9924,5,128,0,0,9924,9929,3,996,498,0,9925,
        9926,5,2353,0,0,9926,9928,3,996,498,0,9927,9925,1,0,0,0,9928,9931,
        1,0,0,0,9929,9927,1,0,0,0,9929,9930,1,0,0,0,9930,9935,1,0,0,0,9931,
        9929,1,0,0,0,9932,9933,5,1599,0,0,9933,9934,5,2369,0,0,9934,9936,
        7,21,0,0,9935,9932,1,0,0,0,9935,9936,1,0,0,0,9936,995,1,0,0,0,9937,
        9938,5,2347,0,0,9938,9943,3,2336,1168,0,9939,9940,5,2353,0,0,9940,
        9942,3,2336,1168,0,9941,9939,1,0,0,0,9942,9945,1,0,0,0,9943,9941,
        1,0,0,0,9943,9944,1,0,0,0,9944,9946,1,0,0,0,9945,9943,1,0,0,0,9946,
        9947,5,2348,0,0,9947,9949,5,1508,0,0,9948,9950,5,2347,0,0,9949,9948,
        1,0,0,0,9949,9950,1,0,0,0,9950,9951,1,0,0,0,9951,9953,3,2336,1168,
        0,9952,9954,5,2348,0,0,9953,9952,1,0,0,0,9953,9954,1,0,0,0,9954,
        9956,1,0,0,0,9955,9957,3,1000,500,0,9956,9955,1,0,0,0,9956,9957,
        1,0,0,0,9957,9958,1,0,0,0,9958,9959,3,1008,504,0,9959,997,1,0,0,
        0,9960,9961,5,21,0,0,9961,9962,5,128,0,0,9962,9963,3,996,498,0,9963,
        999,1,0,0,0,9964,9965,5,48,0,0,9965,9966,5,2052,0,0,9966,9969,3,
        1002,501,0,9967,9969,3,1006,503,0,9968,9964,1,0,0,0,9968,9967,1,
        0,0,0,9969,1001,1,0,0,0,9970,9975,3,1004,502,0,9971,9972,5,2353,
        0,0,9972,9974,3,1004,502,0,9973,9971,1,0,0,0,9974,9977,1,0,0,0,9975,
        9973,1,0,0,0,9975,9976,1,0,0,0,9976,1003,1,0,0,0,9977,9975,1,0,0,
        0,9978,9979,3,2310,1155,0,9979,9980,5,2347,0,0,9980,9985,3,2336,
        1168,0,9981,9982,5,2353,0,0,9982,9984,3,2336,1168,0,9983,9981,1,
        0,0,0,9984,9987,1,0,0,0,9985,9983,1,0,0,0,9985,9986,1,0,0,0,9986,
        9988,1,0,0,0,9987,9985,1,0,0,0,9988,9989,5,2348,0,0,9989,1005,1,
        0,0,0,9990,9991,5,2212,0,0,9991,9992,5,675,0,0,9992,9993,5,281,0,
        0,9993,9994,5,2353,0,0,9994,9995,5,1544,0,0,9995,9996,5,281,0,0,
        9996,10000,3,2250,1125,0,9997,9998,5,247,0,0,9998,9999,5,48,0,0,
        9999,10001,5,334,0,0,10000,9997,1,0,0,0,10000,10001,1,0,0,0,10001,
        10005,1,0,0,0,10002,10003,5,2212,0,0,10003,10004,5,226,0,0,10004,
        10006,5,281,0,0,10005,10002,1,0,0,0,10005,10006,1,0,0,0,10006,1007,
        1,0,0,0,10007,10008,5,2153,0,0,10008,10009,3,984,492,0,10009,1009,
        1,0,0,0,10010,10011,5,438,0,0,10011,10012,5,128,0,0,10012,10013,
        5,2347,0,0,10013,10018,3,2336,1168,0,10014,10015,5,2353,0,0,10015,
        10017,3,2336,1168,0,10016,10014,1,0,0,0,10017,10020,1,0,0,0,10018,
        10016,1,0,0,0,10018,10019,1,0,0,0,10019,10021,1,0,0,0,10020,10018,
        1,0,0,0,10021,10023,5,2348,0,0,10022,10024,5,576,0,0,10023,10022,
        1,0,0,0,10023,10024,1,0,0,0,10024,1011,1,0,0,0,10025,10026,5,305,
        0,0,10026,10027,5,865,0,0,10027,10028,5,2190,0,0,10028,10031,3,2302,
        1151,0,10029,10030,5,1180,0,0,10030,10032,3,2272,1136,0,10031,10029,
        1,0,0,0,10031,10032,1,0,0,0,10032,10050,1,0,0,0,10033,10036,5,2347,
        0,0,10034,10037,3,1014,507,0,10035,10037,3,1016,508,0,10036,10034,
        1,0,0,0,10036,10035,1,0,0,0,10037,10045,1,0,0,0,10038,10041,5,2353,
        0,0,10039,10042,3,1014,507,0,10040,10042,3,1016,508,0,10041,10039,
        1,0,0,0,10041,10040,1,0,0,0,10042,10044,1,0,0,0,10043,10038,1,0,
        0,0,10044,10047,1,0,0,0,10045,10043,1,0,0,0,10045,10046,1,0,0,0,
        10046,10048,1,0,0,0,10047,10045,1,0,0,0,10048,10049,5,2348,0,0,10049,
        10051,1,0,0,0,10050,10033,1,0,0,0,10050,10051,1,0,0,0,10051,10072,
        1,0,0,0,10052,10053,5,1193,0,0,10053,10054,5,1360,0,0,10054,10058,
        5,1999,0,0,10055,10056,7,2,0,0,10056,10057,5,1445,0,0,10057,10059,
        5,1363,0,0,10058,10055,1,0,0,0,10058,10059,1,0,0,0,10059,10073,1,
        0,0,0,10060,10062,3,1208,604,0,10061,10060,1,0,0,0,10061,10062,1,
        0,0,0,10062,10064,1,0,0,0,10063,10065,7,106,0,0,10064,10063,1,0,
        0,0,10064,10065,1,0,0,0,10065,10067,1,0,0,0,10066,10068,3,936,468,
        0,10067,10066,1,0,0,0,10067,10068,1,0,0,0,10068,10070,1,0,0,0,10069,
        10071,3,934,467,0,10070,10069,1,0,0,0,10070,10071,1,0,0,0,10071,
        10073,1,0,0,0,10072,10052,1,0,0,0,10072,10061,1,0,0,0,10073,10091,
        1,0,0,0,10074,10075,5,2153,0,0,10075,10085,5,675,0,0,10076,10080,
        3,1200,600,0,10077,10078,5,1996,0,0,10078,10080,3,2364,1182,0,10079,
        10076,1,0,0,0,10079,10077,1,0,0,0,10080,10081,1,0,0,0,10081,10079,
        1,0,0,0,10081,10082,1,0,0,0,10082,10084,1,0,0,0,10083,10079,1,0,
        0,0,10084,10087,1,0,0,0,10085,10083,1,0,0,0,10085,10086,1,0,0,0,
        10086,10092,1,0,0,0,10087,10085,1,0,0,0,10088,10089,5,2153,0,0,10089,
        10090,5,1074,0,0,10090,10092,5,675,0,0,10091,10074,1,0,0,0,10091,
        10088,1,0,0,0,10091,10092,1,0,0,0,10092,10094,1,0,0,0,10093,10095,
        3,1018,509,0,10094,10093,1,0,0,0,10094,10095,1,0,0,0,10095,10098,
        1,0,0,0,10096,10097,5,580,0,0,10097,10099,5,2114,0,0,10098,10096,
        1,0,0,0,10098,10099,1,0,0,0,10099,10103,1,0,0,0,10100,10101,7,17,
        0,0,10101,10102,5,1409,0,0,10102,10104,5,1513,0,0,10103,10100,1,
        0,0,0,10103,10104,1,0,0,0,10104,10105,1,0,0,0,10105,10106,5,67,0,
        0,10106,10107,3,1842,921,0,10107,1013,1,0,0,0,10108,10109,5,1550,
        0,0,10109,10110,5,580,0,0,10110,10111,5,2347,0,0,10111,10112,3,2362,
        1181,0,10112,10113,5,2348,0,0,10113,10117,5,740,0,0,10114,10115,
        3,2244,1122,0,10115,10116,5,2340,0,0,10116,10118,1,0,0,0,10117,10114,
        1,0,0,0,10117,10118,1,0,0,0,10118,10119,1,0,0,0,10119,10120,3,2362,
        1181,0,10120,1015,1,0,0,0,10121,10124,3,2362,1181,0,10122,10124,
        3,2360,1180,0,10123,10121,1,0,0,0,10123,10122,1,0,0,0,10124,10127,
        1,0,0,0,10125,10126,5,471,0,0,10126,10128,3,1612,806,0,10127,10125,
        1,0,0,0,10127,10128,1,0,0,0,10128,1017,1,0,0,0,10129,10130,5,966,
        0,0,10130,10169,5,1453,0,0,10131,10164,5,1453,0,0,10132,10165,7,
        108,0,0,10133,10134,5,1193,0,0,10134,10165,7,102,0,0,10135,10136,
        5,1654,0,0,10136,10139,5,2212,0,0,10137,10139,5,970,0,0,10138,10135,
        1,0,0,0,10138,10137,1,0,0,0,10139,10165,1,0,0,0,10140,10144,5,2212,
        0,0,10141,10142,5,1376,0,0,10142,10145,5,770,0,0,10143,10145,5,1523,
        0,0,10144,10141,1,0,0,0,10144,10143,1,0,0,0,10145,10165,1,0,0,0,
        10146,10159,5,2153,0,0,10147,10149,5,368,0,0,10148,10150,7,109,0,
        0,10149,10148,1,0,0,0,10149,10150,1,0,0,0,10150,10151,1,0,0,0,10151,
        10152,5,1518,0,0,10152,10160,5,1567,0,0,10153,10155,7,109,0,0,10154,
        10153,1,0,0,0,10154,10155,1,0,0,0,10155,10156,1,0,0,0,10156,10157,
        5,1518,0,0,10157,10158,5,1567,0,0,10158,10160,5,2378,0,0,10159,10147,
        1,0,0,0,10159,10154,1,0,0,0,10160,10165,1,0,0,0,10161,10162,5,2153,
        0,0,10162,10163,7,103,0,0,10163,10165,5,272,0,0,10164,10132,1,0,
        0,0,10164,10133,1,0,0,0,10164,10138,1,0,0,0,10164,10140,1,0,0,0,
        10164,10146,1,0,0,0,10164,10161,1,0,0,0,10165,10166,1,0,0,0,10166,
        10164,1,0,0,0,10166,10167,1,0,0,0,10167,10169,1,0,0,0,10168,10129,
        1,0,0,0,10168,10131,1,0,0,0,10169,1019,1,0,0,0,10170,10171,5,438,
        0,0,10171,10172,5,865,0,0,10172,10173,5,2190,0,0,10173,10176,3,2302,
        1151,0,10174,10175,5,1372,0,0,10175,10177,5,1999,0,0,10176,10174,
        1,0,0,0,10176,10177,1,0,0,0,10177,1021,1,0,0,0,10178,10181,5,305,
        0,0,10179,10180,5,1237,0,0,10180,10182,5,1484,0,0,10181,10179,1,
        0,0,0,10181,10182,1,0,0,0,10182,10183,1,0,0,0,10183,10184,5,281,
        0,0,10184,10185,3,1024,512,0,10185,10189,5,2153,0,0,10186,10187,
        3,2310,1155,0,10187,10188,5,2340,0,0,10188,10190,1,0,0,0,10189,10186,
        1,0,0,0,10189,10190,1,0,0,0,10190,10191,1,0,0,0,10191,10196,3,2248,
        1124,0,10192,10193,5,699,0,0,10193,10197,7,70,0,0,10194,10195,5,
        5,0,0,10195,10197,5,603,0,0,10196,10192,1,0,0,0,10196,10194,1,0,
        0,0,10196,10197,1,0,0,0,10197,1023,1,0,0,0,10198,10199,3,2364,1182,
        0,10199,1025,1,0,0,0,10200,10201,5,305,0,0,10201,10202,5,210,0,0,
        10202,10203,3,474,237,0,10203,10204,5,2347,0,0,10204,10205,3,2300,
        1150,0,10205,10207,3,2336,1168,0,10206,10208,5,1626,0,0,10207,10206,
        1,0,0,0,10207,10208,1,0,0,0,10208,10217,1,0,0,0,10209,10210,5,2353,
        0,0,10210,10211,3,2300,1150,0,10211,10213,3,2336,1168,0,10212,10214,
        5,1626,0,0,10213,10212,1,0,0,0,10213,10214,1,0,0,0,10214,10216,1,
        0,0,0,10215,10209,1,0,0,0,10216,10219,1,0,0,0,10217,10215,1,0,0,
        0,10217,10218,1,0,0,0,10218,10220,1,0,0,0,10219,10217,1,0,0,0,10220,
        10240,5,2348,0,0,10221,10239,3,1200,600,0,10222,10223,5,1617,0,0,
        10223,10239,3,1182,591,0,10224,10225,5,1996,0,0,10225,10239,3,1614,
        807,0,10226,10239,5,675,0,0,10227,10228,5,1613,0,0,10228,10230,5,
        1999,0,0,10229,10227,1,0,0,0,10229,10230,1,0,0,0,10230,10231,1,0,
        0,0,10231,10232,5,620,0,0,10232,10236,5,2341,0,0,10233,10234,5,619,
        0,0,10234,10235,5,740,0,0,10235,10237,3,2052,1026,0,10236,10233,
        1,0,0,0,10236,10237,1,0,0,0,10237,10239,1,0,0,0,10238,10221,1,0,
        0,0,10238,10222,1,0,0,0,10238,10224,1,0,0,0,10238,10226,1,0,0,0,
        10238,10229,1,0,0,0,10239,10242,1,0,0,0,10240,10238,1,0,0,0,10240,
        10241,1,0,0,0,10241,10244,1,0,0,0,10242,10240,1,0,0,0,10243,10245,
        3,936,468,0,10244,10243,1,0,0,0,10244,10245,1,0,0,0,10245,10247,
        1,0,0,0,10246,10248,7,110,0,0,10247,10246,1,0,0,0,10247,10248,1,
        0,0,0,10248,10250,1,0,0,0,10249,10251,7,106,0,0,10250,10249,1,0,
        0,0,10250,10251,1,0,0,0,10251,1027,1,0,0,0,10252,10254,5,305,0,0,
        10253,10255,5,855,0,0,10254,10253,1,0,0,0,10254,10255,1,0,0,0,10255,
        10256,1,0,0,0,10256,10257,5,1388,0,0,10257,10258,3,2364,1182,0,10258,
        10261,5,810,0,0,10259,10262,3,1030,515,0,10260,10262,3,1032,516,
        0,10261,10259,1,0,0,0,10261,10260,1,0,0,0,10262,10263,1,0,0,0,10263,
        10261,1,0,0,0,10263,10264,1,0,0,0,10264,10266,1,0,0,0,10265,10267,
        3,774,387,0,10266,10265,1,0,0,0,10266,10267,1,0,0,0,10267,1029,1,
        0,0,0,10268,10269,7,111,0,0,10269,10277,7,112,0,0,10270,10274,5,
        1381,0,0,10271,10275,3,1182,591,0,10272,10275,5,2093,0,0,10273,10275,
        5,368,0,0,10274,10271,1,0,0,0,10274,10272,1,0,0,0,10274,10273,1,
        0,0,0,10275,10277,1,0,0,0,10276,10268,1,0,0,0,10276,10270,1,0,0,
        0,10277,1031,1,0,0,0,10278,10282,7,113,0,0,10279,10283,3,2052,1026,
        0,10280,10283,5,2093,0,0,10281,10283,5,368,0,0,10282,10279,1,0,0,
        0,10282,10280,1,0,0,0,10282,10281,1,0,0,0,10283,10296,1,0,0,0,10284,
        10288,5,1287,0,0,10285,10289,3,2278,1139,0,10286,10289,5,1162,0,
        0,10287,10289,5,368,0,0,10288,10285,1,0,0,0,10288,10286,1,0,0,0,
        10288,10287,1,0,0,0,10289,10296,1,0,0,0,10290,10293,5,1286,0,0,10291,
        10294,3,2052,1026,0,10292,10294,5,368,0,0,10293,10291,1,0,0,0,10293,
        10292,1,0,0,0,10294,10296,1,0,0,0,10295,10278,1,0,0,0,10295,10284,
        1,0,0,0,10295,10290,1,0,0,0,10296,1033,1,0,0,0,10297,10298,5,305,
        0,0,10298,10299,5,826,0,0,10299,10300,5,1388,0,0,10300,10303,3,2364,
        1182,0,10301,10304,3,1036,518,0,10302,10304,3,1038,519,0,10303,10301,
        1,0,0,0,10303,10302,1,0,0,0,10303,10304,1,0,0,0,10304,1035,1,0,0,
        0,10305,10306,5,588,0,0,10306,10307,3,2364,1182,0,10307,1037,1,0,
        0,0,10308,10309,5,663,0,0,10309,10310,3,2364,1182,0,10310,1039,1,
        0,0,0,10311,10314,5,305,0,0,10312,10313,5,1237,0,0,10313,10315,5,
        1484,0,0,10314,10312,1,0,0,0,10314,10315,1,0,0,0,10315,10317,1,0,
        0,0,10316,10318,7,28,0,0,10317,10316,1,0,0,0,10317,10318,1,0,0,0,
        10318,10319,1,0,0,0,10319,10321,5,1245,0,0,10320,10322,3,2364,1182,
        0,10321,10320,1,0,0,0,10321,10322,1,0,0,0,10322,10328,1,0,0,0,10323,
        10325,5,588,0,0,10324,10326,7,28,0,0,10325,10324,1,0,0,0,10325,10326,
        1,0,0,0,10326,10327,1,0,0,0,10327,10329,3,2364,1182,0,10328,10323,
        1,0,0,0,10328,10329,1,0,0,0,10329,10333,1,0,0,0,10330,10331,5,580,
        0,0,10331,10332,5,175,0,0,10332,10334,3,2364,1182,0,10333,10330,
        1,0,0,0,10333,10334,1,0,0,0,10334,10337,1,0,0,0,10335,10336,5,1193,
        0,0,10336,10338,3,1746,873,0,10337,10335,1,0,0,0,10337,10338,1,0,
        0,0,10338,1041,1,0,0,0,10339,10341,5,305,0,0,10340,10342,5,200,0,
        0,10341,10340,1,0,0,0,10341,10342,1,0,0,0,10342,10343,1,0,0,0,10343,
        10344,5,1496,0,0,10344,10345,5,1338,0,0,10345,10350,3,2364,1182,
        0,10346,10347,5,580,0,0,10347,10348,5,1336,0,0,10348,10349,5,333,
        0,0,10349,10351,3,2364,1182,0,10350,10346,1,0,0,0,10350,10351,1,
        0,0,0,10351,10356,1,0,0,0,10352,10353,5,67,0,0,10353,10354,5,1180,
        0,0,10354,10355,7,79,0,0,10355,10357,3,2052,1026,0,10356,10352,1,
        0,0,0,10356,10357,1,0,0,0,10357,10362,1,0,0,0,10358,10363,5,1372,
        0,0,10359,10360,5,615,0,0,10360,10361,5,565,0,0,10361,10363,5,333,
        0,0,10362,10358,1,0,0,0,10362,10359,1,0,0,0,10362,10363,1,0,0,0,
        10363,1043,1,0,0,0,10364,10365,5,305,0,0,10365,10366,5,1515,0,0,
        10366,10368,3,2266,1133,0,10367,10369,3,1486,743,0,10368,10367,1,
        0,0,0,10368,10369,1,0,0,0,10369,10371,1,0,0,0,10370,10372,3,774,
        387,0,10371,10370,1,0,0,0,10371,10372,1,0,0,0,10372,1045,1,0,0,0,
        10373,10383,5,305,0,0,10374,10375,7,114,0,0,10375,10384,5,2007,0,
        0,10376,10384,5,2285,0,0,10377,10384,5,2275,0,0,10378,10380,5,2279,
        0,0,10379,10378,1,0,0,0,10379,10380,1,0,0,0,10380,10381,1,0,0,0,
        10381,10384,5,2271,0,0,10382,10384,5,2279,0,0,10383,10374,1,0,0,
        0,10383,10376,1,0,0,0,10383,10377,1,0,0,0,10383,10379,1,0,0,0,10383,
        10382,1,0,0,0,10383,10384,1,0,0,0,10384,10385,1,0,0,0,10385,10389,
        5,1999,0,0,10386,10387,3,2244,1122,0,10387,10388,5,2340,0,0,10388,
        10390,1,0,0,0,10389,10386,1,0,0,0,10389,10390,1,0,0,0,10390,10391,
        1,0,0,0,10391,10395,3,1114,557,0,10392,10393,5,650,0,0,10393,10394,
        5,1138,0,0,10394,10396,5,508,0,0,10395,10392,1,0,0,0,10395,10396,
        1,0,0,0,10396,10407,1,0,0,0,10397,10398,5,1599,0,0,10398,10405,5,
        2369,0,0,10399,10406,5,894,0,0,10400,10402,5,2276,0,0,10401,10400,
        1,0,0,0,10401,10402,1,0,0,0,10402,10403,1,0,0,0,10403,10406,5,334,
        0,0,10404,10406,5,1071,0,0,10405,10399,1,0,0,0,10405,10401,1,0,0,
        0,10405,10404,1,0,0,0,10406,10408,1,0,0,0,10407,10397,1,0,0,0,10407,
        10408,1,0,0,0,10408,10412,1,0,0,0,10409,10413,3,1070,535,0,10410,
        10413,3,1048,524,0,10411,10413,3,1058,529,0,10412,10409,1,0,0,0,
        10412,10410,1,0,0,0,10412,10411,1,0,0,0,10413,10415,1,0,0,0,10414,
        10416,3,1490,745,0,10415,10414,1,0,0,0,10415,10416,1,0,0,0,10416,
        10419,1,0,0,0,10417,10418,5,1265,0,0,10418,10420,3,2302,1151,0,10419,
        10417,1,0,0,0,10419,10420,1,0,0,0,10420,10423,1,0,0,0,10421,10422,
        5,2123,0,0,10422,10424,5,1411,0,0,10423,10421,1,0,0,0,10423,10424,
        1,0,0,0,10424,1047,1,0,0,0,10425,10426,5,1180,0,0,10426,10431,5,
        2253,0,0,10427,10428,5,2347,0,0,10428,10429,3,1066,533,0,10429,10430,
        5,2348,0,0,10430,10432,1,0,0,0,10431,10427,1,0,0,0,10431,10432,1,
        0,0,0,10432,10435,1,0,0,0,10433,10434,5,2253,0,0,10434,10436,3,1054,
        527,0,10435,10433,1,0,0,0,10435,10436,1,0,0,0,10436,10438,1,0,0,
        0,10437,10439,3,1056,528,0,10438,10437,1,0,0,0,10438,10439,1,0,0,
        0,10439,10441,1,0,0,0,10440,10442,3,1050,525,0,10441,10440,1,0,0,
        0,10441,10442,1,0,0,0,10442,10447,1,0,0,0,10443,10444,5,1193,0,0,
        10444,10445,5,231,0,0,10445,10446,7,115,0,0,10446,10448,5,1529,0,
        0,10447,10443,1,0,0,0,10447,10448,1,0,0,0,10448,10450,1,0,0,0,10449,
        10451,3,1064,532,0,10450,10449,1,0,0,0,10450,10451,1,0,0,0,10451,
        10453,1,0,0,0,10452,10454,3,1062,531,0,10453,10452,1,0,0,0,10453,
        10454,1,0,0,0,10454,10456,1,0,0,0,10455,10457,3,1208,604,0,10456,
        10455,1,0,0,0,10456,10457,1,0,0,0,10457,10458,1,0,0,0,10458,10459,
        3,1088,544,0,10459,1049,1,0,0,0,10460,10461,5,2192,0,0,10461,10462,
        5,227,0,0,10462,10463,5,2347,0,0,10463,10464,3,2300,1150,0,10464,
        10465,5,67,0,0,10465,10466,5,2347,0,0,10466,10467,3,2052,1026,0,
        10467,10477,5,2348,0,0,10468,10469,5,2353,0,0,10469,10470,3,2300,
        1150,0,10470,10471,5,67,0,0,10471,10472,5,2347,0,0,10472,10473,3,
        2052,1026,0,10473,10474,5,2348,0,0,10474,10476,1,0,0,0,10475,10468,
        1,0,0,0,10476,10479,1,0,0,0,10477,10475,1,0,0,0,10477,10478,1,0,
        0,0,10478,10480,1,0,0,0,10479,10477,1,0,0,0,10480,10481,5,2348,0,
        0,10481,1051,1,0,0,0,10482,10484,5,2253,0,0,10483,10485,5,226,0,
        0,10484,10483,1,0,0,0,10484,10485,1,0,0,0,10485,10486,1,0,0,0,10486,
        10488,3,2300,1150,0,10487,10489,3,1054,527,0,10488,10487,1,0,0,0,
        10488,10489,1,0,0,0,10489,10491,1,0,0,0,10490,10492,3,1056,528,0,
        10491,10490,1,0,0,0,10491,10492,1,0,0,0,10492,1053,1,0,0,0,10493,
        10494,5,1679,0,0,10494,10518,5,67,0,0,10495,10496,5,1172,0,0,10496,
        10519,5,1473,0,0,10497,10499,7,116,0,0,10498,10497,1,0,0,0,10498,
        10499,1,0,0,0,10499,10503,1,0,0,0,10500,10504,5,205,0,0,10501,10502,
        5,119,0,0,10502,10504,5,2254,0,0,10503,10500,1,0,0,0,10503,10501,
        1,0,0,0,10504,10516,1,0,0,0,10505,10510,3,1592,796,0,10506,10507,
        5,2347,0,0,10507,10508,3,1604,802,0,10508,10509,5,2348,0,0,10509,
        10511,1,0,0,0,10510,10506,1,0,0,0,10510,10511,1,0,0,0,10511,10517,
        1,0,0,0,10512,10513,5,2347,0,0,10513,10514,3,1604,802,0,10514,10515,
        5,2348,0,0,10515,10517,1,0,0,0,10516,10505,1,0,0,0,10516,10512,1,
        0,0,0,10516,10517,1,0,0,0,10517,10519,1,0,0,0,10518,10495,1,0,0,
        0,10518,10498,1,0,0,0,10519,10525,1,0,0,0,10520,10521,5,1679,0,0,
        10521,10522,5,2170,0,0,10522,10523,5,67,0,0,10523,10525,7,93,0,0,
        10524,10493,1,0,0,0,10524,10520,1,0,0,0,10525,1055,1,0,0,0,10526,
        10527,5,2248,0,0,10527,10529,5,2344,0,0,10528,10526,1,0,0,0,10528,
        10529,1,0,0,0,10529,10530,1,0,0,0,10530,10531,5,455,0,0,10531,10535,
        5,2344,0,0,10532,10533,3,1274,637,0,10533,10534,5,1075,0,0,10534,
        10536,1,0,0,0,10535,10532,1,0,0,0,10535,10536,1,0,0,0,10536,10540,
        1,0,0,0,10537,10538,3,1274,637,0,10538,10539,5,55,0,0,10539,10541,
        1,0,0,0,10540,10537,1,0,0,0,10540,10541,1,0,0,0,10541,1057,1,0,0,
        0,10542,10546,5,1180,0,0,10543,10544,3,2244,1122,0,10544,10545,5,
        2340,0,0,10545,10547,1,0,0,0,10546,10543,1,0,0,0,10546,10547,1,0,
        0,0,10547,10548,1,0,0,0,10548,10550,3,1060,530,0,10549,10551,3,1068,
        534,0,10550,10549,1,0,0,0,10550,10551,1,0,0,0,10551,10563,1,0,0,
        0,10552,10553,5,2347,0,0,10553,10558,3,1066,533,0,10554,10555,5,
        2353,0,0,10555,10557,3,1066,533,0,10556,10554,1,0,0,0,10557,10560,
        1,0,0,0,10558,10556,1,0,0,0,10558,10559,1,0,0,0,10559,10561,1,0,
        0,0,10560,10558,1,0,0,0,10561,10562,5,2348,0,0,10562,10564,1,0,0,
        0,10563,10552,1,0,0,0,10563,10564,1,0,0,0,10564,10569,1,0,0,0,10565,
        10566,5,1193,0,0,10566,10567,5,231,0,0,10567,10568,7,115,0,0,10568,
        10570,5,1529,0,0,10569,10565,1,0,0,0,10569,10570,1,0,0,0,10570,10572,
        1,0,0,0,10571,10573,3,1064,532,0,10572,10571,1,0,0,0,10572,10573,
        1,0,0,0,10573,10575,1,0,0,0,10574,10576,3,1062,531,0,10575,10574,
        1,0,0,0,10575,10576,1,0,0,0,10576,10578,1,0,0,0,10577,10579,3,1208,
        604,0,10578,10577,1,0,0,0,10578,10579,1,0,0,0,10579,10580,1,0,0,
        0,10580,10581,3,1088,544,0,10581,1059,1,0,0,0,10582,10583,3,2370,
        1185,0,10583,1061,1,0,0,0,10584,10586,5,1181,0,0,10585,10587,3,2286,
        1143,0,10586,10585,1,0,0,0,10586,10587,1,0,0,0,10587,10588,1,0,0,
        0,10588,10592,5,2347,0,0,10589,10593,3,1200,600,0,10590,10591,5,
        1996,0,0,10591,10593,3,1614,807,0,10592,10589,1,0,0,0,10592,10590,
        1,0,0,0,10593,10594,1,0,0,0,10594,10592,1,0,0,0,10594,10595,1,0,
        0,0,10595,10596,1,0,0,0,10596,10597,5,2348,0,0,10597,1063,1,0,0,
        0,10598,10599,5,1172,0,0,10599,10600,5,645,0,0,10600,10605,5,740,
        0,0,10601,10602,5,1865,0,0,10602,10606,5,600,0,0,10603,10604,5,1376,
        0,0,10604,10606,5,770,0,0,10605,10601,1,0,0,0,10605,10603,1,0,0,
        0,10606,1065,1,0,0,0,10607,10610,3,2300,1150,0,10608,10610,3,2236,
        1118,0,10609,10607,1,0,0,0,10609,10608,1,0,0,0,10610,10613,1,0,0,
        0,10611,10612,5,368,0,0,10612,10614,3,2052,1026,0,10613,10611,1,
        0,0,0,10613,10614,1,0,0,0,10614,10624,1,0,0,0,10615,10620,3,854,
        427,0,10616,10617,5,2353,0,0,10617,10619,3,854,427,0,10618,10616,
        1,0,0,0,10619,10622,1,0,0,0,10620,10618,1,0,0,0,10620,10621,1,0,
        0,0,10621,10625,1,0,0,0,10622,10620,1,0,0,0,10623,10625,3,856,428,
        0,10624,10615,1,0,0,0,10624,10623,1,0,0,0,10624,10625,1,0,0,0,10625,
        10630,1,0,0,0,10626,10630,3,860,430,0,10627,10630,3,858,429,0,10628,
        10630,3,1654,827,0,10629,10609,1,0,0,0,10629,10626,1,0,0,0,10629,
        10627,1,0,0,0,10629,10628,1,0,0,0,10630,1067,1,0,0,0,10631,10633,
        5,1138,0,0,10632,10631,1,0,0,0,10632,10633,1,0,0,0,10633,10634,1,
        0,0,0,10634,10635,5,1696,0,0,10635,10636,5,80,0,0,10636,10637,5,
        38,0,0,10637,10638,5,800,0,0,10638,1069,1,0,0,0,10639,10640,5,2347,
        0,0,10640,10645,3,1116,558,0,10641,10642,5,2353,0,0,10642,10644,
        3,1116,558,0,10643,10641,1,0,0,0,10644,10647,1,0,0,0,10645,10643,
        1,0,0,0,10645,10646,1,0,0,0,10646,10648,1,0,0,0,10647,10645,1,0,
        0,0,10648,10649,5,2348,0,0,10649,10651,1,0,0,0,10650,10639,1,0,0,
        0,10650,10651,1,0,0,0,10651,10652,1,0,0,0,10652,10654,3,1072,536,
        0,10653,10655,3,1078,539,0,10654,10653,1,0,0,0,10654,10655,1,0,0,
        0,10655,10659,1,0,0,0,10656,10657,5,368,0,0,10657,10658,5,2273,0,
        0,10658,10660,3,1086,543,0,10659,10656,1,0,0,0,10659,10660,1,0,0,
        0,10660,10665,1,0,0,0,10661,10662,5,1193,0,0,10662,10663,5,231,0,
        0,10663,10664,7,117,0,0,10664,10666,5,2274,0,0,10665,10661,1,0,0,
        0,10665,10666,1,0,0,0,10666,10671,1,0,0,0,10667,10668,5,1193,0,0,
        10668,10669,5,231,0,0,10669,10670,7,115,0,0,10670,10672,5,1529,0,
        0,10671,10667,1,0,0,0,10671,10672,1,0,0,0,10672,10674,1,0,0,0,10673,
        10675,3,1208,604,0,10674,10673,1,0,0,0,10674,10675,1,0,0,0,10675,
        10676,1,0,0,0,10676,10677,3,1088,544,0,10677,1071,1,0,0,0,10678,
        10680,3,1074,537,0,10679,10678,1,0,0,0,10679,10680,1,0,0,0,10680,
        10682,1,0,0,0,10681,10683,3,1076,538,0,10682,10681,1,0,0,0,10682,
        10683,1,0,0,0,10683,1073,1,0,0,0,10684,10685,5,1074,0,0,10685,10691,
        5,438,0,0,10686,10687,5,2109,0,0,10687,10688,3,2356,1178,0,10688,
        10689,5,347,0,0,10689,10690,5,2278,0,0,10690,10692,1,0,0,0,10691,
        10686,1,0,0,0,10691,10692,1,0,0,0,10692,1075,1,0,0,0,10693,10694,
        5,1074,0,0,10694,10706,5,381,0,0,10695,10697,5,827,0,0,10696,10695,
        1,0,0,0,10696,10697,1,0,0,0,10697,10707,1,0,0,0,10698,10699,5,2109,
        0,0,10699,10700,3,2356,1178,0,10700,10701,5,347,0,0,10701,10702,
        5,33,0,0,10702,10704,5,713,0,0,10703,10705,5,827,0,0,10704,10703,
        1,0,0,0,10704,10705,1,0,0,0,10705,10707,1,0,0,0,10706,10696,1,0,
        0,0,10706,10698,1,0,0,0,10707,1077,1,0,0,0,10708,10709,3,1080,540,
        0,10709,10710,3,1082,541,0,10710,10711,3,1084,542,0,10711,1079,1,
        0,0,0,10712,10713,5,1074,0,0,10713,10719,5,438,0,0,10714,10715,5,
        2109,0,0,10715,10716,3,2356,1178,0,10716,10717,5,347,0,0,10717,10718,
        5,2278,0,0,10718,10720,1,0,0,0,10719,10714,1,0,0,0,10719,10720,1,
        0,0,0,10720,1081,1,0,0,0,10721,10722,5,1074,0,0,10722,10734,5,381,
        0,0,10723,10725,5,827,0,0,10724,10723,1,0,0,0,10724,10725,1,0,0,
        0,10725,10735,1,0,0,0,10726,10727,5,2109,0,0,10727,10728,3,2356,
        1178,0,10728,10729,5,347,0,0,10729,10730,5,33,0,0,10730,10732,5,
        713,0,0,10731,10733,5,827,0,0,10732,10731,1,0,0,0,10732,10733,1,
        0,0,0,10733,10735,1,0,0,0,10734,10724,1,0,0,0,10734,10726,1,0,0,
        0,10735,1083,1,0,0,0,10736,10737,5,2277,0,0,10737,10738,5,2153,0,
        0,10738,10739,5,2284,0,0,10739,10740,5,2189,0,0,10740,10741,5,2286,
        0,0,10741,1085,1,0,0,0,10742,10743,3,2362,1181,0,10743,1087,1,0,
        0,0,10744,10746,3,1618,809,0,10745,10744,1,0,0,0,10745,10746,1,0,
        0,0,10746,10748,1,0,0,0,10747,10749,3,1090,545,0,10748,10747,1,0,
        0,0,10748,10749,1,0,0,0,10749,10751,1,0,0,0,10750,10752,3,1092,546,
        0,10751,10750,1,0,0,0,10751,10752,1,0,0,0,10752,10754,1,0,0,0,10753,
        10755,3,1118,559,0,10754,10753,1,0,0,0,10754,10755,1,0,0,0,10755,
        10757,1,0,0,0,10756,10758,3,1094,547,0,10757,10756,1,0,0,0,10757,
        10758,1,0,0,0,10758,10760,1,0,0,0,10759,10761,7,106,0,0,10760,10759,
        1,0,0,0,10760,10761,1,0,0,0,10761,10763,1,0,0,0,10762,10764,3,116,
        58,0,10763,10762,1,0,0,0,10763,10764,1,0,0,0,10764,10766,1,0,0,0,
        10765,10767,3,936,468,0,10766,10765,1,0,0,0,10766,10767,1,0,0,0,
        10767,10769,1,0,0,0,10768,10770,3,530,265,0,10769,10768,1,0,0,0,
        10769,10770,1,0,0,0,10770,10772,1,0,0,0,10771,10773,7,110,0,0,10772,
        10771,1,0,0,0,10772,10773,1,0,0,0,10773,10777,1,0,0,0,10774,10776,
        3,1540,770,0,10775,10774,1,0,0,0,10776,10779,1,0,0,0,10777,10775,
        1,0,0,0,10777,10778,1,0,0,0,10778,10781,1,0,0,0,10779,10777,1,0,
        0,0,10780,10782,3,1236,618,0,10781,10780,1,0,0,0,10781,10782,1,0,
        0,0,10782,10784,1,0,0,0,10783,10785,3,1112,556,0,10784,10783,1,0,
        0,0,10784,10785,1,0,0,0,10785,10787,1,0,0,0,10786,10788,3,1238,619,
        0,10787,10786,1,0,0,0,10787,10788,1,0,0,0,10788,10790,1,0,0,0,10789,
        10791,3,1208,604,0,10790,10789,1,0,0,0,10790,10791,1,0,0,0,10791,
        10794,1,0,0,0,10792,10793,5,1528,0,0,10793,10795,5,62,0,0,10794,
        10792,1,0,0,0,10794,10795,1,0,0,0,10795,10808,1,0,0,0,10796,10797,
        5,67,0,0,10797,10809,3,1842,921,0,10798,10799,5,580,0,0,10799,10800,
        5,501,0,0,10800,10801,5,2212,0,0,10801,10805,5,1999,0,0,10802,10803,
        3,2244,1122,0,10803,10804,5,2340,0,0,10804,10806,1,0,0,0,10805,10802,
        1,0,0,0,10805,10806,1,0,0,0,10806,10807,1,0,0,0,10807,10809,3,1114,
        557,0,10808,10796,1,0,0,0,10808,10798,1,0,0,0,10808,10809,1,0,0,
        0,10809,1089,1,0,0,0,10810,10811,5,1429,0,0,10811,10812,7,11,0,0,
        10812,1091,1,0,0,0,10813,10814,5,676,0,0,10814,10815,7,96,0,0,10815,
        1093,1,0,0,0,10816,10818,5,214,0,0,10817,10819,3,1096,548,0,10818,
        10817,1,0,0,0,10818,10819,1,0,0,0,10819,10820,1,0,0,0,10820,10826,
        3,1102,551,0,10821,10823,3,1108,554,0,10822,10821,1,0,0,0,10822,
        10823,1,0,0,0,10823,10824,1,0,0,0,10824,10825,5,1193,0,0,10825,10827,
        5,816,0,0,10826,10822,1,0,0,0,10826,10827,1,0,0,0,10827,10834,1,
        0,0,0,10828,10830,3,1108,554,0,10829,10828,1,0,0,0,10829,10830,1,
        0,0,0,10830,10831,1,0,0,0,10831,10832,5,1193,0,0,10832,10833,5,334,
        0,0,10833,10835,5,937,0,0,10834,10829,1,0,0,0,10834,10835,1,0,0,
        0,10835,10837,1,0,0,0,10836,10838,3,1110,555,0,10837,10836,1,0,0,
        0,10837,10838,1,0,0,0,10838,1095,1,0,0,0,10839,10840,3,2244,1122,
        0,10840,10841,5,2340,0,0,10841,10843,1,0,0,0,10842,10839,1,0,0,0,
        10842,10843,1,0,0,0,10843,10844,1,0,0,0,10844,10845,3,1114,557,0,
        10845,10850,3,1098,549,0,10846,10847,5,2353,0,0,10847,10849,3,1098,
        549,0,10848,10846,1,0,0,0,10849,10852,1,0,0,0,10850,10848,1,0,0,
        0,10850,10851,1,0,0,0,10851,1097,1,0,0,0,10852,10850,1,0,0,0,10853,
        10857,5,748,0,0,10854,10855,3,2244,1122,0,10855,10856,5,2340,0,0,
        10856,10858,1,0,0,0,10857,10854,1,0,0,0,10857,10858,1,0,0,0,10858,
        10859,1,0,0,0,10859,10860,3,1114,557,0,10860,10861,5,1193,0,0,10861,
        10862,5,2347,0,0,10862,10863,3,1100,550,0,10863,10864,5,2348,0,0,
        10864,1099,1,0,0,0,10865,10866,3,2052,1026,0,10866,1101,1,0,0,0,
        10867,10869,5,154,0,0,10868,10870,7,118,0,0,10869,10868,1,0,0,0,
        10869,10870,1,0,0,0,10870,10871,1,0,0,0,10871,10872,5,1233,0,0,10872,
        10873,3,1104,552,0,10873,1103,1,0,0,0,10874,10887,3,1106,553,0,10875,
        10876,5,2347,0,0,10876,10881,3,1106,553,0,10877,10878,5,2353,0,0,
        10878,10880,3,1106,553,0,10879,10877,1,0,0,0,10880,10883,1,0,0,0,
        10881,10879,1,0,0,0,10881,10882,1,0,0,0,10882,10884,1,0,0,0,10883,
        10881,1,0,0,0,10884,10885,5,2348,0,0,10885,10887,1,0,0,0,10886,10874,
        1,0,0,0,10886,10875,1,0,0,0,10887,1105,1,0,0,0,10888,10889,5,2347,
        0,0,10889,10894,3,2300,1150,0,10890,10891,5,2353,0,0,10891,10893,
        3,2300,1150,0,10892,10890,1,0,0,0,10893,10896,1,0,0,0,10894,10892,
        1,0,0,0,10894,10895,1,0,0,0,10895,10897,1,0,0,0,10896,10894,1,0,
        0,0,10897,10898,5,2348,0,0,10898,1107,1,0,0,0,10899,10900,7,119,
        0,0,10900,1109,1,0,0,0,10901,10902,5,2212,0,0,10902,10903,5,865,
        0,0,10903,10908,5,2263,0,0,10904,10905,5,2347,0,0,10905,10906,3,
        980,490,0,10906,10907,5,2348,0,0,10907,10909,1,0,0,0,10908,10904,
        1,0,0,0,10908,10909,1,0,0,0,10909,10914,1,0,0,0,10910,10911,5,2210,
        0,0,10911,10912,5,865,0,0,10912,10914,5,2263,0,0,10913,10901,1,0,
        0,0,10913,10910,1,0,0,0,10914,1111,1,0,0,0,10915,10916,5,404,0,0,
        10916,10917,5,833,0,0,10917,10930,5,1485,0,0,10918,10919,5,467,0,
        0,10919,10920,5,833,0,0,10920,10927,5,1485,0,0,10921,10925,5,38,
        0,0,10922,10923,5,40,0,0,10923,10925,5,1149,0,0,10924,10921,1,0,
        0,0,10924,10922,1,0,0,0,10925,10926,1,0,0,0,10926,10928,5,773,0,
        0,10927,10924,1,0,0,0,10927,10928,1,0,0,0,10928,10930,1,0,0,0,10929,
        10915,1,0,0,0,10929,10918,1,0,0,0,10930,1113,1,0,0,0,10931,10932,
        3,2362,1181,0,10932,1115,1,0,0,0,10933,10940,3,1628,814,0,10934,
        10940,3,1638,819,0,10935,10940,3,1622,811,0,10936,10940,3,860,430,
        0,10937,10940,3,858,429,0,10938,10940,3,1654,827,0,10939,10933,1,
        0,0,0,10939,10934,1,0,0,0,10939,10935,1,0,0,0,10939,10936,1,0,0,
        0,10939,10937,1,0,0,0,10939,10938,1,0,0,0,10940,1117,1,0,0,0,10941,
        10950,3,1120,560,0,10942,10950,3,1122,561,0,10943,10950,3,1124,562,
        0,10944,10950,3,1132,566,0,10945,10950,3,1134,567,0,10946,10950,
        3,1136,568,0,10947,10950,3,1138,569,0,10948,10950,3,1142,571,0,10949,
        10941,1,0,0,0,10949,10942,1,0,0,0,10949,10943,1,0,0,0,10949,10944,
        1,0,0,0,10949,10945,1,0,0,0,10949,10946,1,0,0,0,10949,10947,1,0,
        0,0,10949,10948,1,0,0,0,10950,1119,1,0,0,0,10951,10952,5,1275,0,
        0,10952,10953,5,154,0,0,10953,10954,5,1420,0,0,10954,10955,5,2347,
        0,0,10955,10960,3,2300,1150,0,10956,10957,5,2353,0,0,10957,10959,
        3,2300,1150,0,10958,10956,1,0,0,0,10959,10962,1,0,0,0,10960,10958,
        1,0,0,0,10960,10961,1,0,0,0,10961,10963,1,0,0,0,10962,10960,1,0,
        0,0,10963,10983,5,2348,0,0,10964,10965,5,733,0,0,10965,10966,5,2347,
        0,0,10966,10967,3,2052,1026,0,10967,10981,5,2348,0,0,10968,10969,
        5,1679,0,0,10969,10970,5,696,0,0,10970,10971,5,2347,0,0,10971,10976,
        3,1614,807,0,10972,10973,5,2353,0,0,10973,10975,3,1614,807,0,10974,
        10972,1,0,0,0,10975,10978,1,0,0,0,10976,10974,1,0,0,0,10976,10977,
        1,0,0,0,10977,10979,1,0,0,0,10978,10976,1,0,0,0,10979,10980,5,2348,
        0,0,10980,10982,1,0,0,0,10981,10968,1,0,0,0,10981,10982,1,0,0,0,
        10982,10984,1,0,0,0,10983,10964,1,0,0,0,10983,10984,1,0,0,0,10984,
        10985,1,0,0,0,10985,10986,5,2347,0,0,10986,10988,5,1275,0,0,10987,
        10989,3,1652,826,0,10988,10987,1,0,0,0,10988,10989,1,0,0,0,10989,
        10990,1,0,0,0,10990,10991,3,1168,584,0,10991,11002,3,1174,587,0,
        10992,10993,5,2353,0,0,10993,10995,5,1275,0,0,10994,10996,3,1652,
        826,0,10995,10994,1,0,0,0,10995,10996,1,0,0,0,10996,10997,1,0,0,
        0,10997,10998,3,1168,584,0,10998,10999,3,1174,587,0,10999,11001,
        1,0,0,0,11000,10992,1,0,0,0,11001,11004,1,0,0,0,11002,11000,1,0,
        0,0,11002,11003,1,0,0,0,11003,11005,1,0,0,0,11004,11002,1,0,0,0,
        11005,11006,5,2348,0,0,11006,1121,1,0,0,0,11007,11008,5,1275,0,0,
        11008,11009,5,154,0,0,11009,11010,5,813,0,0,11010,11011,5,2347,0,
        0,11011,11012,3,2300,1150,0,11012,11013,5,2348,0,0,11013,11014,5,
        2347,0,0,11014,11016,5,1275,0,0,11015,11017,3,1652,826,0,11016,11015,
        1,0,0,0,11016,11017,1,0,0,0,11017,11018,1,0,0,0,11018,11019,3,1172,
        586,0,11019,11030,3,1174,587,0,11020,11021,5,2353,0,0,11021,11023,
        5,1275,0,0,11022,11024,3,1652,826,0,11023,11022,1,0,0,0,11023,11024,
        1,0,0,0,11024,11025,1,0,0,0,11025,11026,3,1172,586,0,11026,11027,
        3,1174,587,0,11027,11029,1,0,0,0,11028,11020,1,0,0,0,11029,11032,
        1,0,0,0,11030,11028,1,0,0,0,11030,11031,1,0,0,0,11031,11033,1,0,
        0,0,11032,11030,1,0,0,0,11033,11034,5,2348,0,0,11034,1123,1,0,0,
        0,11035,11036,5,1275,0,0,11036,11037,5,154,0,0,11037,11038,5,619,
        0,0,11038,11039,5,2347,0,0,11039,11044,3,2300,1150,0,11040,11041,
        5,2353,0,0,11041,11043,3,2300,1150,0,11042,11040,1,0,0,0,11043,11046,
        1,0,0,0,11044,11042,1,0,0,0,11044,11045,1,0,0,0,11045,11047,1,0,
        0,0,11046,11044,1,0,0,0,11047,11050,5,2348,0,0,11048,11051,3,1126,
        563,0,11049,11051,3,1128,564,0,11050,11048,1,0,0,0,11050,11049,1,
        0,0,0,11051,1125,1,0,0,0,11052,11053,5,2347,0,0,11053,11055,5,1275,
        0,0,11054,11056,3,1652,826,0,11055,11054,1,0,0,0,11055,11056,1,0,
        0,0,11056,11058,1,0,0,0,11057,11059,3,1176,588,0,11058,11057,1,0,
        0,0,11058,11059,1,0,0,0,11059,11070,1,0,0,0,11060,11061,5,2353,0,
        0,11061,11063,5,1275,0,0,11062,11064,3,1652,826,0,11063,11062,1,
        0,0,0,11063,11064,1,0,0,0,11064,11066,1,0,0,0,11065,11067,3,1176,
        588,0,11066,11065,1,0,0,0,11066,11067,1,0,0,0,11067,11069,1,0,0,
        0,11068,11060,1,0,0,0,11069,11072,1,0,0,0,11070,11068,1,0,0,0,11070,
        11071,1,0,0,0,11071,11073,1,0,0,0,11072,11070,1,0,0,0,11073,11074,
        5,2348,0,0,11074,1127,1,0,0,0,11075,11076,5,1277,0,0,11076,11090,
        3,1130,565,0,11077,11078,5,1679,0,0,11078,11079,5,696,0,0,11079,
        11080,5,2347,0,0,11080,11085,3,1614,807,0,11081,11082,5,2353,0,0,
        11082,11084,3,1614,807,0,11083,11081,1,0,0,0,11084,11087,1,0,0,0,
        11085,11083,1,0,0,0,11085,11086,1,0,0,0,11086,11088,1,0,0,0,11087,
        11085,1,0,0,0,11088,11089,5,2348,0,0,11089,11091,1,0,0,0,11090,11077,
        1,0,0,0,11090,11091,1,0,0,0,11091,11094,1,0,0,0,11092,11095,3,1184,
        592,0,11093,11095,3,1556,778,0,11094,11092,1,0,0,0,11094,11093,1,
        0,0,0,11094,11095,1,0,0,0,11095,11110,1,0,0,0,11096,11097,5,1249,
        0,0,11097,11098,5,1679,0,0,11098,11099,5,696,0,0,11099,11100,5,2347,
        0,0,11100,11105,3,1614,807,0,11101,11102,5,2353,0,0,11102,11104,
        3,1614,807,0,11103,11101,1,0,0,0,11104,11107,1,0,0,0,11105,11103,
        1,0,0,0,11105,11106,1,0,0,0,11106,11108,1,0,0,0,11107,11105,1,0,
        0,0,11108,11109,5,2348,0,0,11109,11111,1,0,0,0,11110,11096,1,0,0,
        0,11110,11111,1,0,0,0,11111,1129,1,0,0,0,11112,11113,5,2341,0,0,
        11113,1131,1,0,0,0,11114,11115,5,1275,0,0,11115,11116,5,154,0,0,
        11116,11117,5,1420,0,0,11117,11118,5,2347,0,0,11118,11123,3,2300,
        1150,0,11119,11120,5,2353,0,0,11120,11122,3,2300,1150,0,11121,11119,
        1,0,0,0,11122,11125,1,0,0,0,11123,11121,1,0,0,0,11123,11124,1,0,
        0,0,11124,11126,1,0,0,0,11125,11123,1,0,0,0,11126,11146,5,2348,0,
        0,11127,11128,5,733,0,0,11128,11129,5,2347,0,0,11129,11130,3,2052,
        1026,0,11130,11144,5,2348,0,0,11131,11132,5,1679,0,0,11132,11133,
        5,696,0,0,11133,11134,5,2347,0,0,11134,11139,3,1614,807,0,11135,
        11136,5,2353,0,0,11136,11138,3,1614,807,0,11137,11135,1,0,0,0,11138,
        11141,1,0,0,0,11139,11137,1,0,0,0,11139,11140,1,0,0,0,11140,11142,
        1,0,0,0,11141,11139,1,0,0,0,11142,11143,5,2348,0,0,11143,11145,1,
        0,0,0,11144,11131,1,0,0,0,11144,11145,1,0,0,0,11145,11147,1,0,0,
        0,11146,11127,1,0,0,0,11146,11147,1,0,0,0,11147,11151,1,0,0,0,11148,
        11152,3,1152,576,0,11149,11152,3,1154,577,0,11150,11152,3,1156,578,
        0,11151,11148,1,0,0,0,11151,11149,1,0,0,0,11151,11150,1,0,0,0,11152,
        11153,1,0,0,0,11153,11154,5,2347,0,0,11154,11159,3,1144,572,0,11155,
        11156,5,2353,0,0,11156,11158,3,1144,572,0,11157,11155,1,0,0,0,11158,
        11161,1,0,0,0,11159,11157,1,0,0,0,11159,11160,1,0,0,0,11160,11162,
        1,0,0,0,11161,11159,1,0,0,0,11162,11163,5,2348,0,0,11163,1133,1,
        0,0,0,11164,11165,5,1275,0,0,11165,11166,5,154,0,0,11166,11167,5,
        813,0,0,11167,11168,5,2347,0,0,11168,11169,3,2300,1150,0,11169,11173,
        5,2348,0,0,11170,11174,3,1152,576,0,11171,11174,3,1154,577,0,11172,
        11174,3,1156,578,0,11173,11170,1,0,0,0,11173,11171,1,0,0,0,11173,
        11172,1,0,0,0,11174,11175,1,0,0,0,11175,11176,5,2347,0,0,11176,11181,
        3,1146,573,0,11177,11178,5,2353,0,0,11178,11180,3,1146,573,0,11179,
        11177,1,0,0,0,11180,11183,1,0,0,0,11181,11179,1,0,0,0,11181,11182,
        1,0,0,0,11182,11184,1,0,0,0,11183,11181,1,0,0,0,11184,11185,5,2348,
        0,0,11185,1135,1,0,0,0,11186,11187,5,1275,0,0,11187,11188,5,154,
        0,0,11188,11189,5,619,0,0,11189,11192,5,2347,0,0,11190,11191,5,2353,
        0,0,11191,11193,3,2300,1150,0,11192,11190,1,0,0,0,11193,11194,1,
        0,0,0,11194,11192,1,0,0,0,11194,11195,1,0,0,0,11195,11196,1,0,0,
        0,11196,11200,5,2348,0,0,11197,11201,3,1152,576,0,11198,11201,3,
        1154,577,0,11199,11201,3,1156,578,0,11200,11197,1,0,0,0,11200,11198,
        1,0,0,0,11200,11199,1,0,0,0,11201,11204,1,0,0,0,11202,11205,3,1126,
        563,0,11203,11205,3,1128,564,0,11204,11202,1,0,0,0,11204,11203,1,
        0,0,0,11205,1137,1,0,0,0,11206,11207,5,1275,0,0,11207,11208,5,154,
        0,0,11208,11209,5,1449,0,0,11209,11210,5,2347,0,0,11210,11211,3,
        2370,1185,0,11211,11223,5,2348,0,0,11212,11213,5,2347,0,0,11213,
        11218,3,1140,570,0,11214,11215,5,2353,0,0,11215,11217,3,1140,570,
        0,11216,11214,1,0,0,0,11217,11220,1,0,0,0,11218,11216,1,0,0,0,11218,
        11219,1,0,0,0,11219,11221,1,0,0,0,11220,11218,1,0,0,0,11221,11222,
        5,2348,0,0,11222,11224,1,0,0,0,11223,11212,1,0,0,0,11223,11224,1,
        0,0,0,11224,1139,1,0,0,0,11225,11227,5,1275,0,0,11226,11228,3,1652,
        826,0,11227,11226,1,0,0,0,11227,11228,1,0,0,0,11228,11229,1,0,0,
        0,11229,11230,3,1174,587,0,11230,1141,1,0,0,0,11231,11232,5,1275,
        0,0,11232,11233,5,154,0,0,11233,11244,5,1865,0,0,11234,11235,5,1277,
        0,0,11235,11245,5,2341,0,0,11236,11241,3,1140,570,0,11237,11238,
        5,2353,0,0,11238,11240,3,1140,570,0,11239,11237,1,0,0,0,11240,11243,
        1,0,0,0,11241,11239,1,0,0,0,11241,11242,1,0,0,0,11242,11245,1,0,
        0,0,11243,11241,1,0,0,0,11244,11234,1,0,0,0,11244,11236,1,0,0,0,
        11244,11245,1,0,0,0,11245,1143,1,0,0,0,11246,11248,5,1275,0,0,11247,
        11249,3,1652,826,0,11248,11247,1,0,0,0,11248,11249,1,0,0,0,11249,
        11251,1,0,0,0,11250,11252,3,1168,584,0,11251,11250,1,0,0,0,11251,
        11252,1,0,0,0,11252,11253,1,0,0,0,11253,11286,3,1174,587,0,11254,
        11279,5,2347,0,0,11255,11260,3,1160,580,0,11256,11257,5,2353,0,0,
        11257,11259,3,1160,580,0,11258,11256,1,0,0,0,11259,11262,1,0,0,0,
        11260,11258,1,0,0,0,11260,11261,1,0,0,0,11261,11280,1,0,0,0,11262,
        11260,1,0,0,0,11263,11268,3,1162,581,0,11264,11265,5,2353,0,0,11265,
        11267,3,1162,581,0,11266,11264,1,0,0,0,11267,11270,1,0,0,0,11268,
        11266,1,0,0,0,11268,11269,1,0,0,0,11269,11280,1,0,0,0,11270,11268,
        1,0,0,0,11271,11276,3,1164,582,0,11272,11273,5,2353,0,0,11273,11275,
        3,1164,582,0,11274,11272,1,0,0,0,11275,11278,1,0,0,0,11276,11274,
        1,0,0,0,11276,11277,1,0,0,0,11277,11280,1,0,0,0,11278,11276,1,0,
        0,0,11279,11255,1,0,0,0,11279,11263,1,0,0,0,11279,11271,1,0,0,0,
        11280,11281,1,0,0,0,11281,11282,5,2348,0,0,11282,11285,1,0,0,0,11283,
        11285,3,1166,583,0,11284,11254,1,0,0,0,11284,11283,1,0,0,0,11285,
        11287,1,0,0,0,11286,11284,1,0,0,0,11286,11287,1,0,0,0,11287,1145,
        1,0,0,0,11288,11290,5,1275,0,0,11289,11291,3,1652,826,0,11290,11289,
        1,0,0,0,11290,11291,1,0,0,0,11291,11293,1,0,0,0,11292,11294,3,1172,
        586,0,11293,11292,1,0,0,0,11293,11294,1,0,0,0,11294,11295,1,0,0,
        0,11295,11328,3,1174,587,0,11296,11321,5,2347,0,0,11297,11302,3,
        1160,580,0,11298,11299,5,2353,0,0,11299,11301,3,1160,580,0,11300,
        11298,1,0,0,0,11301,11304,1,0,0,0,11302,11300,1,0,0,0,11302,11303,
        1,0,0,0,11303,11322,1,0,0,0,11304,11302,1,0,0,0,11305,11310,3,1162,
        581,0,11306,11307,5,2353,0,0,11307,11309,3,1162,581,0,11308,11306,
        1,0,0,0,11309,11312,1,0,0,0,11310,11308,1,0,0,0,11310,11311,1,0,
        0,0,11311,11322,1,0,0,0,11312,11310,1,0,0,0,11313,11318,3,1164,582,
        0,11314,11315,5,2353,0,0,11315,11317,3,1164,582,0,11316,11314,1,
        0,0,0,11317,11320,1,0,0,0,11318,11316,1,0,0,0,11318,11319,1,0,0,
        0,11319,11322,1,0,0,0,11320,11318,1,0,0,0,11321,11297,1,0,0,0,11321,
        11305,1,0,0,0,11321,11313,1,0,0,0,11322,11323,1,0,0,0,11323,11324,
        5,2348,0,0,11324,11327,1,0,0,0,11325,11327,3,1166,583,0,11326,11296,
        1,0,0,0,11326,11325,1,0,0,0,11327,11329,1,0,0,0,11328,11326,1,0,
        0,0,11328,11329,1,0,0,0,11329,1147,1,0,0,0,11330,11331,5,1691,0,
        0,11331,11362,5,2006,0,0,11332,11357,5,2347,0,0,11333,11338,3,1160,
        580,0,11334,11335,5,2353,0,0,11335,11337,3,1160,580,0,11336,11334,
        1,0,0,0,11337,11340,1,0,0,0,11338,11336,1,0,0,0,11338,11339,1,0,
        0,0,11339,11358,1,0,0,0,11340,11338,1,0,0,0,11341,11346,3,1162,581,
        0,11342,11343,5,2353,0,0,11343,11345,3,1162,581,0,11344,11342,1,
        0,0,0,11345,11348,1,0,0,0,11346,11344,1,0,0,0,11346,11347,1,0,0,
        0,11347,11358,1,0,0,0,11348,11346,1,0,0,0,11349,11354,3,1164,582,
        0,11350,11351,5,2353,0,0,11351,11353,3,1164,582,0,11352,11350,1,
        0,0,0,11353,11356,1,0,0,0,11354,11352,1,0,0,0,11354,11355,1,0,0,
        0,11355,11358,1,0,0,0,11356,11354,1,0,0,0,11357,11333,1,0,0,0,11357,
        11341,1,0,0,0,11357,11349,1,0,0,0,11358,11359,1,0,0,0,11359,11360,
        5,2348,0,0,11360,11363,1,0,0,0,11361,11363,3,1150,575,0,11362,11332,
        1,0,0,0,11362,11361,1,0,0,0,11363,1149,1,0,0,0,11364,11365,5,2341,
        0,0,11365,1151,1,0,0,0,11366,11367,5,1691,0,0,11367,11368,5,154,
        0,0,11368,11369,5,1420,0,0,11369,11370,5,2347,0,0,11370,11375,3,
        2300,1150,0,11371,11372,5,2353,0,0,11372,11374,3,2300,1150,0,11373,
        11371,1,0,0,0,11374,11377,1,0,0,0,11375,11373,1,0,0,0,11375,11376,
        1,0,0,0,11376,11378,1,0,0,0,11377,11375,1,0,0,0,11378,11380,5,2348,
        0,0,11379,11381,3,1148,574,0,11380,11379,1,0,0,0,11380,11381,1,0,
        0,0,11381,1153,1,0,0,0,11382,11383,5,1691,0,0,11383,11384,5,154,
        0,0,11384,11385,5,813,0,0,11385,11386,5,2347,0,0,11386,11387,3,2300,
        1150,0,11387,11389,5,2348,0,0,11388,11390,3,1148,574,0,11389,11388,
        1,0,0,0,11389,11390,1,0,0,0,11390,1155,1,0,0,0,11391,11392,5,1691,
        0,0,11392,11393,5,154,0,0,11393,11394,5,619,0,0,11394,11395,5,2347,
        0,0,11395,11400,3,2300,1150,0,11396,11397,5,2353,0,0,11397,11399,
        3,2300,1150,0,11398,11396,1,0,0,0,11399,11402,1,0,0,0,11400,11398,
        1,0,0,0,11400,11401,1,0,0,0,11401,11403,1,0,0,0,11402,11400,1,0,
        0,0,11403,11422,5,2348,0,0,11404,11405,5,1690,0,0,11405,11419,5,
        2341,0,0,11406,11407,5,1679,0,0,11407,11408,5,696,0,0,11408,11409,
        5,2347,0,0,11409,11414,3,1614,807,0,11410,11411,5,2353,0,0,11411,
        11413,3,1614,807,0,11412,11410,1,0,0,0,11413,11416,1,0,0,0,11414,
        11412,1,0,0,0,11414,11415,1,0,0,0,11415,11417,1,0,0,0,11416,11414,
        1,0,0,0,11417,11418,5,2348,0,0,11418,11420,1,0,0,0,11419,11406,1,
        0,0,0,11419,11420,1,0,0,0,11420,11423,1,0,0,0,11421,11423,3,1148,
        574,0,11422,11404,1,0,0,0,11422,11421,1,0,0,0,11422,11423,1,0,0,
        0,11423,1157,1,0,0,0,11424,11425,3,1652,826,0,11425,1159,1,0,0,0,
        11426,11428,5,1691,0,0,11427,11429,3,1158,579,0,11428,11427,1,0,
        0,0,11428,11429,1,0,0,0,11429,11430,1,0,0,0,11430,11432,3,1168,584,
        0,11431,11433,3,1176,588,0,11432,11431,1,0,0,0,11432,11433,1,0,0,
        0,11433,1161,1,0,0,0,11434,11436,5,1691,0,0,11435,11437,3,1158,579,
        0,11436,11435,1,0,0,0,11436,11437,1,0,0,0,11437,11438,1,0,0,0,11438,
        11440,3,1172,586,0,11439,11441,3,1176,588,0,11440,11439,1,0,0,0,
        11440,11441,1,0,0,0,11441,1163,1,0,0,0,11442,11444,5,1691,0,0,11443,
        11445,3,1158,579,0,11444,11443,1,0,0,0,11444,11445,1,0,0,0,11445,
        11447,1,0,0,0,11446,11448,3,1176,588,0,11447,11446,1,0,0,0,11447,
        11448,1,0,0,0,11448,1165,1,0,0,0,11449,11450,5,1690,0,0,11450,11464,
        5,2341,0,0,11451,11452,5,1679,0,0,11452,11453,5,696,0,0,11453,11454,
        5,2347,0,0,11454,11459,3,1614,807,0,11455,11456,5,2353,0,0,11456,
        11458,3,1614,807,0,11457,11455,1,0,0,0,11458,11461,1,0,0,0,11459,
        11457,1,0,0,0,11459,11460,1,0,0,0,11460,11462,1,0,0,0,11461,11459,
        1,0,0,0,11462,11463,5,2348,0,0,11463,11465,1,0,0,0,11464,11451,1,
        0,0,0,11464,11465,1,0,0,0,11465,1167,1,0,0,0,11466,11467,5,2164,
        0,0,11467,11468,5,797,0,0,11468,11469,5,2011,0,0,11469,11470,5,2347,
        0,0,11470,11471,3,1170,585,0,11471,11472,5,2348,0,0,11472,1169,1,
        0,0,0,11473,11478,3,2150,1075,0,11474,11475,5,2353,0,0,11475,11477,
        3,2150,1075,0,11476,11474,1,0,0,0,11477,11480,1,0,0,0,11478,11476,
        1,0,0,0,11478,11479,1,0,0,0,11479,11492,1,0,0,0,11480,11478,1,0,
        0,0,11481,11482,5,2020,0,0,11482,11488,3,2150,1075,0,11483,11484,
        5,2353,0,0,11484,11485,5,2020,0,0,11485,11487,3,2150,1075,0,11486,
        11483,1,0,0,0,11487,11490,1,0,0,0,11488,11486,1,0,0,0,11488,11489,
        1,0,0,0,11489,11492,1,0,0,0,11490,11488,1,0,0,0,11491,11473,1,0,
        0,0,11491,11481,1,0,0,0,11492,1171,1,0,0,0,11493,11494,5,2164,0,
        0,11494,11514,5,2347,0,0,11495,11500,3,2150,1075,0,11496,11497,5,
        2353,0,0,11497,11499,3,2150,1075,0,11498,11496,1,0,0,0,11499,11502,
        1,0,0,0,11500,11498,1,0,0,0,11500,11501,1,0,0,0,11501,11515,1,0,
        0,0,11502,11500,1,0,0,0,11503,11504,5,2020,0,0,11504,11510,3,2150,
        1075,0,11505,11506,5,2353,0,0,11506,11507,5,2020,0,0,11507,11509,
        3,2150,1075,0,11508,11505,1,0,0,0,11509,11512,1,0,0,0,11510,11508,
        1,0,0,0,11510,11511,1,0,0,0,11511,11515,1,0,0,0,11512,11510,1,0,
        0,0,11513,11515,5,368,0,0,11514,11495,1,0,0,0,11514,11503,1,0,0,
        0,11514,11513,1,0,0,0,11515,11516,1,0,0,0,11516,11517,5,2348,0,0,
        11517,1173,1,0,0,0,11518,11520,3,1204,602,0,11519,11518,1,0,0,0,
        11519,11520,1,0,0,0,11520,11522,1,0,0,0,11521,11523,3,1206,603,0,
        11522,11521,1,0,0,0,11522,11523,1,0,0,0,11523,11526,1,0,0,0,11524,
        11527,3,1184,592,0,11525,11527,3,1556,778,0,11526,11524,1,0,0,0,
        11526,11525,1,0,0,0,11526,11527,1,0,0,0,11527,11532,1,0,0,0,11528,
        11530,5,1249,0,0,11529,11531,3,1206,603,0,11530,11529,1,0,0,0,11530,
        11531,1,0,0,0,11531,11533,1,0,0,0,11532,11528,1,0,0,0,11532,11533,
        1,0,0,0,11533,11539,1,0,0,0,11534,11538,3,1598,799,0,11535,11538,
        3,1588,794,0,11536,11538,3,1646,823,0,11537,11534,1,0,0,0,11537,
        11535,1,0,0,0,11537,11536,1,0,0,0,11538,11541,1,0,0,0,11539,11537,
        1,0,0,0,11539,11540,1,0,0,0,11540,1175,1,0,0,0,11541,11539,1,0,0,
        0,11542,11543,5,1996,0,0,11543,11563,3,1614,807,0,11544,11547,5,
        1249,0,0,11545,11546,5,1996,0,0,11546,11548,3,1614,807,0,11547,11545,
        1,0,0,0,11547,11548,1,0,0,0,11548,11563,1,0,0,0,11549,11563,3,1184,
        592,0,11550,11563,3,1556,778,0,11551,11563,3,1178,589,0,11552,11553,
        5,2171,0,0,11553,11554,3,1616,808,0,11554,11555,5,1679,0,0,11555,
        11557,5,67,0,0,11556,11558,7,116,0,0,11557,11556,1,0,0,0,11557,11558,
        1,0,0,0,11558,11559,1,0,0,0,11559,11560,5,817,0,0,11560,11561,3,
        1592,796,0,11561,11563,1,0,0,0,11562,11542,1,0,0,0,11562,11544,1,
        0,0,0,11562,11549,1,0,0,0,11562,11550,1,0,0,0,11562,11551,1,0,0,
        0,11562,11552,1,0,0,0,11563,11564,1,0,0,0,11564,11562,1,0,0,0,11564,
        11565,1,0,0,0,11565,1177,1,0,0,0,11566,11567,5,817,0,0,11567,11568,
        5,2347,0,0,11568,11569,3,1594,797,0,11569,11570,5,2348,0,0,11570,
        11571,5,1679,0,0,11571,11573,5,67,0,0,11572,11574,7,116,0,0,11573,
        11572,1,0,0,0,11573,11574,1,0,0,0,11574,11588,1,0,0,0,11575,11581,
        3,1592,796,0,11576,11577,5,2347,0,0,11577,11578,5,1996,0,0,11578,
        11579,3,1614,807,0,11579,11580,5,2348,0,0,11580,11582,1,0,0,0,11581,
        11576,1,0,0,0,11581,11582,1,0,0,0,11582,11589,1,0,0,0,11583,11584,
        5,2347,0,0,11584,11585,5,1996,0,0,11585,11586,3,1614,807,0,11586,
        11587,5,2348,0,0,11587,11589,1,0,0,0,11588,11575,1,0,0,0,11588,11583,
        1,0,0,0,11589,1179,1,0,0,0,11590,11591,3,2300,1150,0,11591,11593,
        3,2336,1168,0,11592,11594,5,1626,0,0,11593,11592,1,0,0,0,11593,11594,
        1,0,0,0,11594,11597,1,0,0,0,11595,11596,5,368,0,0,11596,11598,3,
        2052,1026,0,11597,11595,1,0,0,0,11597,11598,1,0,0,0,11598,11618,
        1,0,0,0,11599,11602,5,471,0,0,11600,11601,5,2153,0,0,11601,11603,
        5,2343,0,0,11602,11600,1,0,0,0,11602,11603,1,0,0,0,11603,11607,1,
        0,0,0,11604,11605,5,644,0,0,11605,11606,5,154,0,0,11606,11608,5,
        2378,0,0,11607,11604,1,0,0,0,11607,11608,1,0,0,0,11608,11610,1,0,
        0,0,11609,11611,5,2343,0,0,11610,11609,1,0,0,0,11610,11611,1,0,0,
        0,11611,11616,1,0,0,0,11612,11614,5,1074,0,0,11613,11612,1,0,0,0,
        11613,11614,1,0,0,0,11614,11615,1,0,0,0,11615,11617,5,1535,0,0,11616,
        11613,1,0,0,0,11616,11617,1,0,0,0,11617,11619,1,0,0,0,11618,11599,
        1,0,0,0,11618,11619,1,0,0,0,11619,11622,1,0,0,0,11620,11621,5,1138,
        0,0,11621,11623,5,1162,0,0,11622,11620,1,0,0,0,11622,11623,1,0,0,
        0,11623,11625,1,0,0,0,11624,11626,7,17,0,0,11625,11624,1,0,0,0,11625,
        11626,1,0,0,0,11626,1181,1,0,0,0,11627,11629,5,2341,0,0,11628,11630,
        7,120,0,0,11629,11628,1,0,0,0,11629,11630,1,0,0,0,11630,1183,1,0,
        0,0,11631,11641,5,246,0,0,11632,11642,5,103,0,0,11633,11639,5,580,
        0,0,11634,11640,5,1187,0,0,11635,11637,7,121,0,0,11636,11638,7,101,
        0,0,11637,11636,1,0,0,0,11637,11638,1,0,0,0,11638,11640,1,0,0,0,
        11639,11634,1,0,0,0,11639,11635,1,0,0,0,11640,11642,1,0,0,0,11641,
        11632,1,0,0,0,11641,11633,1,0,0,0,11641,11642,1,0,0,0,11642,11645,
        1,0,0,0,11643,11645,5,1017,0,0,11644,11631,1,0,0,0,11644,11643,1,
        0,0,0,11645,1185,1,0,0,0,11646,11648,3,1198,599,0,11647,11646,1,
        0,0,0,11648,11649,1,0,0,0,11649,11647,1,0,0,0,11649,11650,1,0,0,
        0,11650,11666,1,0,0,0,11651,11653,5,704,0,0,11652,11654,3,1188,594,
        0,11653,11652,1,0,0,0,11653,11654,1,0,0,0,11654,11658,1,0,0,0,11655,
        11656,5,1074,0,0,11656,11658,5,704,0,0,11657,11651,1,0,0,0,11657,
        11655,1,0,0,0,11658,11662,1,0,0,0,11659,11661,3,1198,599,0,11660,
        11659,1,0,0,0,11661,11664,1,0,0,0,11662,11660,1,0,0,0,11662,11663,
        1,0,0,0,11663,11666,1,0,0,0,11664,11662,1,0,0,0,11665,11647,1,0,
        0,0,11665,11657,1,0,0,0,11666,1187,1,0,0,0,11667,11669,3,1190,595,
        0,11668,11670,3,1192,596,0,11669,11668,1,0,0,0,11669,11670,1,0,0,
        0,11670,11672,1,0,0,0,11671,11673,3,1194,597,0,11672,11671,1,0,0,
        0,11672,11673,1,0,0,0,11673,11675,1,0,0,0,11674,11676,3,1196,598,
        0,11675,11674,1,0,0,0,11675,11676,1,0,0,0,11676,11690,1,0,0,0,11677,
        11679,3,1192,596,0,11678,11680,3,1194,597,0,11679,11678,1,0,0,0,
        11679,11680,1,0,0,0,11680,11682,1,0,0,0,11681,11683,3,1196,598,0,
        11682,11681,1,0,0,0,11682,11683,1,0,0,0,11683,11690,1,0,0,0,11684,
        11686,3,1194,597,0,11685,11687,3,1196,598,0,11686,11685,1,0,0,0,
        11686,11687,1,0,0,0,11687,11690,1,0,0,0,11688,11690,3,1196,598,0,
        11689,11667,1,0,0,0,11689,11677,1,0,0,0,11689,11684,1,0,0,0,11689,
        11688,1,0,0,0,11690,1189,1,0,0,0,11691,11692,5,887,0,0,11692,11698,
        5,580,0,0,11693,11699,5,421,0,0,11694,11696,7,122,0,0,11695,11697,
        7,101,0,0,11696,11695,1,0,0,0,11696,11697,1,0,0,0,11697,11699,1,
        0,0,0,11698,11693,1,0,0,0,11698,11694,1,0,0,0,11699,11703,1,0,0,
        0,11700,11701,5,1074,0,0,11701,11703,5,887,0,0,11702,11691,1,0,0,
        0,11702,11700,1,0,0,0,11703,1191,1,0,0,0,11704,11705,5,1378,0,0,
        11705,11706,7,123,0,0,11706,1193,1,0,0,0,11707,11716,5,420,0,0,11708,
        11717,5,89,0,0,11709,11714,5,154,0,0,11710,11711,5,1523,0,0,11711,
        11715,5,1420,0,0,11712,11715,5,1275,0,0,11713,11715,5,1691,0,0,11714,
        11710,1,0,0,0,11714,11712,1,0,0,0,11714,11713,1,0,0,0,11715,11717,
        1,0,0,0,11716,11708,1,0,0,0,11716,11709,1,0,0,0,11716,11717,1,0,
        0,0,11717,11726,1,0,0,0,11718,11719,5,580,0,0,11719,11724,5,1583,
        0,0,11720,11725,5,368,0,0,11721,11725,5,38,0,0,11722,11725,3,2362,
        1181,0,11723,11725,5,1071,0,0,11724,11720,1,0,0,0,11724,11721,1,
        0,0,0,11724,11722,1,0,0,0,11724,11723,1,0,0,0,11725,11727,1,0,0,
        0,11726,11718,1,0,0,0,11726,11727,1,0,0,0,11727,1195,1,0,0,0,11728,
        11730,5,444,0,0,11729,11731,5,38,0,0,11730,11729,1,0,0,0,11730,11731,
        1,0,0,0,11731,11735,1,0,0,0,11732,11733,5,1074,0,0,11733,11735,5,
        444,0,0,11734,11728,1,0,0,0,11734,11732,1,0,0,0,11735,1197,1,0,0,
        0,11736,11738,5,704,0,0,11737,11739,3,1190,595,0,11738,11737,1,0,
        0,0,11738,11739,1,0,0,0,11739,11743,1,0,0,0,11740,11741,5,1074,0,
        0,11741,11743,5,704,0,0,11742,11736,1,0,0,0,11742,11740,1,0,0,0,
        11743,11744,1,0,0,0,11744,11745,5,2347,0,0,11745,11746,3,2318,1159,
        0,11746,11747,5,2348,0,0,11747,1199,1,0,0,0,11748,11749,5,1296,0,
        0,11749,11761,5,2341,0,0,11750,11751,5,1299,0,0,11751,11761,5,2341,
        0,0,11752,11753,5,701,0,0,11753,11761,5,2341,0,0,11754,11755,5,877,
        0,0,11755,11761,5,2341,0,0,11756,11757,5,247,0,0,11757,11761,5,1662,
        0,0,11758,11761,3,1202,601,0,11759,11761,3,686,343,0,11760,11748,
        1,0,0,0,11760,11750,1,0,0,0,11760,11752,1,0,0,0,11760,11754,1,0,
        0,0,11760,11756,1,0,0,0,11760,11758,1,0,0,0,11760,11759,1,0,0,0,
        11761,11762,1,0,0,0,11762,11760,1,0,0,0,11762,11763,1,0,0,0,11763,
        1201,1,0,0,0,11764,11765,5,1678,0,0,11765,11793,5,2347,0,0,11766,
        11767,5,698,0,0,11767,11794,3,1182,591,0,11768,11769,5,970,0,0,11769,
        11794,3,1182,591,0,11770,11771,5,898,0,0,11771,11794,7,124,0,0,11772,
        11773,5,869,0,0,11773,11794,7,124,0,0,11774,11775,5,1297,0,0,11775,
        11794,5,2341,0,0,11776,11777,5,585,0,0,11777,11794,5,2341,0,0,11778,
        11779,5,584,0,0,11779,11780,5,613,0,0,11780,11794,5,2341,0,0,11781,
        11784,5,1202,0,0,11782,11785,3,1182,591,0,11783,11785,5,1162,0,0,
        11784,11782,1,0,0,0,11784,11783,1,0,0,0,11785,11794,1,0,0,0,11786,
        11787,5,151,0,0,11787,11794,7,125,0,0,11788,11789,5,566,0,0,11789,
        11794,7,126,0,0,11790,11791,5,178,0,0,11791,11794,7,126,0,0,11792,
        11794,5,471,0,0,11793,11766,1,0,0,0,11793,11768,1,0,0,0,11793,11770,
        1,0,0,0,11793,11772,1,0,0,0,11793,11774,1,0,0,0,11793,11776,1,0,
        0,0,11793,11778,1,0,0,0,11793,11781,1,0,0,0,11793,11786,1,0,0,0,
        11793,11788,1,0,0,0,11793,11790,1,0,0,0,11793,11792,1,0,0,0,11794,
        11795,1,0,0,0,11795,11793,1,0,0,0,11795,11796,1,0,0,0,11796,11797,
        1,0,0,0,11797,11798,5,2348,0,0,11798,1203,1,0,0,0,11799,11800,5,
        1567,0,0,11800,11801,5,308,0,0,11801,11802,7,66,0,0,11802,1205,1,
        0,0,0,11803,11815,3,1200,600,0,11804,11810,5,1996,0,0,11805,11811,
        3,2364,1182,0,11806,11808,5,1590,0,0,11807,11806,1,0,0,0,11807,11808,
        1,0,0,0,11808,11809,1,0,0,0,11809,11811,3,2362,1181,0,11810,11805,
        1,0,0,0,11810,11807,1,0,0,0,11811,11815,1,0,0,0,11812,11815,3,1184,
        592,0,11813,11815,3,894,447,0,11814,11803,1,0,0,0,11814,11804,1,
        0,0,0,11814,11812,1,0,0,0,11814,11813,1,0,0,0,11815,11816,1,0,0,
        0,11816,11814,1,0,0,0,11816,11817,1,0,0,0,11817,1207,1,0,0,0,11818,
        11820,3,1204,602,0,11819,11818,1,0,0,0,11819,11820,1,0,0,0,11820,
        11821,1,0,0,0,11821,11823,3,1206,603,0,11822,11824,3,1184,592,0,
        11823,11822,1,0,0,0,11823,11824,1,0,0,0,11824,11826,1,0,0,0,11825,
        11827,3,1186,593,0,11826,11825,1,0,0,0,11826,11827,1,0,0,0,11827,
        11829,1,0,0,0,11828,11830,3,1210,605,0,11829,11828,1,0,0,0,11829,
        11830,1,0,0,0,11830,11873,1,0,0,0,11831,11833,3,1204,602,0,11832,
        11831,1,0,0,0,11832,11833,1,0,0,0,11833,11857,1,0,0,0,11834,11847,
        5,1236,0,0,11835,11837,5,624,0,0,11836,11838,3,1206,603,0,11837,
        11836,1,0,0,0,11837,11838,1,0,0,0,11838,11839,1,0,0,0,11839,11848,
        3,1226,613,0,11840,11842,5,675,0,0,11841,11843,3,1206,603,0,11842,
        11841,1,0,0,0,11842,11843,1,0,0,0,11843,11844,1,0,0,0,11844,11848,
        3,1552,776,0,11845,11846,5,523,0,0,11846,11848,3,1228,614,0,11847,
        11835,1,0,0,0,11847,11840,1,0,0,0,11847,11845,1,0,0,0,11848,11858,
        1,0,0,0,11849,11850,5,523,0,0,11850,11851,5,1275,0,0,11851,11852,
        5,82,0,0,11852,11855,3,1228,614,0,11853,11854,5,1471,0,0,11854,11856,
        5,810,0,0,11855,11853,1,0,0,0,11855,11856,1,0,0,0,11856,11858,1,
        0,0,0,11857,11834,1,0,0,0,11857,11849,1,0,0,0,11858,11873,1,0,0,
        0,11859,11860,5,210,0,0,11860,11861,3,474,237,0,11861,11862,5,2347,
        0,0,11862,11867,3,2300,1150,0,11863,11864,5,2353,0,0,11864,11866,
        3,2300,1150,0,11865,11863,1,0,0,0,11866,11869,1,0,0,0,11867,11865,
        1,0,0,0,11867,11868,1,0,0,0,11868,11870,1,0,0,0,11869,11867,1,0,
        0,0,11870,11871,5,2348,0,0,11871,11873,1,0,0,0,11872,11819,1,0,0,
        0,11872,11832,1,0,0,0,11872,11859,1,0,0,0,11873,1209,1,0,0,0,11874,
        11884,5,655,0,0,11875,11876,5,21,0,0,11876,11877,5,1339,0,0,11877,
        11885,3,1212,606,0,11878,11879,7,127,0,0,11879,11880,5,1339,0,0,
        11880,11885,3,1212,606,0,11881,11885,5,380,0,0,11882,11885,5,466,
        0,0,11883,11885,5,403,0,0,11884,11875,1,0,0,0,11884,11878,1,0,0,
        0,11884,11881,1,0,0,0,11884,11882,1,0,0,0,11884,11883,1,0,0,0,11885,
        1211,1,0,0,0,11886,11890,3,1214,607,0,11887,11890,3,1216,608,0,11888,
        11890,3,1222,611,0,11889,11886,1,0,0,0,11889,11887,1,0,0,0,11889,
        11888,1,0,0,0,11890,1213,1,0,0,0,11891,11892,3,1184,592,0,11892,
        11893,3,1220,610,0,11893,11894,3,1218,609,0,11894,11911,1,0,0,0,
        11895,11896,7,128,0,0,11896,11897,5,1679,0,0,11897,11901,5,246,0,
        0,11898,11902,5,29,0,0,11899,11900,5,580,0,0,11900,11902,5,1409,
        0,0,11901,11898,1,0,0,0,11901,11899,1,0,0,0,11902,11903,1,0,0,0,
        11903,11904,5,1528,0,0,11904,11905,5,33,0,0,11905,11906,3,1224,612,
        0,11906,11907,5,1180,0,0,11907,11908,5,1074,0,0,11908,11909,5,924,
        0,0,11909,11911,1,0,0,0,11910,11891,1,0,0,0,11910,11895,1,0,0,0,
        11911,1215,1,0,0,0,11912,11913,5,2016,0,0,11913,11914,5,2052,0,0,
        11914,11928,3,1614,807,0,11915,11917,3,1220,610,0,11916,11915,1,
        0,0,0,11916,11917,1,0,0,0,11917,11920,1,0,0,0,11918,11919,5,1193,
        0,0,11919,11921,3,2278,1139,0,11920,11918,1,0,0,0,11920,11921,1,
        0,0,0,11921,11929,1,0,0,0,11922,11923,5,1429,0,0,11923,11925,5,1192,
        0,0,11924,11926,3,1220,610,0,11925,11924,1,0,0,0,11925,11926,1,0,
        0,0,11926,11927,1,0,0,0,11927,11929,3,1218,609,0,11928,11916,1,0,
        0,0,11928,11922,1,0,0,0,11929,1217,1,0,0,0,11930,11931,5,33,0,0,
        11931,11932,3,1224,612,0,11932,11936,5,1180,0,0,11933,11934,5,1074,
        0,0,11934,11937,7,129,0,0,11935,11937,5,308,0,0,11936,11933,1,0,
        0,0,11936,11935,1,0,0,0,11937,11941,1,0,0,0,11938,11939,5,1193,0,
        0,11939,11941,3,2278,1139,0,11940,11930,1,0,0,0,11940,11938,1,0,
        0,0,11941,1219,1,0,0,0,11942,11943,7,130,0,0,11943,1221,1,0,0,0,
        11944,11945,5,1590,0,0,11945,11947,5,704,0,0,11946,11948,3,1188,
        594,0,11947,11946,1,0,0,0,11947,11948,1,0,0,0,11948,11955,1,0,0,
        0,11949,11950,5,926,0,0,11950,11951,5,704,0,0,11951,11955,3,1190,
        595,0,11952,11953,5,1074,0,0,11953,11955,5,704,0,0,11954,11944,1,
        0,0,0,11954,11949,1,0,0,0,11954,11952,1,0,0,0,11955,11957,1,0,0,
        0,11956,11958,5,1567,0,0,11957,11956,1,0,0,0,11957,11958,1,0,0,0,
        11958,11959,1,0,0,0,11959,11960,3,1218,609,0,11960,1223,1,0,0,0,
        11961,11962,3,2356,1178,0,11962,11963,7,131,0,0,11963,1225,1,0,0,
        0,11964,11966,3,1184,592,0,11965,11964,1,0,0,0,11965,11966,1,0,0,
        0,11966,11968,1,0,0,0,11967,11969,3,1186,593,0,11968,11967,1,0,0,
        0,11968,11969,1,0,0,0,11969,11971,1,0,0,0,11970,11972,3,1210,605,
        0,11971,11970,1,0,0,0,11971,11972,1,0,0,0,11972,1227,1,0,0,0,11973,
        11976,5,2347,0,0,11974,11975,5,2076,0,0,11975,11977,3,1230,615,0,
        11976,11974,1,0,0,0,11976,11977,1,0,0,0,11977,11978,1,0,0,0,11978,
        11979,3,1232,616,0,11979,11986,5,2348,0,0,11980,11981,5,1471,0,0,
        11981,11984,5,810,0,0,11982,11985,3,2356,1178,0,11983,11985,5,2093,
        0,0,11984,11982,1,0,0,0,11984,11983,1,0,0,0,11985,11987,1,0,0,0,
        11986,11980,1,0,0,0,11986,11987,1,0,0,0,11987,11989,1,0,0,0,11988,
        11990,3,1186,593,0,11989,11988,1,0,0,0,11989,11990,1,0,0,0,11990,
        1229,1,0,0,0,11991,11992,7,132,0,0,11992,1231,1,0,0,0,11993,11994,
        5,368,0,0,11994,11995,5,401,0,0,11995,11997,3,794,397,0,11996,11993,
        1,0,0,0,11996,11997,1,0,0,0,11997,12012,1,0,0,0,11998,11999,5,4,
        0,0,11999,12010,5,1263,0,0,12000,12001,5,2347,0,0,12001,12002,5,
        2343,0,0,12002,12011,5,2348,0,0,12003,12004,5,2347,0,0,12004,12005,
        3,1234,617,0,12005,12006,5,2348,0,0,12006,12011,1,0,0,0,12007,12008,
        5,2153,0,0,12008,12009,5,205,0,0,12009,12011,3,1842,921,0,12010,
        12000,1,0,0,0,12010,12003,1,0,0,0,12010,12007,1,0,0,0,12011,12013,
        1,0,0,0,12012,11998,1,0,0,0,12012,12013,1,0,0,0,12013,12031,1,0,
        0,0,12014,12015,5,824,0,0,12015,12016,5,2347,0,0,12016,12017,3,794,
        397,0,12017,12018,5,2366,0,0,12018,12026,5,2343,0,0,12019,12020,
        5,2353,0,0,12020,12021,3,794,397,0,12021,12022,5,2366,0,0,12022,
        12023,5,2343,0,0,12023,12025,1,0,0,0,12024,12019,1,0,0,0,12025,12028,
        1,0,0,0,12026,12024,1,0,0,0,12026,12027,1,0,0,0,12027,12029,1,0,
        0,0,12028,12026,1,0,0,0,12029,12030,5,2348,0,0,12030,12032,1,0,0,
        0,12031,12014,1,0,0,0,12031,12032,1,0,0,0,12032,1233,1,0,0,0,12033,
        12034,1,0,0,0,12034,1235,1,0,0,0,12035,12037,7,17,0,0,12036,12035,
        1,0,0,0,12036,12037,1,0,0,0,12037,12038,1,0,0,0,12038,12039,5,1528,
        0,0,12039,12040,5,937,0,0,12040,1237,1,0,0,0,12041,12042,5,565,0,
        0,12042,12044,5,63,0,0,12043,12045,3,2364,1182,0,12044,12043,1,0,
        0,0,12044,12045,1,0,0,0,12045,12050,1,0,0,0,12046,12047,5,1074,0,
        0,12047,12048,5,565,0,0,12048,12050,5,63,0,0,12049,12041,1,0,0,0,
        12049,12046,1,0,0,0,12050,1239,1,0,0,0,12051,12052,5,2341,0,0,12052,
        1241,1,0,0,0,12053,12054,5,21,0,0,12054,12055,5,1705,0,0,12055,12058,
        5,836,0,0,12056,12059,3,1244,622,0,12057,12059,3,1246,623,0,12058,
        12056,1,0,0,0,12058,12057,1,0,0,0,12059,12069,1,0,0,0,12060,12061,
        5,2353,0,0,12061,12062,5,1705,0,0,12062,12065,5,836,0,0,12063,12066,
        3,1244,622,0,12064,12066,3,1246,623,0,12065,12063,1,0,0,0,12065,
        12064,1,0,0,0,12066,12068,1,0,0,0,12067,12060,1,0,0,0,12068,12071,
        1,0,0,0,12069,12067,1,0,0,0,12069,12070,1,0,0,0,12070,12094,1,0,
        0,0,12071,12069,1,0,0,0,12072,12073,5,438,0,0,12073,12074,5,1705,
        0,0,12074,12078,5,836,0,0,12075,12079,3,1246,623,0,12076,12077,5,
        609,0,0,12077,12079,3,1240,620,0,12078,12075,1,0,0,0,12078,12076,
        1,0,0,0,12079,12090,1,0,0,0,12080,12081,5,2353,0,0,12081,12082,5,
        1705,0,0,12082,12086,5,836,0,0,12083,12087,3,1246,623,0,12084,12085,
        5,609,0,0,12085,12087,3,1240,620,0,12086,12083,1,0,0,0,12086,12084,
        1,0,0,0,12087,12089,1,0,0,0,12088,12080,1,0,0,0,12089,12092,1,0,
        0,0,12090,12088,1,0,0,0,12090,12091,1,0,0,0,12091,12094,1,0,0,0,
        12092,12090,1,0,0,0,12093,12053,1,0,0,0,12093,12072,1,0,0,0,12094,
        1243,1,0,0,0,12095,12096,5,609,0,0,12096,12097,3,1240,620,0,12097,
        12098,5,2347,0,0,12098,12101,3,2370,1185,0,12099,12100,5,1074,0,
        0,12100,12102,5,836,0,0,12101,12099,1,0,0,0,12101,12102,1,0,0,0,
        12102,12111,1,0,0,0,12103,12104,5,2353,0,0,12104,12107,3,2370,1185,
        0,12105,12106,5,1074,0,0,12106,12108,5,836,0,0,12107,12105,1,0,0,
        0,12107,12108,1,0,0,0,12108,12110,1,0,0,0,12109,12103,1,0,0,0,12110,
        12113,1,0,0,0,12111,12109,1,0,0,0,12111,12112,1,0,0,0,12112,12114,
        1,0,0,0,12113,12111,1,0,0,0,12114,12116,5,2348,0,0,12115,12117,5,
        44,0,0,12116,12115,1,0,0,0,12116,12117,1,0,0,0,12117,1245,1,0,0,
        0,12118,12119,5,334,0,0,12119,12131,5,2347,0,0,12120,12122,5,2353,
        0,0,12121,12120,1,0,0,0,12121,12122,1,0,0,0,12122,12129,1,0,0,0,
        12123,12130,5,38,0,0,12124,12125,5,1376,0,0,12125,12130,5,770,0,
        0,12126,12130,5,2091,0,0,12127,12128,5,578,0,0,12128,12130,5,770,
        0,0,12129,12123,1,0,0,0,12129,12124,1,0,0,0,12129,12126,1,0,0,0,
        12129,12127,1,0,0,0,12130,12132,1,0,0,0,12131,12121,1,0,0,0,12132,
        12133,1,0,0,0,12133,12131,1,0,0,0,12133,12134,1,0,0,0,12134,12135,
        1,0,0,0,12135,12136,5,2348,0,0,12136,12137,5,227,0,0,12137,1247,
        1,0,0,0,12138,12139,5,39,0,0,12139,12152,5,521,0,0,12140,12147,5,
        2347,0,0,12141,12142,5,1617,0,0,12142,12148,3,1182,591,0,12143,12144,
        5,335,0,0,12144,12148,5,2343,0,0,12145,12146,5,716,0,0,12146,12148,
        5,2341,0,0,12147,12141,1,0,0,0,12147,12143,1,0,0,0,12147,12145,1,
        0,0,0,12148,12149,1,0,0,0,12149,12147,1,0,0,0,12149,12150,1,0,0,
        0,12150,12151,1,0,0,0,12151,12153,5,2348,0,0,12152,12140,1,0,0,0,
        12152,12153,1,0,0,0,12153,1249,1,0,0,0,12154,12155,5,356,0,0,12155,
        12158,5,2111,0,0,12156,12157,5,768,0,0,12157,12159,3,1182,591,0,
        12158,12156,1,0,0,0,12158,12159,1,0,0,0,12159,1251,1,0,0,0,12160,
        12161,5,1602,0,0,12161,12163,5,1631,0,0,12162,12164,5,235,0,0,12163,
        12162,1,0,0,0,12163,12164,1,0,0,0,12164,12166,1,0,0,0,12165,12167,
        5,171,0,0,12166,12165,1,0,0,0,12166,12167,1,0,0,0,12167,1253,1,0,
        0,0,12168,12170,7,133,0,0,12169,12168,1,0,0,0,12169,12170,1,0,0,
        0,12170,12171,1,0,0,0,12171,12172,5,1436,0,0,12172,1255,1,0,0,0,
        12173,12175,5,2118,0,0,12174,12176,5,1138,0,0,12175,12174,1,0,0,
        0,12175,12176,1,0,0,0,12176,12177,1,0,0,0,12177,12178,5,663,0,0,
        12178,12179,5,334,0,0,12179,12180,1,0,0,0,12180,12181,3,1618,809,
        0,12181,1257,1,0,0,0,12182,12183,5,2069,0,0,12183,12184,5,1999,0,
        0,12184,12186,3,2302,1151,0,12185,12187,5,1400,0,0,12186,12185,1,
        0,0,0,12186,12187,1,0,0,0,12187,1259,1,0,0,0,12188,12189,5,438,0,
        0,12189,12190,5,1999,0,0,12190,12193,3,2302,1151,0,12191,12192,5,
        650,0,0,12192,12194,5,508,0,0,12193,12191,1,0,0,0,12193,12194,1,
        0,0,0,12194,12196,1,0,0,0,12195,12197,5,1400,0,0,12196,12195,1,0,
        0,0,12196,12197,1,0,0,0,12197,1261,1,0,0,0,12198,12199,5,438,0,0,
        12199,12200,5,1996,0,0,12200,12203,3,2364,1182,0,12201,12202,5,650,
        0,0,12202,12204,5,508,0,0,12203,12201,1,0,0,0,12203,12204,1,0,0,
        0,12204,12209,1,0,0,0,12205,12207,7,134,0,0,12206,12208,5,1415,0,
        0,12207,12206,1,0,0,0,12207,12208,1,0,0,0,12208,12210,1,0,0,0,12209,
        12205,1,0,0,0,12209,12210,1,0,0,0,12210,12212,1,0,0,0,12211,12213,
        3,1266,633,0,12212,12211,1,0,0,0,12212,12213,1,0,0,0,12213,1263,
        1,0,0,0,12214,12215,5,438,0,0,12215,12216,5,1996,0,0,12216,12217,
        5,1590,0,0,12217,12219,3,2364,1182,0,12218,12220,3,1266,633,0,12219,
        12218,1,0,0,0,12219,12220,1,0,0,0,12220,1265,1,0,0,0,12221,12222,
        5,663,0,0,12222,12225,5,280,0,0,12223,12224,7,135,0,0,12224,12226,
        5,336,0,0,12225,12223,1,0,0,0,12225,12226,1,0,0,0,12226,12229,1,
        0,0,0,12227,12228,5,171,0,0,12228,12230,5,272,0,0,12229,12227,1,
        0,0,0,12229,12230,1,0,0,0,12230,1267,1,0,0,0,12231,12232,5,438,0,
        0,12232,12233,5,2190,0,0,12233,12236,3,2302,1151,0,12234,12235,5,
        650,0,0,12235,12237,5,508,0,0,12236,12234,1,0,0,0,12236,12237,1,
        0,0,0,12237,12240,1,0,0,0,12238,12239,5,171,0,0,12239,12241,5,271,
        0,0,12240,12238,1,0,0,0,12240,12241,1,0,0,0,12241,1269,1,0,0,0,12242,
        12243,5,230,0,0,12243,12244,5,1193,0,0,12244,12245,5,226,0,0,12245,
        12246,3,2300,1150,0,12246,12247,5,740,0,0,12247,12248,3,2360,1180,
        0,12248,1271,1,0,0,0,12249,12250,7,17,0,0,12250,1273,1,0,0,0,12251,
        12252,7,136,0,0,12252,1275,1,0,0,0,12253,12255,5,42,0,0,12254,12256,
        5,1398,0,0,12255,12254,1,0,0,0,12255,12256,1,0,0,0,12256,12257,1,
        0,0,0,12257,12261,5,1712,0,0,12258,12259,3,2244,1122,0,12259,12260,
        5,2340,0,0,12260,12262,1,0,0,0,12261,12258,1,0,0,0,12261,12262,1,
        0,0,0,12262,12263,1,0,0,0,12263,12264,3,2308,1154,0,12264,12265,
        7,137,0,0,12265,1277,1,0,0,0,12266,12269,5,305,0,0,12267,12268,5,
        1237,0,0,12268,12270,5,1484,0,0,12269,12267,1,0,0,0,12269,12270,
        1,0,0,0,12270,12271,1,0,0,0,12271,12272,5,1398,0,0,12272,12273,5,
        1712,0,0,12273,12274,3,2308,1154,0,12274,12278,5,580,0,0,12275,12276,
        3,2244,1122,0,12276,12277,5,2340,0,0,12277,12279,1,0,0,0,12278,12275,
        1,0,0,0,12278,12279,1,0,0,0,12279,12280,1,0,0,0,12280,12283,3,2310,
        1155,0,12281,12282,5,2355,0,0,12282,12284,3,2294,1147,0,12283,12281,
        1,0,0,0,12283,12284,1,0,0,0,12284,12314,1,0,0,0,12285,12288,5,305,
        0,0,12286,12287,5,1237,0,0,12287,12289,5,1484,0,0,12288,12286,1,
        0,0,0,12288,12289,1,0,0,0,12289,12290,1,0,0,0,12290,12294,5,1712,
        0,0,12291,12292,3,2244,1122,0,12292,12293,5,2340,0,0,12293,12295,
        1,0,0,0,12294,12291,1,0,0,0,12294,12295,1,0,0,0,12295,12296,1,0,
        0,0,12296,12297,3,2308,1154,0,12297,12301,5,580,0,0,12298,12299,
        3,2244,1122,0,12299,12300,5,2340,0,0,12300,12302,1,0,0,0,12301,12298,
        1,0,0,0,12301,12302,1,0,0,0,12302,12303,1,0,0,0,12303,12311,3,2310,
        1155,0,12304,12308,5,2355,0,0,12305,12306,3,2244,1122,0,12306,12307,
        5,2340,0,0,12307,12309,1,0,0,0,12308,12305,1,0,0,0,12308,12309,1,
        0,0,0,12309,12310,1,0,0,0,12310,12312,3,2294,1147,0,12311,12304,
        1,0,0,0,12311,12312,1,0,0,0,12312,12314,1,0,0,0,12313,12266,1,0,
        0,0,12313,12285,1,0,0,0,12314,1279,1,0,0,0,12315,12317,5,438,0,0,
        12316,12318,5,1398,0,0,12317,12316,1,0,0,0,12317,12318,1,0,0,0,12318,
        12319,1,0,0,0,12319,12323,5,1712,0,0,12320,12321,3,2244,1122,0,12321,
        12322,5,2340,0,0,12322,12324,1,0,0,0,12323,12320,1,0,0,0,12323,12324,
        1,0,0,0,12324,12325,1,0,0,0,12325,12327,3,2308,1154,0,12326,12328,
        5,576,0,0,12327,12326,1,0,0,0,12327,12328,1,0,0,0,12328,1281,1,0,
        0,0,12329,12330,5,305,0,0,12330,12333,5,1633,0,0,12331,12332,5,2369,
        0,0,12332,12334,3,1284,642,0,12333,12331,1,0,0,0,12333,12334,1,0,
        0,0,12334,12335,1,0,0,0,12335,12346,5,588,0,0,12336,12339,5,1318,
        0,0,12337,12338,5,2369,0,0,12338,12340,3,1286,643,0,12339,12337,
        1,0,0,0,12339,12340,1,0,0,0,12340,12343,1,0,0,0,12341,12342,5,67,
        0,0,12342,12344,5,288,0,0,12343,12341,1,0,0,0,12343,12344,1,0,0,
        0,12344,12347,1,0,0,0,12345,12347,5,888,0,0,12346,12336,1,0,0,0,
        12346,12345,1,0,0,0,12347,1283,1,0,0,0,12348,12349,5,2343,0,0,12349,
        1285,1,0,0,0,12350,12351,5,2343,0,0,12351,1287,1,0,0,0,12352,12353,
        5,230,0,0,12353,12354,5,1193,0,0,12354,12355,5,1999,0,0,12355,12356,
        3,2302,1151,0,12356,12357,5,740,0,0,12357,12358,3,2360,1180,0,12358,
        1289,1,0,0,0,12359,12360,5,230,0,0,12360,12361,5,1193,0,0,12361,
        12362,5,865,0,0,12362,12363,5,2190,0,0,12363,12364,3,2302,1151,0,
        12364,12365,5,740,0,0,12365,12366,3,2360,1180,0,12366,1291,1,0,0,
        0,12367,12368,5,42,0,0,12368,12369,5,45,0,0,12369,12373,5,2190,0,
        0,12370,12371,3,2244,1122,0,12371,12372,5,2340,0,0,12372,12374,1,
        0,0,0,12373,12370,1,0,0,0,12373,12374,1,0,0,0,12374,12375,1,0,0,
        0,12375,12382,3,2364,1182,0,12376,12377,5,1481,0,0,12377,12378,5,
        2052,0,0,12378,12383,3,2364,1182,0,12379,12383,5,237,0,0,12380,12383,
        3,1294,647,0,12381,12383,3,1300,650,0,12382,12376,1,0,0,0,12382,
        12379,1,0,0,0,12382,12380,1,0,0,0,12382,12381,1,0,0,0,12383,1293,
        1,0,0,0,12384,12385,5,21,0,0,12385,12386,5,158,0,0,12386,12387,5,
        879,0,0,12387,12388,5,609,0,0,12388,12391,5,2347,0,0,12389,12392,
        5,38,0,0,12390,12392,3,1298,649,0,12391,12389,1,0,0,0,12391,12390,
        1,0,0,0,12391,12392,1,0,0,0,12392,12393,1,0,0,0,12393,12394,5,2348,
        0,0,12394,12395,5,800,0,0,12395,12396,5,2347,0,0,12396,12401,3,1296,
        648,0,12397,12398,5,2353,0,0,12398,12400,3,1296,648,0,12399,12397,
        1,0,0,0,12400,12403,1,0,0,0,12401,12399,1,0,0,0,12401,12402,1,0,
        0,0,12402,12404,1,0,0,0,12403,12401,1,0,0,0,12404,12405,5,2348,0,
        0,12405,1295,1,0,0,0,12406,12407,3,2364,1182,0,12407,12408,5,2340,
        0,0,12408,12410,1,0,0,0,12409,12406,1,0,0,0,12409,12410,1,0,0,0,
        12410,12411,1,0,0,0,12411,12412,3,2364,1182,0,12412,12413,5,2340,
        0,0,12413,12415,1,0,0,0,12414,12409,1,0,0,0,12414,12415,1,0,0,0,
        12415,12416,1,0,0,0,12416,12417,3,2364,1182,0,12417,1297,1,0,0,0,
        12418,12423,3,2364,1182,0,12419,12420,5,2353,0,0,12420,12422,3,2364,
        1182,0,12421,12419,1,0,0,0,12422,12425,1,0,0,0,12423,12421,1,0,0,
        0,12423,12424,1,0,0,0,12424,1299,1,0,0,0,12425,12423,1,0,0,0,12426,
        12427,5,438,0,0,12427,12428,5,158,0,0,12428,12429,5,879,0,0,12429,
        12430,5,609,0,0,12430,12433,5,2347,0,0,12431,12434,5,38,0,0,12432,
        12434,3,1298,649,0,12433,12431,1,0,0,0,12433,12432,1,0,0,0,12433,
        12434,1,0,0,0,12434,12435,1,0,0,0,12435,12436,5,2348,0,0,12436,12437,
        5,800,0,0,12437,12438,5,2347,0,0,12438,12443,3,1296,648,0,12439,
        12440,5,2353,0,0,12440,12442,3,1296,648,0,12441,12439,1,0,0,0,12442,
        12445,1,0,0,0,12443,12441,1,0,0,0,12443,12444,1,0,0,0,12444,12446,
        1,0,0,0,12445,12443,1,0,0,0,12446,12447,5,2348,0,0,12447,1301,1,
        0,0,0,12448,12449,5,42,0,0,12449,12450,5,81,0,0,12450,12454,5,398,
        0,0,12451,12452,3,2244,1122,0,12452,12453,5,2340,0,0,12453,12455,
        1,0,0,0,12454,12451,1,0,0,0,12454,12455,1,0,0,0,12455,12456,1,0,
        0,0,12456,12461,3,2364,1182,0,12457,12458,5,1481,0,0,12458,12459,
        5,2052,0,0,12459,12462,3,2364,1182,0,12460,12462,5,237,0,0,12461,
        12457,1,0,0,0,12461,12460,1,0,0,0,12462,1303,1,0,0,0,12463,12464,
        5,42,0,0,12464,12465,5,83,0,0,12465,12466,5,1339,0,0,12466,12468,
        3,2364,1182,0,12467,12469,5,21,0,0,12468,12467,1,0,0,0,12468,12469,
        1,0,0,0,12469,12483,1,0,0,0,12470,12472,3,416,208,0,12471,12470,
        1,0,0,0,12471,12472,1,0,0,0,12472,12474,1,0,0,0,12473,12475,3,418,
        209,0,12474,12473,1,0,0,0,12474,12475,1,0,0,0,12475,12477,1,0,0,
        0,12476,12478,3,434,217,0,12477,12476,1,0,0,0,12477,12478,1,0,0,
        0,12478,12484,1,0,0,0,12479,12480,5,1192,0,0,12480,12482,5,2046,
        0,0,12481,12479,1,0,0,0,12481,12482,1,0,0,0,12482,12484,1,0,0,0,
        12483,12471,1,0,0,0,12483,12481,1,0,0,0,12484,12486,1,0,0,0,12485,
        12487,5,438,0,0,12486,12485,1,0,0,0,12486,12487,1,0,0,0,12487,12501,
        1,0,0,0,12488,12490,3,416,208,0,12489,12488,1,0,0,0,12489,12490,
        1,0,0,0,12490,12492,1,0,0,0,12491,12493,3,418,209,0,12492,12491,
        1,0,0,0,12492,12493,1,0,0,0,12493,12495,1,0,0,0,12494,12496,3,434,
        217,0,12495,12494,1,0,0,0,12495,12496,1,0,0,0,12496,12502,1,0,0,
        0,12497,12498,5,1192,0,0,12498,12500,5,2046,0,0,12499,12497,1,0,
        0,0,12499,12500,1,0,0,0,12500,12502,1,0,0,0,12501,12489,1,0,0,0,
        12501,12499,1,0,0,0,12502,12511,1,0,0,0,12503,12509,5,251,0,0,12504,
        12510,5,438,0,0,12505,12506,5,2343,0,0,12506,12507,5,493,0,0,12507,
        12508,5,1317,0,0,12508,12510,7,54,0,0,12509,12504,1,0,0,0,12509,
        12505,1,0,0,0,12510,12512,1,0,0,0,12511,12503,1,0,0,0,12511,12512,
        1,0,0,0,12512,1305,1,0,0,0,12513,12514,5,42,0,0,12514,12515,5,210,
        0,0,12515,12522,3,474,237,0,12516,12523,3,1200,600,0,12517,12518,
        5,1617,0,0,12518,12523,3,1182,591,0,12519,12523,3,1248,624,0,12520,
        12523,3,1250,625,0,12521,12523,3,1328,664,0,12522,12516,1,0,0,0,
        12522,12517,1,0,0,0,12522,12519,1,0,0,0,12522,12520,1,0,0,0,12522,
        12521,1,0,0,0,12523,12524,1,0,0,0,12524,12522,1,0,0,0,12524,12525,
        1,0,0,0,12525,12527,1,0,0,0,12526,12528,3,936,468,0,12527,12526,
        1,0,0,0,12527,12528,1,0,0,0,12528,1307,1,0,0,0,12529,12530,5,438,
        0,0,12530,12531,5,45,0,0,12531,12535,5,2190,0,0,12532,12533,3,2244,
        1122,0,12533,12534,5,2340,0,0,12534,12536,1,0,0,0,12535,12532,1,
        0,0,0,12535,12536,1,0,0,0,12536,12537,1,0,0,0,12537,12538,3,2364,
        1182,0,12538,1309,1,0,0,0,12539,12540,5,438,0,0,12540,12541,5,81,
        0,0,12541,12545,5,398,0,0,12542,12543,3,2244,1122,0,12543,12544,
        5,2340,0,0,12544,12546,1,0,0,0,12545,12542,1,0,0,0,12545,12546,1,
        0,0,0,12546,12547,1,0,0,0,12547,12548,3,2364,1182,0,12548,1311,1,
        0,0,0,12549,12550,5,438,0,0,12550,12551,5,83,0,0,12551,12552,5,1339,
        0,0,12552,12553,3,2364,1182,0,12553,1313,1,0,0,0,12554,12555,5,438,
        0,0,12555,12556,5,565,0,0,12556,12557,5,63,0,0,12557,12558,3,2364,
        1182,0,12558,1315,1,0,0,0,12559,12560,5,438,0,0,12560,12561,5,210,
        0,0,12561,12568,3,474,237,0,12562,12563,5,663,0,0,12563,12566,5,
        1997,0,0,12564,12565,5,171,0,0,12565,12567,5,272,0,0,12566,12564,
        1,0,0,0,12566,12567,1,0,0,0,12567,12569,1,0,0,0,12568,12562,1,0,
        0,0,12568,12569,1,0,0,0,12569,1317,1,0,0,0,12570,12571,5,438,0,0,
        12571,12572,5,281,0,0,12572,12573,3,2364,1182,0,12573,1319,1,0,0,
        0,12574,12575,5,438,0,0,12575,12576,5,401,0,0,12576,12577,3,2364,
        1182,0,12577,1321,1,0,0,0,12578,12579,5,438,0,0,12579,12580,5,413,
        0,0,12580,12589,3,2364,1182,0,12581,12583,5,576,0,0,12582,12581,
        1,0,0,0,12582,12583,1,0,0,0,12583,12584,1,0,0,0,12584,12587,5,663,
        0,0,12585,12587,5,503,0,0,12586,12582,1,0,0,0,12586,12585,1,0,0,
        0,12587,12588,1,0,0,0,12588,12590,5,280,0,0,12589,12586,1,0,0,0,
        12589,12590,1,0,0,0,12590,1323,1,0,0,0,12591,12592,5,438,0,0,12592,
        12593,5,452,0,0,12593,12595,3,2364,1182,0,12594,12596,5,171,0,0,
        12595,12594,1,0,0,0,12595,12596,1,0,0,0,12596,1325,1,0,0,0,12597,
        12598,5,2069,0,0,12598,12599,5,210,0,0,12599,12602,3,474,237,0,12600,
        12601,7,138,0,0,12601,12603,5,1678,0,0,12602,12600,1,0,0,0,12602,
        12603,1,0,0,0,12603,1327,1,0,0,0,12604,12605,7,106,0,0,12605,1329,
        1,0,0,0,12606,12607,3,2364,1182,0,12607,1331,1,0,0,0,12608,12609,
        5,42,0,0,12609,12625,3,1334,667,0,12610,12626,3,1336,668,0,12611,
        12626,3,1342,671,0,12612,12626,3,1358,679,0,12613,12626,3,1368,684,
        0,12614,12626,3,1386,693,0,12615,12626,3,1390,695,0,12616,12626,
        3,1406,703,0,12617,12626,3,1410,705,0,12618,12626,3,1412,706,0,12619,
        12626,3,1424,712,0,12620,12626,3,1426,713,0,12621,12626,3,1428,714,
        0,12622,12626,3,1430,715,0,12623,12626,3,1436,718,0,12624,12626,
        3,1438,719,0,12625,12610,1,0,0,0,12625,12611,1,0,0,0,12625,12612,
        1,0,0,0,12625,12613,1,0,0,0,12625,12614,1,0,0,0,12625,12615,1,0,
        0,0,12625,12616,1,0,0,0,12625,12617,1,0,0,0,12625,12618,1,0,0,0,
        12625,12619,1,0,0,0,12625,12620,1,0,0,0,12625,12621,1,0,0,0,12625,
        12622,1,0,0,0,12625,12623,1,0,0,0,12625,12624,1,0,0,0,12626,1333,
        1,0,0,0,12627,12629,5,1336,0,0,12628,12627,1,0,0,0,12628,12629,1,
        0,0,0,12629,12630,1,0,0,0,12630,12632,5,333,0,0,12631,12633,3,1330,
        665,0,12632,12631,1,0,0,0,12632,12633,1,0,0,0,12633,1335,1,0,0,0,
        12634,12637,5,934,0,0,12635,12636,7,139,0,0,12636,12638,5,333,0,
        0,12637,12635,1,0,0,0,12637,12638,1,0,0,0,12638,12654,1,0,0,0,12639,
        12642,5,1198,0,0,12640,12641,5,1429,0,0,12641,12643,5,2216,0,0,12642,
        12640,1,0,0,0,12642,12643,1,0,0,0,12643,12645,1,0,0,0,12644,12646,
        3,1338,669,0,12645,12644,1,0,0,0,12645,12646,1,0,0,0,12646,12648,
        1,0,0,0,12647,12649,3,1340,670,0,12648,12647,1,0,0,0,12648,12649,
        1,0,0,0,12649,12654,1,0,0,0,12650,12651,5,1198,0,0,12651,12652,5,
        1429,0,0,12652,12654,5,1192,0,0,12653,12634,1,0,0,0,12653,12639,
        1,0,0,0,12653,12650,1,0,0,0,12654,1337,1,0,0,0,12655,12656,7,60,
        0,0,12656,1339,1,0,0,0,12657,12658,7,140,0,0,12658,1341,1,0,0,0,
        12659,12665,3,1346,673,0,12660,12665,3,1354,677,0,12661,12662,3,
        1344,672,0,12662,12663,5,100,0,0,12663,12665,1,0,0,0,12664,12659,
        1,0,0,0,12664,12660,1,0,0,0,12664,12661,1,0,0,0,12665,1343,1,0,0,
        0,12666,12667,7,141,0,0,12667,1345,1,0,0,0,12668,12670,5,1438,0,
        0,12669,12671,5,93,0,0,12670,12669,1,0,0,0,12670,12671,1,0,0,0,12671,
        12674,1,0,0,0,12672,12673,5,588,0,0,12673,12675,5,2343,0,0,12674,
        12672,1,0,0,0,12674,12675,1,0,0,0,12675,12698,1,0,0,0,12676,12681,
        3,1348,674,0,12677,12681,3,1350,675,0,12678,12679,5,830,0,0,12679,
        12681,5,2343,0,0,12680,12676,1,0,0,0,12680,12677,1,0,0,0,12680,12678,
        1,0,0,0,12680,12681,1,0,0,0,12681,12691,1,0,0,0,12682,12688,5,2009,
        0,0,12683,12684,5,40,0,0,12684,12685,5,2341,0,0,12685,12688,5,291,
        0,0,12686,12688,3,936,468,0,12687,12682,1,0,0,0,12687,12683,1,0,
        0,0,12687,12686,1,0,0,0,12688,12689,1,0,0,0,12689,12687,1,0,0,0,
        12689,12690,1,0,0,0,12690,12692,1,0,0,0,12691,12687,1,0,0,0,12691,
        12692,1,0,0,0,12692,12699,1,0,0,0,12693,12695,5,282,0,0,12694,12696,
        5,368,0,0,12695,12694,1,0,0,0,12695,12696,1,0,0,0,12696,12699,1,
        0,0,0,12697,12699,5,166,0,0,12698,12680,1,0,0,0,12698,12693,1,0,
        0,0,12698,12697,1,0,0,0,12699,1347,1,0,0,0,12700,12702,5,1651,0,
        0,12701,12700,1,0,0,0,12701,12702,1,0,0,0,12702,12703,1,0,0,0,12703,
        12723,5,333,0,0,12704,12711,5,2109,0,0,12705,12712,5,166,0,0,12706,
        12707,5,2024,0,0,12707,12712,5,2343,0,0,12708,12709,5,182,0,0,12709,
        12712,5,2341,0,0,12710,12712,5,268,0,0,12711,12705,1,0,0,0,12711,
        12706,1,0,0,0,12711,12708,1,0,0,0,12711,12710,1,0,0,0,12712,12720,
        1,0,0,0,12713,12714,5,2153,0,0,12714,12715,5,100,0,0,12715,12720,
        5,283,0,0,12716,12717,5,1624,0,0,12717,12718,5,2024,0,0,12718,12720,
        5,2343,0,0,12719,12704,1,0,0,0,12719,12713,1,0,0,0,12719,12716,1,
        0,0,0,12720,12721,1,0,0,0,12721,12719,1,0,0,0,12721,12722,1,0,0,
        0,12722,12724,1,0,0,0,12723,12719,1,0,0,0,12723,12724,1,0,0,0,12724,
        1349,1,0,0,0,12725,12726,5,1996,0,0,12726,12731,3,1614,807,0,12727,
        12728,5,2353,0,0,12728,12730,3,1614,807,0,12729,12727,1,0,0,0,12730,
        12733,1,0,0,0,12731,12729,1,0,0,0,12731,12732,1,0,0,0,12732,12747,
        1,0,0,0,12733,12731,1,0,0,0,12734,12735,5,335,0,0,12735,12747,5,
        2343,0,0,12736,12742,3,1420,710,0,12737,12738,5,2353,0,0,12738,12741,
        5,2343,0,0,12739,12741,3,1420,710,0,12740,12737,1,0,0,0,12740,12739,
        1,0,0,0,12741,12744,1,0,0,0,12742,12740,1,0,0,0,12742,12743,1,0,
        0,0,12743,12747,1,0,0,0,12744,12742,1,0,0,0,12745,12747,3,1352,676,
        0,12746,12725,1,0,0,0,12746,12734,1,0,0,0,12746,12736,1,0,0,0,12746,
        12745,1,0,0,0,12747,1351,1,0,0,0,12748,12749,4,676,8,0,12749,12770,
        5,1651,0,0,12750,12751,5,1996,0,0,12751,12756,3,1614,807,0,12752,
        12753,5,2353,0,0,12753,12755,3,1614,807,0,12754,12752,1,0,0,0,12755,
        12758,1,0,0,0,12756,12754,1,0,0,0,12756,12757,1,0,0,0,12757,12771,
        1,0,0,0,12758,12756,1,0,0,0,12759,12760,5,335,0,0,12760,12771,5,
        2343,0,0,12761,12767,3,1420,710,0,12762,12763,5,2353,0,0,12763,12766,
        5,2343,0,0,12764,12766,3,1420,710,0,12765,12762,1,0,0,0,12765,12764,
        1,0,0,0,12766,12769,1,0,0,0,12767,12765,1,0,0,0,12767,12768,1,0,
        0,0,12768,12771,1,0,0,0,12769,12767,1,0,0,0,12770,12750,1,0,0,0,
        12770,12759,1,0,0,0,12770,12761,1,0,0,0,12771,12772,1,0,0,0,12772,
        12775,5,2109,0,0,12773,12774,5,268,0,0,12774,12776,5,2212,0,0,12775,
        12773,1,0,0,0,12775,12776,1,0,0,0,12776,12777,1,0,0,0,12777,12778,
        5,283,0,0,12778,1353,1,0,0,0,12779,12814,5,1438,0,0,12780,12781,
        5,851,0,0,12781,12782,5,1651,0,0,12782,12804,5,333,0,0,12783,12784,
        5,2153,0,0,12784,12785,5,319,0,0,12785,12799,5,830,0,0,12786,12789,
        5,411,0,0,12787,12788,5,588,0,0,12788,12790,5,1586,0,0,12789,12787,
        1,0,0,0,12789,12790,1,0,0,0,12790,12799,1,0,0,0,12791,12799,5,1030,
        0,0,12792,12793,5,2109,0,0,12793,12794,5,182,0,0,12794,12799,5,2341,
        0,0,12795,12796,5,2109,0,0,12796,12799,5,268,0,0,12797,12799,3,936,
        468,0,12798,12783,1,0,0,0,12798,12786,1,0,0,0,12798,12791,1,0,0,
        0,12798,12792,1,0,0,0,12798,12795,1,0,0,0,12798,12797,1,0,0,0,12799,
        12800,1,0,0,0,12800,12798,1,0,0,0,12800,12801,1,0,0,0,12801,12805,
        1,0,0,0,12802,12805,5,558,0,0,12803,12805,5,166,0,0,12804,12798,
        1,0,0,0,12804,12802,1,0,0,0,12804,12803,1,0,0,0,12804,12805,1,0,
        0,0,12805,12815,1,0,0,0,12806,12807,5,2052,0,0,12807,12808,5,833,
        0,0,12808,12812,5,1651,0,0,12809,12813,3,1356,678,0,12810,12811,
        5,768,0,0,12811,12813,5,646,0,0,12812,12809,1,0,0,0,12812,12810,
        1,0,0,0,12813,12815,1,0,0,0,12814,12780,1,0,0,0,12814,12806,1,0,
        0,0,12815,1355,1,0,0,0,12816,12817,3,2370,1185,0,12817,1357,1,0,
        0,0,12818,12819,5,1481,0,0,12819,12820,5,550,0,0,12820,12825,3,1422,
        711,0,12821,12822,5,2353,0,0,12822,12824,3,1422,711,0,12823,12821,
        1,0,0,0,12824,12827,1,0,0,0,12825,12823,1,0,0,0,12825,12826,1,0,
        0,0,12826,12828,1,0,0,0,12827,12825,1,0,0,0,12828,12829,5,2052,0,
        0,12829,12830,3,1422,711,0,12830,12836,1,0,0,0,12831,12836,3,1360,
        680,0,12832,12836,3,1362,681,0,12833,12836,3,1364,682,0,12834,12836,
        3,1366,683,0,12835,12818,1,0,0,0,12835,12831,1,0,0,0,12835,12832,
        1,0,0,0,12835,12833,1,0,0,0,12835,12834,1,0,0,0,12836,1359,1,0,0,
        0,12837,12838,5,305,0,0,12838,12841,5,335,0,0,12839,12842,3,1422,
        711,0,12840,12842,3,1420,710,0,12841,12839,1,0,0,0,12841,12840,1,
        0,0,0,12842,12850,1,0,0,0,12843,12846,5,2353,0,0,12844,12847,3,1422,
        711,0,12845,12847,3,1420,710,0,12846,12844,1,0,0,0,12846,12845,1,
        0,0,0,12847,12849,1,0,0,0,12848,12843,1,0,0,0,12849,12852,1,0,0,
        0,12850,12848,1,0,0,0,12850,12851,1,0,0,0,12851,12855,1,0,0,0,12852,
        12850,1,0,0,0,12853,12854,5,67,0,0,12854,12856,5,967,0,0,12855,12853,
        1,0,0,0,12855,12856,1,0,0,0,12856,1361,1,0,0,0,12857,12860,5,335,
        0,0,12858,12861,3,1422,711,0,12859,12861,3,1420,710,0,12860,12858,
        1,0,0,0,12860,12859,1,0,0,0,12861,12869,1,0,0,0,12862,12865,5,2353,
        0,0,12863,12866,3,1422,711,0,12864,12866,3,1420,710,0,12865,12863,
        1,0,0,0,12865,12864,1,0,0,0,12866,12868,1,0,0,0,12867,12862,1,0,
        0,0,12868,12871,1,0,0,0,12869,12867,1,0,0,0,12869,12870,1,0,0,0,
        12870,12883,1,0,0,0,12871,12869,1,0,0,0,12872,12884,5,1190,0,0,12873,
        12876,5,1177,0,0,12874,12875,5,580,0,0,12875,12877,5,438,0,0,12876,
        12874,1,0,0,0,12876,12877,1,0,0,0,12877,12884,1,0,0,0,12878,12879,
        5,1489,0,0,12879,12884,3,1182,591,0,12880,12884,3,930,465,0,12881,
        12882,5,473,0,0,12882,12884,5,100,0,0,12883,12872,1,0,0,0,12883,
        12873,1,0,0,0,12883,12878,1,0,0,0,12883,12880,1,0,0,0,12883,12881,
        1,0,0,0,12884,1363,1,0,0,0,12885,12888,5,2005,0,0,12886,12889,3,
        1422,711,0,12887,12889,3,1420,710,0,12888,12886,1,0,0,0,12888,12887,
        1,0,0,0,12889,12897,1,0,0,0,12890,12893,5,2353,0,0,12891,12894,3,
        1422,711,0,12892,12894,3,1420,710,0,12893,12891,1,0,0,0,12893,12892,
        1,0,0,0,12894,12896,1,0,0,0,12895,12890,1,0,0,0,12896,12899,1,0,
        0,0,12897,12895,1,0,0,0,12897,12898,1,0,0,0,12898,12908,1,0,0,0,
        12899,12897,1,0,0,0,12900,12901,5,1489,0,0,12901,12909,3,1182,591,
        0,12902,12909,3,930,465,0,12903,12904,5,438,0,0,12904,12905,5,663,
        0,0,12905,12909,5,336,0,0,12906,12909,5,1190,0,0,12907,12909,5,1177,
        0,0,12908,12900,1,0,0,0,12908,12902,1,0,0,0,12908,12903,1,0,0,0,
        12908,12906,1,0,0,0,12908,12907,1,0,0,0,12909,1365,1,0,0,0,12910,
        12911,5,938,0,0,12911,12914,5,335,0,0,12912,12915,3,1422,711,0,12913,
        12915,3,1420,710,0,12914,12912,1,0,0,0,12914,12913,1,0,0,0,12915,
        12923,1,0,0,0,12916,12919,5,2353,0,0,12917,12920,3,1422,711,0,12918,
        12920,3,1420,710,0,12919,12917,1,0,0,0,12919,12918,1,0,0,0,12920,
        12922,1,0,0,0,12921,12916,1,0,0,0,12922,12925,1,0,0,0,12923,12921,
        1,0,0,0,12923,12924,1,0,0,0,12924,12928,1,0,0,0,12925,12923,1,0,
        0,0,12926,12927,5,2052,0,0,12927,12929,3,1422,711,0,12928,12926,
        1,0,0,0,12928,12929,1,0,0,0,12929,12931,1,0,0,0,12930,12932,5,1509,
        0,0,12931,12930,1,0,0,0,12931,12932,1,0,0,0,12932,12934,1,0,0,0,
        12933,12935,5,768,0,0,12934,12933,1,0,0,0,12934,12935,1,0,0,0,12935,
        1367,1,0,0,0,12936,12938,5,65,0,0,12937,12939,5,856,0,0,12938,12937,
        1,0,0,0,12938,12939,1,0,0,0,12939,12942,1,0,0,0,12940,12942,5,1003,
        0,0,12941,12936,1,0,0,0,12941,12940,1,0,0,0,12942,12993,1,0,0,0,
        12943,12945,5,1074,0,0,12944,12943,1,0,0,0,12944,12945,1,0,0,0,12945,
        12946,1,0,0,0,12946,12947,5,576,0,0,12947,12993,5,832,0,0,12948,
        12949,5,1590,0,0,12949,12950,5,1651,0,0,12950,12951,5,1057,0,0,12951,
        12956,5,580,0,0,12952,12953,5,334,0,0,12953,12957,5,96,0,0,12954,
        12955,5,816,0,0,12955,12957,5,1312,0,0,12956,12952,1,0,0,0,12956,
        12954,1,0,0,0,12957,12993,1,0,0,0,12958,12959,5,1481,0,0,12959,12960,
        5,550,0,0,12960,12965,3,1422,711,0,12961,12962,5,2353,0,0,12962,
        12964,3,1422,711,0,12963,12961,1,0,0,0,12964,12967,1,0,0,0,12965,
        12963,1,0,0,0,12965,12966,1,0,0,0,12966,12968,1,0,0,0,12967,12965,
        1,0,0,0,12968,12969,5,2052,0,0,12969,12970,3,1422,711,0,12970,12993,
        1,0,0,0,12971,12973,5,202,0,0,12972,12974,5,2082,0,0,12973,12972,
        1,0,0,0,12973,12974,1,0,0,0,12974,12975,1,0,0,0,12975,12976,5,830,
        0,0,12976,12981,3,1384,692,0,12977,12978,5,2353,0,0,12978,12980,
        3,1384,692,0,12979,12977,1,0,0,0,12980,12983,1,0,0,0,12981,12979,
        1,0,0,0,12981,12982,1,0,0,0,12982,12986,1,0,0,0,12983,12981,1,0,
        0,0,12984,12985,5,2106,0,0,12985,12987,5,335,0,0,12986,12984,1,0,
        0,0,12986,12987,1,0,0,0,12987,12993,1,0,0,0,12988,12993,3,1370,685,
        0,12989,12993,3,1374,687,0,12990,12993,3,1376,688,0,12991,12993,
        3,1378,689,0,12992,12941,1,0,0,0,12992,12944,1,0,0,0,12992,12948,
        1,0,0,0,12992,12958,1,0,0,0,12992,12971,1,0,0,0,12992,12988,1,0,
        0,0,12992,12989,1,0,0,0,12992,12990,1,0,0,0,12992,12991,1,0,0,0,
        12993,1369,1,0,0,0,12994,12996,5,21,0,0,12995,12997,5,1651,0,0,12996,
        12995,1,0,0,0,12996,12997,1,0,0,0,12997,12998,1,0,0,0,12998,13034,
        5,830,0,0,12999,13000,5,716,0,0,13000,13004,5,2343,0,0,13001,13002,
        5,2014,0,0,13002,13004,5,2341,0,0,13003,12999,1,0,0,0,13003,13001,
        1,0,0,0,13003,13004,1,0,0,0,13004,13006,1,0,0,0,13005,13007,3,1372,
        686,0,13006,13005,1,0,0,0,13007,13008,1,0,0,0,13008,13006,1,0,0,
        0,13008,13009,1,0,0,0,13009,13035,1,0,0,0,13010,13011,5,882,0,0,
        13011,13013,3,1422,711,0,13012,13014,5,1509,0,0,13013,13012,1,0,
        0,0,13013,13014,1,0,0,0,13014,13022,1,0,0,0,13015,13016,5,2353,0,
        0,13016,13018,3,1422,711,0,13017,13019,5,1509,0,0,13018,13017,1,
        0,0,0,13018,13019,1,0,0,0,13019,13021,1,0,0,0,13020,13015,1,0,0,
        0,13021,13024,1,0,0,0,13022,13020,1,0,0,0,13022,13023,1,0,0,0,13023,
        13025,1,0,0,0,13024,13022,1,0,0,0,13025,13026,5,2052,0,0,13026,13031,
        3,1384,692,0,13027,13028,5,2353,0,0,13028,13030,3,1384,692,0,13029,
        13027,1,0,0,0,13030,13033,1,0,0,0,13031,13029,1,0,0,0,13031,13032,
        1,0,0,0,13032,13035,1,0,0,0,13033,13031,1,0,0,0,13034,13003,1,0,
        0,0,13034,13010,1,0,0,0,13035,1371,1,0,0,0,13036,13037,5,609,0,0,
        13037,13039,5,2341,0,0,13038,13036,1,0,0,0,13038,13039,1,0,0,0,13039,
        13040,1,0,0,0,13040,13041,3,928,464,0,13041,1373,1,0,0,0,13042,13044,
        5,438,0,0,13043,13045,5,1651,0,0,13044,13043,1,0,0,0,13044,13045,
        1,0,0,0,13045,13046,1,0,0,0,13046,13064,5,830,0,0,13047,13052,3,
        1384,692,0,13048,13049,5,2353,0,0,13049,13051,3,1384,692,0,13050,
        13048,1,0,0,0,13051,13054,1,0,0,0,13052,13050,1,0,0,0,13052,13053,
        1,0,0,0,13053,13065,1,0,0,0,13054,13052,1,0,0,0,13055,13056,5,882,
        0,0,13056,13061,3,1422,711,0,13057,13058,5,2353,0,0,13058,13060,
        3,1422,711,0,13059,13057,1,0,0,0,13060,13063,1,0,0,0,13061,13059,
        1,0,0,0,13061,13062,1,0,0,0,13062,13065,1,0,0,0,13063,13061,1,0,
        0,0,13064,13047,1,0,0,0,13064,13055,1,0,0,0,13065,1375,1,0,0,0,13066,
        13067,5,1709,0,0,13067,13068,5,38,0,0,13068,13069,5,831,0,0,13069,
        13070,5,2052,0,0,13070,13071,5,140,0,0,13071,13072,5,2341,0,0,13072,
        1377,1,0,0,0,13073,13074,3,1380,690,0,13074,13075,5,1705,0,0,13075,
        13079,5,836,0,0,13076,13080,5,334,0,0,13077,13080,3,1246,623,0,13078,
        13080,3,1382,691,0,13079,13076,1,0,0,0,13079,13077,1,0,0,0,13079,
        13078,1,0,0,0,13080,1379,1,0,0,0,13081,13082,7,9,0,0,13082,1381,
        1,0,0,0,13083,13084,5,334,0,0,13084,13085,5,580,0,0,13085,13086,
        5,1385,0,0,13086,13087,5,1485,0,0,13087,1383,1,0,0,0,13088,13089,
        5,609,0,0,13089,13103,5,2341,0,0,13090,13091,5,2347,0,0,13091,13096,
        3,1422,711,0,13092,13093,5,2353,0,0,13093,13095,3,1422,711,0,13094,
        13092,1,0,0,0,13095,13098,1,0,0,0,13096,13094,1,0,0,0,13096,13097,
        1,0,0,0,13097,13099,1,0,0,0,13098,13096,1,0,0,0,13099,13100,5,2348,
        0,0,13100,13103,1,0,0,0,13101,13103,3,1422,711,0,13102,13088,1,0,
        0,0,13102,13090,1,0,0,0,13102,13101,1,0,0,0,13103,1385,1,0,0,0,13104,
        13106,5,305,0,0,13105,13107,7,142,0,0,13106,13105,1,0,0,0,13106,
        13107,1,0,0,0,13107,13108,1,0,0,0,13108,13109,5,1651,0,0,13109,13110,
        5,283,0,0,13110,13111,5,67,0,0,13111,13113,3,1422,711,0,13112,13114,
        5,1509,0,0,13113,13112,1,0,0,0,13113,13114,1,0,0,0,13114,13126,1,
        0,0,0,13115,13116,5,100,0,0,13116,13117,5,283,0,0,13117,13123,5,
        2052,0,0,13118,13120,3,1422,711,0,13119,13121,5,1509,0,0,13120,13119,
        1,0,0,0,13120,13121,1,0,0,0,13121,13124,1,0,0,0,13122,13124,3,1388,
        694,0,13123,13118,1,0,0,0,13123,13122,1,0,0,0,13124,13126,1,0,0,
        0,13125,13104,1,0,0,0,13125,13115,1,0,0,0,13126,1387,1,0,0,0,13127,
        13133,5,2054,0,0,13128,13129,5,67,0,0,13129,13131,3,1422,711,0,13130,
        13132,5,1509,0,0,13131,13130,1,0,0,0,13131,13132,1,0,0,0,13132,13134,
        1,0,0,0,13133,13128,1,0,0,0,13133,13134,1,0,0,0,13134,13136,1,0,
        0,0,13135,13137,7,60,0,0,13136,13135,1,0,0,0,13136,13137,1,0,0,0,
        13137,1389,1,0,0,0,13138,13146,3,1392,696,0,13139,13146,3,1394,697,
        0,13140,13146,3,1396,698,0,13141,13146,3,1398,699,0,13142,13146,
        3,1400,700,0,13143,13146,3,1402,701,0,13144,13146,3,1404,702,0,13145,
        13138,1,0,0,0,13145,13139,1,0,0,0,13145,13140,1,0,0,0,13145,13141,
        1,0,0,0,13145,13142,1,0,0,0,13145,13143,1,0,0,0,13145,13144,1,0,
        0,0,13146,13148,1,0,0,0,13147,13149,3,936,468,0,13148,13147,1,0,
        0,0,13148,13149,1,0,0,0,13149,1391,1,0,0,0,13150,13152,5,13,0,0,
        13151,13153,7,142,0,0,13152,13151,1,0,0,0,13152,13153,1,0,0,0,13153,
        13154,1,0,0,0,13154,13155,5,1651,0,0,13155,13158,5,333,0,0,13156,
        13157,5,558,0,0,13157,13159,5,60,0,0,13158,13156,1,0,0,0,13158,13159,
        1,0,0,0,13159,1393,1,0,0,0,13160,13161,5,1590,0,0,13161,13162,5,
        1651,0,0,13162,13163,5,333,0,0,13163,13164,5,2052,0,0,13164,13165,
        5,870,0,0,13165,13166,7,143,0,0,13166,1395,1,0,0,0,13167,13170,5,
        1460,0,0,13168,13169,5,1237,0,0,13169,13171,5,1484,0,0,13170,13168,
        1,0,0,0,13170,13171,1,0,0,0,13171,13172,1,0,0,0,13172,13173,7,142,
        0,0,13173,13174,5,830,0,0,13174,1397,1,0,0,0,13175,13176,7,144,0,
        0,13176,13177,5,2052,0,0,13177,13206,5,1708,0,0,13178,13199,5,2052,
        0,0,13179,13181,7,142,0,0,13180,13179,1,0,0,0,13180,13181,1,0,0,
        0,13181,13182,1,0,0,0,13182,13188,5,1376,0,0,13183,13185,5,1319,
        0,0,13184,13183,1,0,0,0,13184,13185,1,0,0,0,13185,13186,1,0,0,0,
        13186,13188,5,1651,0,0,13187,13180,1,0,0,0,13187,13184,1,0,0,0,13188,
        13195,1,0,0,0,13189,13191,7,2,0,0,13190,13189,1,0,0,0,13190,13191,
        1,0,0,0,13191,13192,1,0,0,0,13192,13193,5,1586,0,0,13193,13194,5,
        1603,0,0,13194,13196,7,0,0,0,13195,13190,1,0,0,0,13195,13196,1,0,
        0,0,13196,13200,1,0,0,0,13197,13198,5,833,0,0,13198,13200,5,1651,
        0,0,13199,13187,1,0,0,0,13199,13197,1,0,0,0,13200,13204,1,0,0,0,
        13201,13202,5,833,0,0,13202,13204,5,1651,0,0,13203,13178,1,0,0,0,
        13203,13201,1,0,0,0,13204,13207,1,0,0,0,13205,13207,5,166,0,0,13206,
        13203,1,0,0,0,13206,13205,1,0,0,0,13206,13207,1,0,0,0,13207,1399,
        1,0,0,0,13208,13209,5,1654,0,0,13209,13210,5,833,0,0,13210,13211,
        5,1651,0,0,13211,13213,5,60,0,0,13212,13214,5,656,0,0,13213,13212,
        1,0,0,0,13213,13214,1,0,0,0,13214,13216,1,0,0,0,13215,13217,5,1030,
        0,0,13216,13215,1,0,0,0,13216,13217,1,0,0,0,13217,13229,1,0,0,0,
        13218,13219,5,967,0,0,13219,13220,5,1376,0,0,13220,13230,3,2370,
        1185,0,13221,13223,5,698,0,0,13222,13224,5,2341,0,0,13223,13222,
        1,0,0,0,13223,13224,1,0,0,0,13224,13230,1,0,0,0,13225,13226,5,1619,
        0,0,13226,13227,5,533,0,0,13227,13230,5,2058,0,0,13228,13230,5,558,
        0,0,13229,13218,1,0,0,0,13229,13221,1,0,0,0,13229,13225,1,0,0,0,
        13229,13228,1,0,0,0,13229,13230,1,0,0,0,13230,1401,1,0,0,0,13231,
        13232,7,145,0,0,13232,13233,5,833,0,0,13233,13234,5,1651,0,0,13234,
        13235,5,60,0,0,13235,1403,1,0,0,0,13236,13237,5,285,0,0,13237,13238,
        5,2052,0,0,13238,13239,7,146,0,0,13239,13240,5,1651,0,0,13240,1405,
        1,0,0,0,13241,13242,5,368,0,0,13242,13243,5,452,0,0,13243,13244,
        5,2369,0,0,13244,13288,3,1418,709,0,13245,13246,5,1590,0,0,13246,
        13247,5,368,0,0,13247,13248,7,97,0,0,13248,13288,5,1996,0,0,13249,
        13250,5,368,0,0,13250,13251,5,1996,0,0,13251,13288,3,1614,807,0,
        13252,13253,5,368,0,0,13253,13254,5,2007,0,0,13254,13257,5,1996,
        0,0,13255,13258,3,1614,807,0,13256,13258,3,880,440,0,13257,13255,
        1,0,0,0,13257,13256,1,0,0,0,13258,13288,1,0,0,0,13259,13260,5,1481,
        0,0,13260,13261,5,604,0,0,13261,13262,5,2052,0,0,13262,13265,3,1416,
        708,0,13263,13264,5,2340,0,0,13264,13266,3,1414,707,0,13265,13263,
        1,0,0,0,13266,13267,1,0,0,0,13267,13265,1,0,0,0,13267,13268,1,0,
        0,0,13268,13288,1,0,0,0,13269,13270,5,467,0,0,13270,13271,5,137,
        0,0,13271,13272,5,182,0,0,13272,13279,5,2056,0,0,13273,13274,5,2153,
        0,0,13274,13275,5,550,0,0,13275,13277,3,1422,711,0,13276,13278,5,
        1509,0,0,13277,13276,1,0,0,0,13277,13278,1,0,0,0,13278,13280,1,0,
        0,0,13279,13273,1,0,0,0,13279,13280,1,0,0,0,13280,13288,1,0,0,0,
        13281,13282,5,404,0,0,13282,13283,5,137,0,0,13283,13284,5,182,0,
        0,13284,13288,5,2056,0,0,13285,13288,3,884,442,0,13286,13288,3,1408,
        704,0,13287,13241,1,0,0,0,13287,13245,1,0,0,0,13287,13249,1,0,0,
        0,13287,13252,1,0,0,0,13287,13259,1,0,0,0,13287,13269,1,0,0,0,13287,
        13281,1,0,0,0,13287,13285,1,0,0,0,13287,13286,1,0,0,0,13288,1407,
        1,0,0,0,13289,13290,5,1590,0,0,13290,13291,5,2025,0,0,13291,13292,
        5,2369,0,0,13292,13293,5,2343,0,0,13293,1409,1,0,0,0,13294,13295,
        3,1272,636,0,13295,13296,5,716,0,0,13296,13297,5,2343,0,0,13297,
        1411,1,0,0,0,13298,13299,5,616,0,0,13299,13300,7,147,0,0,13300,1413,
        1,0,0,0,13301,13302,3,2364,1182,0,13302,1415,1,0,0,0,13303,13304,
        3,2364,1182,0,13304,1417,1,0,0,0,13305,13306,3,2370,1185,0,13306,
        1419,1,0,0,0,13307,13308,5,2341,0,0,13308,1421,1,0,0,0,13309,13310,
        5,2343,0,0,13310,1423,1,0,0,0,13311,13312,5,1367,0,0,13312,13313,
        5,909,0,0,13313,13314,5,288,0,0,13314,13318,3,2364,1182,0,13315,
        13316,5,2212,0,0,13316,13317,7,148,0,0,13317,13319,5,1446,0,0,13318,
        13315,1,0,0,0,13318,13319,1,0,0,0,13319,13323,1,0,0,0,13320,13321,
        5,580,0,0,13321,13322,5,333,0,0,13322,13324,3,2364,1182,0,13323,
        13320,1,0,0,0,13323,13324,1,0,0,0,13324,1425,1,0,0,0,13325,13326,
        5,438,0,0,13326,13327,5,909,0,0,13327,13328,5,288,0,0,13328,13329,
        3,2364,1182,0,13329,1427,1,0,0,0,13330,13331,7,149,0,0,13331,13332,
        5,843,0,0,13332,13333,5,2216,0,0,13333,13334,5,1394,0,0,13334,1429,
        1,0,0,0,13335,13338,3,1432,716,0,13336,13338,3,1434,717,0,13337,
        13335,1,0,0,0,13337,13336,1,0,0,0,13338,1431,1,0,0,0,13339,13340,
        5,1590,0,0,13340,13341,5,788,0,0,13341,13342,5,2369,0,0,13342,13343,
        7,150,0,0,13343,1433,1,0,0,0,13344,13345,5,1590,0,0,13345,13346,
        5,789,0,0,13346,13347,5,2369,0,0,13347,13348,5,2343,0,0,13348,1435,
        1,0,0,0,13349,13350,5,1392,0,0,13350,13351,7,151,0,0,13351,13352,
        5,371,0,0,13352,13353,5,2369,0,0,13353,13354,3,2364,1182,0,13354,
        1437,1,0,0,0,13355,13356,5,2118,0,0,13356,13357,5,1711,0,0,13357,
        13358,7,96,0,0,13358,1439,1,0,0,0,13359,13361,5,42,0,0,13360,13362,
        5,1597,0,0,13361,13360,1,0,0,0,13361,13362,1,0,0,0,13362,13364,1,
        0,0,0,13363,13365,5,1398,0,0,13364,13363,1,0,0,0,13364,13365,1,0,
        0,0,13365,13366,1,0,0,0,13366,13367,5,333,0,0,13367,13368,5,812,
        0,0,13368,13379,3,2296,1148,0,13369,13370,5,265,0,0,13370,13371,
        5,2052,0,0,13371,13372,3,2314,1157,0,13372,13373,5,644,0,0,13373,
        13374,5,154,0,0,13374,13376,3,1442,721,0,13375,13377,3,1444,722,
        0,13376,13375,1,0,0,0,13376,13377,1,0,0,0,13377,13380,1,0,0,0,13378,
        13380,3,1444,722,0,13379,13369,1,0,0,0,13379,13378,1,0,0,0,13380,
        1441,1,0,0,0,13381,13386,3,2364,1182,0,13382,13386,3,2356,1178,0,
        13383,13384,5,2164,0,0,13384,13386,5,2343,0,0,13385,13381,1,0,0,
        0,13385,13382,1,0,0,0,13385,13383,1,0,0,0,13386,1443,1,0,0,0,13387,
        13388,5,84,0,0,13388,13389,5,154,0,0,13389,13390,3,2314,1157,0,13390,
        13391,5,644,0,0,13391,13392,5,154,0,0,13392,13393,3,1442,721,0,13393,
        1445,1,0,0,0,13394,13395,5,305,0,0,13395,13396,5,333,0,0,13396,13435,
        3,1330,665,0,13397,13398,5,2144,0,0,13398,13399,7,152,0,0,13399,
        13400,5,644,0,0,13400,13401,5,154,0,0,13401,13436,3,1442,721,0,13402,
        13403,5,283,0,0,13403,13436,5,1509,0,0,13404,13405,7,153,0,0,13405,
        13436,5,2341,0,0,13406,13408,5,947,0,0,13407,13406,1,0,0,0,13407,
        13408,1,0,0,0,13408,13409,1,0,0,0,13409,13410,5,185,0,0,13410,13411,
        5,1590,0,0,13411,13436,3,2306,1153,0,13412,13413,5,1590,0,0,13413,
        13414,5,368,0,0,13414,13415,7,97,0,0,13415,13436,5,1996,0,0,13416,
        13436,3,1448,724,0,13417,13436,3,1452,726,0,13418,13436,3,1408,704,
        0,13419,13421,7,97,0,0,13420,13419,1,0,0,0,13420,13421,1,0,0,0,13421,
        13422,1,0,0,0,13422,13423,5,2137,0,0,13423,13424,5,1996,0,0,13424,
        13425,3,880,440,0,13425,13426,5,335,0,0,13426,13431,3,926,463,0,
        13427,13428,5,2353,0,0,13428,13430,3,926,463,0,13429,13427,1,0,0,
        0,13430,13433,1,0,0,0,13431,13429,1,0,0,0,13431,13432,1,0,0,0,13432,
        13436,1,0,0,0,13433,13431,1,0,0,0,13434,13436,3,1454,727,0,13435,
        13397,1,0,0,0,13435,13402,1,0,0,0,13435,13404,1,0,0,0,13435,13407,
        1,0,0,0,13435,13412,1,0,0,0,13435,13416,1,0,0,0,13435,13417,1,0,
        0,0,13435,13418,1,0,0,0,13435,13420,1,0,0,0,13435,13434,1,0,0,0,
        13436,13437,1,0,0,0,13437,13435,1,0,0,0,13437,13438,1,0,0,0,13438,
        1447,1,0,0,0,13439,13440,5,830,0,0,13440,13445,3,1450,725,0,13441,
        13442,5,2353,0,0,13442,13444,3,1450,725,0,13443,13441,1,0,0,0,13444,
        13447,1,0,0,0,13445,13443,1,0,0,0,13445,13446,1,0,0,0,13446,13455,
        1,0,0,0,13447,13445,1,0,0,0,13448,13449,7,154,0,0,13449,13455,5,
        2341,0,0,13450,13455,5,65,0,0,13451,13455,5,1003,0,0,13452,13453,
        5,576,0,0,13453,13455,5,832,0,0,13454,13439,1,0,0,0,13454,13448,
        1,0,0,0,13454,13450,1,0,0,0,13454,13451,1,0,0,0,13454,13452,1,0,
        0,0,13455,1449,1,0,0,0,13456,13457,5,609,0,0,13457,13459,5,2341,
        0,0,13458,13456,1,0,0,0,13458,13459,1,0,0,0,13459,13460,1,0,0,0,
        13460,13461,3,444,222,0,13461,1451,1,0,0,0,13462,13463,5,521,0,0,
        13463,13464,5,853,0,0,13464,13481,5,821,0,0,13465,13467,5,1716,0,
        0,13466,13465,1,0,0,0,13466,13467,1,0,0,0,13467,13468,1,0,0,0,13468,
        13469,5,335,0,0,13469,13474,3,444,222,0,13470,13471,5,2353,0,0,13471,
        13473,3,444,222,0,13472,13470,1,0,0,0,13473,13476,1,0,0,0,13474,
        13472,1,0,0,0,13474,13475,1,0,0,0,13475,13481,1,0,0,0,13476,13474,
        1,0,0,0,13477,13481,3,1464,732,0,13478,13481,3,1466,733,0,13479,
        13481,3,1468,734,0,13480,13462,1,0,0,0,13480,13466,1,0,0,0,13480,
        13477,1,0,0,0,13480,13478,1,0,0,0,13480,13479,1,0,0,0,13481,1453,
        1,0,0,0,13482,13483,5,467,0,0,13483,13484,5,1336,0,0,13484,13497,
        5,333,0,0,13485,13487,5,1564,0,0,13486,13488,3,1456,728,0,13487,
        13486,1,0,0,0,13487,13488,1,0,0,0,13488,13491,1,0,0,0,13489,13490,
        5,1865,0,0,13490,13492,3,1460,730,0,13491,13489,1,0,0,0,13491,13492,
        1,0,0,0,13492,13495,1,0,0,0,13493,13494,5,1716,0,0,13494,13496,3,
        1460,730,0,13495,13493,1,0,0,0,13495,13496,1,0,0,0,13496,13498,1,
        0,0,0,13497,13485,1,0,0,0,13497,13498,1,0,0,0,13498,13500,1,0,0,
        0,13499,13501,3,1462,731,0,13500,13499,1,0,0,0,13500,13501,1,0,0,
        0,13501,1455,1,0,0,0,13502,13503,5,551,0,0,13503,13516,5,2369,0,
        0,13504,13505,5,2347,0,0,13505,13510,3,1458,729,0,13506,13507,5,
        2353,0,0,13507,13509,3,1458,729,0,13508,13506,1,0,0,0,13509,13512,
        1,0,0,0,13510,13508,1,0,0,0,13510,13511,1,0,0,0,13511,13513,1,0,
        0,0,13512,13510,1,0,0,0,13513,13514,5,2348,0,0,13514,13517,1,0,0,
        0,13515,13517,5,1071,0,0,13516,13504,1,0,0,0,13516,13515,1,0,0,0,
        13517,1457,1,0,0,0,13518,13521,5,2343,0,0,13519,13520,5,2353,0,0,
        13520,13522,5,2343,0,0,13521,13519,1,0,0,0,13521,13522,1,0,0,0,13522,
        1459,1,0,0,0,13523,13527,5,336,0,0,13524,13525,5,1617,0,0,13525,
        13528,3,1182,591,0,13526,13528,3,930,465,0,13527,13524,1,0,0,0,13527,
        13526,1,0,0,0,13528,13529,1,0,0,0,13529,13527,1,0,0,0,13529,13530,
        1,0,0,0,13530,1461,1,0,0,0,13531,13532,5,821,0,0,13532,13533,5,2087,
        0,0,13533,13534,7,96,0,0,13534,1463,1,0,0,0,13535,13536,5,368,0,
        0,13536,13537,5,1996,0,0,13537,13540,3,1614,807,0,13538,13539,5,
        335,0,0,13539,13541,3,926,463,0,13540,13538,1,0,0,0,13540,13541,
        1,0,0,0,13541,13543,1,0,0,0,13542,13544,3,896,448,0,13543,13542,
        1,0,0,0,13543,13544,1,0,0,0,13544,1465,1,0,0,0,13545,13547,7,97,
        0,0,13546,13545,1,0,0,0,13546,13547,1,0,0,0,13547,13548,1,0,0,0,
        13548,13556,5,368,0,0,13549,13550,5,2007,0,0,13550,13557,5,1996,
        0,0,13551,13552,5,821,0,0,13552,13553,5,2007,0,0,13553,13554,5,1996,
        0,0,13554,13555,5,580,0,0,13555,13557,7,155,0,0,13556,13549,1,0,
        0,0,13556,13551,1,0,0,0,13557,13558,1,0,0,0,13558,13568,3,1614,807,
        0,13559,13560,5,2005,0,0,13560,13565,3,444,222,0,13561,13562,5,2353,
        0,0,13562,13564,3,444,222,0,13563,13561,1,0,0,0,13564,13567,1,0,
        0,0,13565,13563,1,0,0,0,13565,13566,1,0,0,0,13566,13569,1,0,0,0,
        13567,13565,1,0,0,0,13568,13559,1,0,0,0,13568,13569,1,0,0,0,13569,
        13571,1,0,0,0,13570,13572,3,896,448,0,13571,13570,1,0,0,0,13571,
        13572,1,0,0,0,13572,1467,1,0,0,0,13573,13575,7,97,0,0,13574,13573,
        1,0,0,0,13574,13575,1,0,0,0,13575,13576,1,0,0,0,13576,13577,5,2087,
        0,0,13577,13578,5,1996,0,0,13578,13588,3,1614,807,0,13579,13580,
        5,335,0,0,13580,13585,3,444,222,0,13581,13582,5,2353,0,0,13582,13584,
        3,444,222,0,13583,13581,1,0,0,0,13584,13587,1,0,0,0,13585,13583,
        1,0,0,0,13585,13586,1,0,0,0,13586,13589,1,0,0,0,13587,13585,1,0,
        0,0,13588,13579,1,0,0,0,13588,13589,1,0,0,0,13589,1469,1,0,0,0,13590,
        13591,5,438,0,0,13591,13594,5,333,0,0,13592,13593,5,663,0,0,13593,
        13595,5,101,0,0,13594,13592,1,0,0,0,13594,13595,1,0,0,0,13595,13597,
        1,0,0,0,13596,13598,5,1094,0,0,13597,13596,1,0,0,0,13597,13598,1,
        0,0,0,13598,1471,1,0,0,0,13599,13601,5,305,0,0,13600,13602,5,1597,
        0,0,13601,13600,1,0,0,0,13601,13602,1,0,0,0,13602,13604,1,0,0,0,
        13603,13605,5,1398,0,0,13604,13603,1,0,0,0,13604,13605,1,0,0,0,13605,
        13606,1,0,0,0,13606,13607,5,333,0,0,13607,13608,5,812,0,0,13608,
        13624,3,2294,1147,0,13609,13610,5,265,0,0,13610,13619,5,2052,0,0,
        13611,13620,5,324,0,0,13612,13613,3,2314,1157,0,13613,13614,5,644,
        0,0,13614,13615,5,154,0,0,13615,13617,3,1442,721,0,13616,13618,3,
        1444,722,0,13617,13616,1,0,0,0,13617,13618,1,0,0,0,13618,13620,1,
        0,0,0,13619,13611,1,0,0,0,13619,13612,1,0,0,0,13620,13623,1,0,0,
        0,13621,13623,3,1444,722,0,13622,13609,1,0,0,0,13622,13621,1,0,0,
        0,13623,13626,1,0,0,0,13624,13622,1,0,0,0,13624,13625,1,0,0,0,13625,
        13629,1,0,0,0,13626,13624,1,0,0,0,13627,13628,5,2153,0,0,13628,13630,
        5,2343,0,0,13629,13627,1,0,0,0,13629,13630,1,0,0,0,13630,1473,1,
        0,0,0,13631,13633,5,438,0,0,13632,13634,5,1398,0,0,13633,13632,1,
        0,0,0,13633,13634,1,0,0,0,13634,13635,1,0,0,0,13635,13636,5,333,
        0,0,13636,13637,5,812,0,0,13637,13638,3,2294,1147,0,13638,1475,1,
        0,0,0,13639,13640,5,42,0,0,13640,13641,5,1996,0,0,13641,13642,5,
        1590,0,0,13642,13643,3,2364,1182,0,13643,13644,3,1478,739,0,13644,
        1477,1,0,0,0,13645,13673,3,912,456,0,13646,13647,5,900,0,0,13647,
        13648,5,521,0,0,13648,13673,3,1182,591,0,13649,13650,5,1489,0,0,
        13650,13673,3,1182,591,0,13651,13673,5,218,0,0,13652,13653,5,1602,
        0,0,13653,13656,5,1631,0,0,13654,13655,5,768,0,0,13655,13657,3,1182,
        591,0,13656,13654,1,0,0,0,13656,13657,1,0,0,0,13657,13673,1,0,0,
        0,13658,13659,5,1481,0,0,13659,13660,5,2052,0,0,13660,13673,3,2364,
        1182,0,13661,13662,7,141,0,0,13662,13673,5,100,0,0,13663,13673,3,
        874,437,0,13664,13673,3,876,438,0,13665,13673,3,878,439,0,13666,
        13673,3,882,441,0,13667,13673,3,930,465,0,13668,13673,3,884,442,
        0,13669,13673,3,904,452,0,13670,13673,3,1480,740,0,13671,13673,3,
        1428,714,0,13672,13645,1,0,0,0,13672,13646,1,0,0,0,13672,13649,1,
        0,0,0,13672,13651,1,0,0,0,13672,13652,1,0,0,0,13672,13658,1,0,0,
        0,13672,13661,1,0,0,0,13672,13663,1,0,0,0,13672,13664,1,0,0,0,13672,
        13665,1,0,0,0,13672,13666,1,0,0,0,13672,13667,1,0,0,0,13672,13668,
        1,0,0,0,13672,13669,1,0,0,0,13672,13670,1,0,0,0,13672,13671,1,0,
        0,0,13673,1479,1,0,0,0,13674,13699,5,472,0,0,13675,13681,5,1177,
        0,0,13676,13678,3,892,446,0,13677,13676,1,0,0,0,13677,13678,1,0,
        0,0,13678,13679,1,0,0,0,13679,13682,5,471,0,0,13680,13682,5,366,
        0,0,13681,13677,1,0,0,0,13681,13680,1,0,0,0,13682,13700,1,0,0,0,
        13683,13689,5,1190,0,0,13684,13686,3,892,446,0,13685,13684,1,0,0,
        0,13685,13686,1,0,0,0,13686,13687,1,0,0,0,13687,13690,7,156,0,0,
        13688,13690,5,366,0,0,13689,13685,1,0,0,0,13689,13688,1,0,0,0,13690,
        13692,1,0,0,0,13691,13693,3,1482,741,0,13692,13691,1,0,0,0,13692,
        13693,1,0,0,0,13693,13700,1,0,0,0,13694,13695,5,558,0,0,13695,13697,
        7,157,0,0,13696,13698,3,1482,741,0,13697,13696,1,0,0,0,13697,13698,
        1,0,0,0,13698,13700,1,0,0,0,13699,13675,1,0,0,0,13699,13683,1,0,
        0,0,13699,13694,1,0,0,0,13700,1481,1,0,0,0,13701,13702,5,551,0,0,
        13702,13703,5,2369,0,0,13703,13704,5,2347,0,0,13704,13705,5,2343,
        0,0,13705,13706,5,2353,0,0,13706,13713,5,2343,0,0,13707,13708,5,
        2353,0,0,13708,13709,5,2343,0,0,13709,13710,5,2353,0,0,13710,13712,
        5,2343,0,0,13711,13707,1,0,0,0,13712,13715,1,0,0,0,13713,13711,1,
        0,0,0,13713,13714,1,0,0,0,13714,13716,1,0,0,0,13715,13713,1,0,0,
        0,13716,13718,5,2348,0,0,13717,13719,5,768,0,0,13718,13717,1,0,0,
        0,13718,13719,1,0,0,0,13719,1483,1,0,0,0,13720,13721,5,42,0,0,13721,
        13722,5,1515,0,0,13722,13723,3,2266,1133,0,13723,13725,3,1486,743,
        0,13724,13726,3,774,387,0,13725,13724,1,0,0,0,13725,13726,1,0,0,
        0,13726,1485,1,0,0,0,13727,13728,5,1138,0,0,13728,13747,5,644,0,
        0,13729,13744,5,644,0,0,13730,13731,5,154,0,0,13731,13745,3,2362,
        1181,0,13732,13733,5,2153,0,0,13733,13736,3,2362,1181,0,13734,13735,
        5,2340,0,0,13735,13737,3,2364,1182,0,13736,13734,1,0,0,0,13736,13737,
        1,0,0,0,13737,13745,1,0,0,0,13738,13745,5,524,0,0,13739,13742,5,
        603,0,0,13740,13741,5,67,0,0,13741,13743,5,2343,0,0,13742,13740,
        1,0,0,0,13742,13743,1,0,0,0,13743,13745,1,0,0,0,13744,13730,1,0,
        0,0,13744,13732,1,0,0,0,13744,13738,1,0,0,0,13744,13739,1,0,0,0,
        13745,13747,1,0,0,0,13746,13727,1,0,0,0,13746,13729,1,0,0,0,13747,
        1487,1,0,0,0,13748,13749,5,42,0,0,13749,13750,5,1999,0,0,13750,13754,
        3,2302,1151,0,13751,13753,3,1490,745,0,13752,13751,1,0,0,0,13753,
        13756,1,0,0,0,13754,13752,1,0,0,0,13754,13755,1,0,0,0,13755,13763,
        1,0,0,0,13756,13754,1,0,0,0,13757,13764,1,0,0,0,13758,13764,3,1492,
        746,0,13759,13764,3,1660,830,0,13760,13764,3,1560,780,0,13761,13764,
        3,1494,747,0,13762,13764,3,1550,775,0,13763,13757,1,0,0,0,13763,
        13758,1,0,0,0,13763,13759,1,0,0,0,13763,13760,1,0,0,0,13763,13761,
        1,0,0,0,13763,13762,1,0,0,0,13764,13777,1,0,0,0,13765,13774,3,1540,
        770,0,13766,13771,3,1272,636,0,13767,13768,5,1999,0,0,13768,13772,
        5,829,0,0,13769,13770,5,38,0,0,13770,13772,5,2066,0,0,13771,13767,
        1,0,0,0,13771,13769,1,0,0,0,13772,13774,1,0,0,0,13773,13765,1,0,
        0,0,13773,13766,1,0,0,0,13774,13775,1,0,0,0,13775,13773,1,0,0,0,
        13775,13776,1,0,0,0,13776,13778,1,0,0,0,13777,13773,1,0,0,0,13777,
        13778,1,0,0,0,13778,1489,1,0,0,0,13779,13781,5,1074,0,0,13780,13779,
        1,0,0,0,13780,13781,1,0,0,0,13781,13782,1,0,0,0,13782,13783,5,2308,
        0,0,13783,13784,5,580,0,0,13784,13785,7,158,0,0,13785,1491,1,0,0,
        0,13786,13798,3,1518,759,0,13787,13788,5,1481,0,0,13788,13789,5,
        2052,0,0,13789,13798,3,2302,1151,0,13790,13798,3,1252,626,0,13791,
        13792,5,1429,0,0,13792,13798,5,1192,0,0,13793,13794,5,1429,0,0,13794,
        13798,5,2216,0,0,13795,13796,5,1472,0,0,13796,13798,5,2343,0,0,13797,
        13786,1,0,0,0,13797,13787,1,0,0,0,13797,13790,1,0,0,0,13797,13791,
        1,0,0,0,13797,13793,1,0,0,0,13797,13795,1,0,0,0,13798,1493,1,0,0,
        0,13799,13809,3,1496,748,0,13800,13809,3,1498,749,0,13801,13809,
        3,1500,750,0,13802,13809,3,1502,751,0,13803,13809,3,1504,752,0,13804,
        13809,3,1506,753,0,13805,13809,3,1508,754,0,13806,13809,3,1510,755,
        0,13807,13809,3,1512,756,0,13808,13799,1,0,0,0,13808,13800,1,0,0,
        0,13808,13801,1,0,0,0,13808,13802,1,0,0,0,13808,13803,1,0,0,0,13808,
        13804,1,0,0,0,13808,13805,1,0,0,0,13808,13806,1,0,0,0,13808,13807,
        1,0,0,0,13809,1495,1,0,0,0,13810,13827,5,21,0,0,13811,13828,3,1144,
        572,0,13812,13828,3,1146,573,0,13813,13815,5,1275,0,0,13814,13816,
        3,1652,826,0,13815,13814,1,0,0,0,13815,13816,1,0,0,0,13816,13819,
        1,0,0,0,13817,13818,5,1996,0,0,13818,13820,3,1614,807,0,13819,13817,
        1,0,0,0,13819,13820,1,0,0,0,13820,13822,1,0,0,0,13821,13823,3,1556,
        778,0,13822,13821,1,0,0,0,13822,13823,1,0,0,0,13823,13825,1,0,0,
        0,13824,13826,5,2110,0,0,13825,13824,1,0,0,0,13825,13826,1,0,0,0,
        13826,13828,1,0,0,0,13827,13811,1,0,0,0,13827,13812,1,0,0,0,13827,
        13813,1,0,0,0,13828,1497,1,0,0,0,13829,13832,5,438,0,0,13830,13833,
        3,1514,757,0,13831,13833,3,1516,758,0,13832,13830,1,0,0,0,13832,
        13831,1,0,0,0,13833,13838,1,0,0,0,13834,13836,3,1528,764,0,13835,
        13837,3,936,468,0,13836,13835,1,0,0,0,13836,13837,1,0,0,0,13837,
        13839,1,0,0,0,13838,13834,1,0,0,0,13838,13839,1,0,0,0,13839,1499,
        1,0,0,0,13840,13841,5,892,0,0,13841,13842,5,1275,0,0,13842,13843,
        3,1652,826,0,13843,13844,5,49,0,0,13844,13845,3,1652,826,0,13845,
        13846,5,735,0,0,13846,13847,5,1275,0,0,13847,13848,3,1652,826,0,
        13848,1501,1,0,0,0,13849,13872,5,926,0,0,13850,13851,5,1275,0,0,
        13851,13854,3,1652,826,0,13852,13853,7,9,0,0,13853,13855,3,1172,
        586,0,13854,13852,1,0,0,0,13854,13855,1,0,0,0,13855,13858,1,0,0,
        0,13856,13857,5,21,0,0,13857,13859,3,1160,580,0,13858,13856,1,0,
        0,0,13858,13859,1,0,0,0,13859,13866,1,0,0,0,13860,13862,5,1434,0,
        0,13861,13860,1,0,0,0,13861,13862,1,0,0,0,13862,13863,1,0,0,0,13863,
        13864,5,2110,0,0,13864,13865,5,821,0,0,13865,13867,5,672,0,0,13866,
        13861,1,0,0,0,13866,13867,1,0,0,0,13867,13869,1,0,0,0,13868,13870,
        3,1252,626,0,13869,13868,1,0,0,0,13869,13870,1,0,0,0,13870,13873,
        1,0,0,0,13871,13873,3,1120,560,0,13872,13850,1,0,0,0,13872,13871,
        1,0,0,0,13873,1503,1,0,0,0,13874,13875,5,1634,0,0,13875,13921,3,
        1514,757,0,13876,13877,5,80,0,0,13877,13878,5,2347,0,0,13878,13883,
        3,2150,1075,0,13879,13880,5,2353,0,0,13880,13882,3,2150,1075,0,13881,
        13879,1,0,0,0,13882,13885,1,0,0,0,13883,13881,1,0,0,0,13883,13884,
        1,0,0,0,13884,13886,1,0,0,0,13885,13883,1,0,0,0,13886,13887,5,2348,
        0,0,13887,13888,5,735,0,0,13888,13889,5,2347,0,0,13889,13894,3,1144,
        572,0,13890,13891,5,2353,0,0,13891,13893,3,1144,572,0,13892,13890,
        1,0,0,0,13893,13896,1,0,0,0,13894,13892,1,0,0,0,13894,13895,1,0,
        0,0,13895,13897,1,0,0,0,13896,13894,1,0,0,0,13897,13898,5,2348,0,
        0,13898,13922,1,0,0,0,13899,13900,5,735,0,0,13900,13917,5,2347,0,
        0,13901,13906,3,1144,572,0,13902,13903,5,2353,0,0,13903,13905,3,
        1144,572,0,13904,13902,1,0,0,0,13905,13908,1,0,0,0,13906,13904,1,
        0,0,0,13906,13907,1,0,0,0,13907,13918,1,0,0,0,13908,13906,1,0,0,
        0,13909,13914,3,1146,573,0,13910,13911,5,2353,0,0,13911,13913,3,
        1146,573,0,13912,13910,1,0,0,0,13913,13916,1,0,0,0,13914,13912,1,
        0,0,0,13914,13915,1,0,0,0,13915,13918,1,0,0,0,13916,13914,1,0,0,
        0,13917,13901,1,0,0,0,13917,13909,1,0,0,0,13918,13919,1,0,0,0,13919,
        13920,5,2348,0,0,13920,13922,1,0,0,0,13921,13876,1,0,0,0,13921,13899,
        1,0,0,0,13922,13925,1,0,0,0,13923,13926,3,1530,765,0,13924,13926,
        3,1528,764,0,13925,13923,1,0,0,0,13925,13924,1,0,0,0,13925,13926,
        1,0,0,0,13926,1505,1,0,0,0,13927,13930,5,2069,0,0,13928,13931,3,
        1514,757,0,13929,13931,3,1516,758,0,13930,13928,1,0,0,0,13930,13929,
        1,0,0,0,13931,13940,1,0,0,0,13932,13934,5,438,0,0,13933,13935,5,
        38,0,0,13934,13933,1,0,0,0,13934,13935,1,0,0,0,13935,13938,1,0,0,
        0,13936,13938,5,1509,0,0,13937,13932,1,0,0,0,13937,13936,1,0,0,0,
        13937,13938,1,0,0,0,13938,13939,1,0,0,0,13939,13941,5,1678,0,0,13940,
        13937,1,0,0,0,13940,13941,1,0,0,0,13941,13943,1,0,0,0,13942,13944,
        5,171,0,0,13943,13942,1,0,0,0,13943,13944,1,0,0,0,13944,13949,1,
        0,0,0,13945,13947,3,1528,764,0,13946,13948,3,936,468,0,13947,13946,
        1,0,0,0,13947,13948,1,0,0,0,13948,13950,1,0,0,0,13949,13945,1,0,
        0,0,13949,13950,1,0,0,0,13950,1507,1,0,0,0,13951,13952,5,501,0,0,
        13952,13953,5,1275,0,0,13953,13954,3,1652,826,0,13954,13955,5,2212,
        0,0,13955,13956,5,1999,0,0,13956,13959,3,2302,1151,0,13957,13958,
        7,105,0,0,13958,13960,5,672,0,0,13959,13957,1,0,0,0,13959,13960,
        1,0,0,0,13960,13963,1,0,0,0,13961,13962,7,2,0,0,13962,13964,5,2162,
        0,0,13963,13961,1,0,0,0,13963,13964,1,0,0,0,13964,1509,1,0,0,0,13965,
        13966,5,218,0,0,13966,13968,5,1275,0,0,13967,13969,3,936,468,0,13968,
        13967,1,0,0,0,13968,13969,1,0,0,0,13969,13973,1,0,0,0,13970,13971,
        3,1274,637,0,13971,13972,5,214,0,0,13972,13974,1,0,0,0,13973,13970,
        1,0,0,0,13973,13974,1,0,0,0,13974,1511,1,0,0,0,13975,13976,5,1590,
        0,0,13976,13977,5,733,0,0,13977,13980,5,2347,0,0,13978,13981,3,2354,
        1177,0,13979,13981,3,2052,1026,0,13980,13978,1,0,0,0,13980,13979,
        1,0,0,0,13980,13981,1,0,0,0,13981,13982,1,0,0,0,13982,13983,5,2348,
        0,0,13983,1513,1,0,0,0,13984,14019,7,159,0,0,13985,13990,3,1652,
        826,0,13986,13987,5,2353,0,0,13987,13989,3,1652,826,0,13988,13986,
        1,0,0,0,13989,13992,1,0,0,0,13990,13988,1,0,0,0,13990,13991,1,0,
        0,0,13991,14020,1,0,0,0,13992,13990,1,0,0,0,13993,13994,5,2347,0,
        0,13994,13999,3,1652,826,0,13995,13996,5,2353,0,0,13996,13998,3,
        1652,826,0,13997,13995,1,0,0,0,13998,14001,1,0,0,0,13999,13997,1,
        0,0,0,13999,14000,1,0,0,0,14000,14002,1,0,0,0,14001,13999,1,0,0,
        0,14002,14003,5,2348,0,0,14003,14020,1,0,0,0,14004,14006,5,580,0,
        0,14005,14007,5,2347,0,0,14006,14005,1,0,0,0,14006,14007,1,0,0,0,
        14007,14008,1,0,0,0,14008,14013,3,694,347,0,14009,14010,5,2353,0,
        0,14010,14012,3,694,347,0,14011,14009,1,0,0,0,14012,14015,1,0,0,
        0,14013,14011,1,0,0,0,14013,14014,1,0,0,0,14014,14017,1,0,0,0,14015,
        14013,1,0,0,0,14016,14018,5,2348,0,0,14017,14016,1,0,0,0,14017,14018,
        1,0,0,0,14018,14020,1,0,0,0,14019,13985,1,0,0,0,14019,13993,1,0,
        0,0,14019,14004,1,0,0,0,14020,1515,1,0,0,0,14021,14053,7,160,0,0,
        14022,14025,3,1652,826,0,14023,14024,5,2114,0,0,14024,14026,5,672,
        0,0,14025,14023,1,0,0,0,14025,14026,1,0,0,0,14026,14054,1,0,0,0,
        14027,14028,5,2347,0,0,14028,14033,3,1652,826,0,14029,14030,5,2353,
        0,0,14030,14032,3,1652,826,0,14031,14029,1,0,0,0,14032,14035,1,0,
        0,0,14033,14031,1,0,0,0,14033,14034,1,0,0,0,14034,14036,1,0,0,0,
        14035,14033,1,0,0,0,14036,14037,5,2348,0,0,14037,14054,1,0,0,0,14038,
        14040,5,580,0,0,14039,14041,5,2347,0,0,14040,14039,1,0,0,0,14040,
        14041,1,0,0,0,14041,14042,1,0,0,0,14042,14047,3,696,348,0,14043,
        14044,5,2353,0,0,14044,14046,3,696,348,0,14045,14043,1,0,0,0,14046,
        14049,1,0,0,0,14047,14045,1,0,0,0,14047,14048,1,0,0,0,14048,14051,
        1,0,0,0,14049,14047,1,0,0,0,14050,14052,5,2348,0,0,14051,14050,1,
        0,0,0,14051,14052,1,0,0,0,14052,14054,1,0,0,0,14053,14022,1,0,0,
        0,14053,14027,1,0,0,0,14053,14038,1,0,0,0,14054,1517,1,0,0,0,14055,
        14074,3,1200,600,0,14056,14074,3,894,447,0,14057,14074,3,1184,592,
        0,14058,14074,3,1186,593,0,14059,14074,3,1242,621,0,14060,14074,
        3,1248,624,0,14061,14074,3,1250,625,0,14062,14074,7,106,0,0,14063,
        14064,5,1501,0,0,14064,14065,5,2347,0,0,14065,14066,5,923,0,0,14066,
        14067,7,24,0,0,14067,14074,5,2348,0,0,14068,14074,3,1256,628,0,14069,
        14074,3,1254,627,0,14070,14074,3,936,468,0,14071,14074,3,1236,618,
        0,14072,14074,3,1238,619,0,14073,14055,1,0,0,0,14073,14056,1,0,0,
        0,14073,14057,1,0,0,0,14073,14058,1,0,0,0,14073,14059,1,0,0,0,14073,
        14060,1,0,0,0,14073,14061,1,0,0,0,14073,14062,1,0,0,0,14073,14063,
        1,0,0,0,14073,14068,1,0,0,0,14073,14069,1,0,0,0,14073,14070,1,0,
        0,0,14073,14071,1,0,0,0,14073,14072,1,0,0,0,14074,14075,1,0,0,0,
        14075,14073,1,0,0,0,14075,14076,1,0,0,0,14076,14078,1,0,0,0,14077,
        14079,3,1520,760,0,14078,14077,1,0,0,0,14078,14079,1,0,0,0,14079,
        1519,1,0,0,0,14080,14085,3,1552,776,0,14081,14085,3,1524,762,0,14082,
        14085,3,1522,761,0,14083,14085,5,218,0,0,14084,14080,1,0,0,0,14084,
        14081,1,0,0,0,14084,14082,1,0,0,0,14084,14083,1,0,0,0,14085,1521,
        1,0,0,0,14086,14087,5,858,0,0,14087,14090,5,1999,0,0,14088,14091,
        3,1248,624,0,14089,14091,3,1250,625,0,14090,14088,1,0,0,0,14090,
        14089,1,0,0,0,14091,1523,1,0,0,0,14092,14103,3,1526,763,0,14093,
        14098,5,1249,0,0,14094,14099,3,1206,603,0,14095,14099,3,1248,624,
        0,14096,14099,3,1252,626,0,14097,14099,3,1250,625,0,14098,14094,
        1,0,0,0,14098,14095,1,0,0,0,14098,14096,1,0,0,0,14098,14097,1,0,
        0,0,14099,14100,1,0,0,0,14100,14098,1,0,0,0,14100,14101,1,0,0,0,
        14101,14103,1,0,0,0,14102,14092,1,0,0,0,14102,14093,1,0,0,0,14103,
        1525,1,0,0,0,14104,14105,5,21,0,0,14105,14107,5,1249,0,0,14106,14108,
        3,1206,603,0,14107,14106,1,0,0,0,14107,14108,1,0,0,0,14108,14125,
        1,0,0,0,14109,14110,5,2347,0,0,14110,14112,5,1275,0,0,14111,14113,
        3,1206,603,0,14112,14111,1,0,0,0,14112,14113,1,0,0,0,14113,14121,
        1,0,0,0,14114,14115,5,2353,0,0,14115,14117,5,1275,0,0,14116,14118,
        3,1206,603,0,14117,14116,1,0,0,0,14117,14118,1,0,0,0,14118,14120,
        1,0,0,0,14119,14114,1,0,0,0,14120,14123,1,0,0,0,14121,14119,1,0,
        0,0,14121,14122,1,0,0,0,14122,14124,1,0,0,0,14123,14121,1,0,0,0,
        14124,14126,5,2348,0,0,14125,14109,1,0,0,0,14125,14126,1,0,0,0,14126,
        1527,1,0,0,0,14127,14130,3,1530,765,0,14128,14130,3,1532,766,0,14129,
        14127,1,0,0,0,14129,14128,1,0,0,0,14130,1529,1,0,0,0,14131,14132,
        7,161,0,0,14132,14133,5,602,0,0,14133,14134,5,672,0,0,14134,1531,
        1,0,0,0,14135,14136,5,2114,0,0,14136,14141,5,672,0,0,14137,14138,
        5,2347,0,0,14138,14139,3,1534,767,0,14139,14140,5,2348,0,0,14140,
        14142,1,0,0,0,14141,14137,1,0,0,0,14141,14142,1,0,0,0,14142,1533,
        1,0,0,0,14143,14144,3,2286,1143,0,14144,14147,5,2347,0,0,14145,14148,
        3,1536,768,0,14146,14148,3,1538,769,0,14147,14145,1,0,0,0,14147,
        14146,1,0,0,0,14148,14149,1,0,0,0,14149,14154,5,2348,0,0,14150,14151,
        5,2353,0,0,14151,14153,3,1532,766,0,14152,14150,1,0,0,0,14153,14156,
        1,0,0,0,14154,14152,1,0,0,0,14154,14155,1,0,0,0,14155,1535,1,0,0,
        0,14156,14154,1,0,0,0,14157,14159,3,552,276,0,14158,14160,3,514,
        257,0,14159,14158,1,0,0,0,14159,14160,1,0,0,0,14160,14165,1,0,0,
        0,14161,14162,5,2353,0,0,14162,14164,3,1536,768,0,14163,14161,1,
        0,0,0,14164,14167,1,0,0,0,14165,14163,1,0,0,0,14165,14166,1,0,0,
        0,14166,1537,1,0,0,0,14167,14165,1,0,0,0,14168,14170,5,1691,0,0,
        14169,14171,3,1158,579,0,14170,14169,1,0,0,0,14170,14171,1,0,0,0,
        14171,14174,1,0,0,0,14172,14173,5,1996,0,0,14173,14175,3,1614,807,
        0,14174,14172,1,0,0,0,14174,14175,1,0,0,0,14175,14180,1,0,0,0,14176,
        14177,5,2353,0,0,14177,14179,3,1538,769,0,14178,14176,1,0,0,0,14179,
        14182,1,0,0,0,14180,14178,1,0,0,0,14180,14181,1,0,0,0,14181,1539,
        1,0,0,0,14182,14180,1,0,0,0,14183,14185,7,17,0,0,14184,14186,7,92,
        0,0,14185,14184,1,0,0,0,14185,14186,1,0,0,0,14186,14203,1,0,0,0,
        14187,14188,5,2091,0,0,14188,14189,5,2347,0,0,14189,14194,3,2300,
        1150,0,14190,14191,5,2353,0,0,14191,14193,3,2300,1150,0,14192,14190,
        1,0,0,0,14193,14196,1,0,0,0,14194,14192,1,0,0,0,14194,14195,1,0,
        0,0,14195,14197,1,0,0,0,14196,14194,1,0,0,0,14197,14198,5,2348,0,
        0,14198,14204,1,0,0,0,14199,14200,5,1376,0,0,14200,14204,5,770,0,
        0,14201,14202,5,271,0,0,14202,14204,3,2268,1134,0,14203,14187,1,
        0,0,0,14203,14199,1,0,0,0,14203,14201,1,0,0,0,14204,14206,1,0,0,
        0,14205,14207,3,1542,771,0,14206,14205,1,0,0,0,14206,14207,1,0,0,
        0,14207,14209,1,0,0,0,14208,14210,3,1548,774,0,14209,14208,1,0,0,
        0,14209,14210,1,0,0,0,14210,14212,1,0,0,0,14211,14213,5,171,0,0,
        14212,14211,1,0,0,0,14212,14213,1,0,0,0,14213,14216,1,0,0,0,14214,
        14215,7,134,0,0,14215,14217,5,675,0,0,14216,14214,1,0,0,0,14216,
        14217,1,0,0,0,14217,1541,1,0,0,0,14218,14219,5,2153,0,0,14219,14226,
        5,675,0,0,14220,14227,3,2286,1143,0,14221,14222,5,2347,0,0,14222,
        14223,3,470,235,0,14223,14224,5,2348,0,0,14224,14227,1,0,0,0,14225,
        14227,3,1544,772,0,14226,14220,1,0,0,0,14226,14221,1,0,0,0,14226,
        14225,1,0,0,0,14226,14227,1,0,0,0,14227,1543,1,0,0,0,14228,14241,
        3,1200,600,0,14229,14241,3,894,447,0,14230,14233,5,1996,0,0,14231,
        14234,3,1614,807,0,14232,14234,5,368,0,0,14233,14231,1,0,0,0,14233,
        14232,1,0,0,0,14234,14241,1,0,0,0,14235,14241,3,1556,778,0,14236,
        14241,3,1546,773,0,14237,14241,5,1510,0,0,14238,14241,3,528,264,
        0,14239,14241,3,936,468,0,14240,14228,1,0,0,0,14240,14229,1,0,0,
        0,14240,14230,1,0,0,0,14240,14235,1,0,0,0,14240,14236,1,0,0,0,14240,
        14237,1,0,0,0,14240,14238,1,0,0,0,14240,14239,1,0,0,0,14241,14242,
        1,0,0,0,14242,14240,1,0,0,0,14242,14243,1,0,0,0,14243,1545,1,0,0,
        0,14244,14245,7,162,0,0,14245,1547,1,0,0,0,14246,14247,5,500,0,0,
        14247,14248,5,735,0,0,14248,14249,3,2302,1151,0,14249,1549,1,0,0,
        0,14250,14252,5,938,0,0,14251,14253,5,1190,0,0,14252,14251,1,0,0,
        0,14252,14253,1,0,0,0,14253,14255,1,0,0,0,14254,14256,3,1206,603,
        0,14255,14254,1,0,0,0,14255,14256,1,0,0,0,14256,14258,1,0,0,0,14257,
        14259,3,1184,592,0,14258,14257,1,0,0,0,14258,14259,1,0,0,0,14259,
        14261,1,0,0,0,14260,14262,3,1552,776,0,14261,14260,1,0,0,0,14261,
        14262,1,0,0,0,14262,14267,1,0,0,0,14263,14266,3,1598,799,0,14264,
        14266,3,1588,794,0,14265,14263,1,0,0,0,14265,14264,1,0,0,0,14266,
        14269,1,0,0,0,14267,14265,1,0,0,0,14267,14268,1,0,0,0,14268,14271,
        1,0,0,0,14269,14267,1,0,0,0,14270,14272,3,936,468,0,14271,14270,
        1,0,0,0,14271,14272,1,0,0,0,14272,1551,1,0,0,0,14273,14278,3,1554,
        777,0,14274,14275,5,1298,0,0,14275,14278,5,2341,0,0,14276,14278,
        3,1556,778,0,14277,14273,1,0,0,0,14277,14274,1,0,0,0,14277,14276,
        1,0,0,0,14278,14279,1,0,0,0,14279,14277,1,0,0,0,14279,14280,1,0,
        0,0,14280,14282,1,0,0,0,14281,14283,3,1558,779,0,14282,14281,1,0,
        0,0,14282,14283,1,0,0,0,14283,14286,1,0,0,0,14284,14286,3,1558,779,
        0,14285,14277,1,0,0,0,14285,14284,1,0,0,0,14286,1553,1,0,0,0,14287,
        14288,5,858,0,0,14288,14291,5,1999,0,0,14289,14291,5,1058,0,0,14290,
        14287,1,0,0,0,14290,14289,1,0,0,0,14291,1555,1,0,0,0,14292,14296,
        5,1017,0,0,14293,14294,5,246,0,0,14294,14296,5,2341,0,0,14295,14292,
        1,0,0,0,14295,14293,1,0,0,0,14296,1557,1,0,0,0,14297,14298,5,663,
        0,0,14298,14300,3,2300,1150,0,14299,14297,1,0,0,0,14299,14300,1,
        0,0,0,14300,14301,1,0,0,0,14301,14303,5,1249,0,0,14302,14304,3,1206,
        603,0,14303,14302,1,0,0,0,14303,14304,1,0,0,0,14304,1559,1,0,0,0,
        14305,14310,3,1572,786,0,14306,14310,3,1566,783,0,14307,14310,3,
        1562,781,0,14308,14310,3,1600,800,0,14309,14305,1,0,0,0,14309,14306,
        1,0,0,0,14309,14307,1,0,0,0,14309,14308,1,0,0,0,14310,1561,1,0,0,
        0,14311,14312,5,926,0,0,14312,14313,5,959,0,0,14313,14314,5,1999,
        0,0,14314,14315,3,1564,782,0,14315,14316,5,1508,0,0,14316,14317,
        5,67,0,0,14317,14318,7,163,0,0,14318,1563,1,0,0,0,14319,14320,3,
        2302,1151,0,14320,1565,1,0,0,0,14321,14322,5,1481,0,0,14322,14323,
        5,226,0,0,14323,14324,3,1568,784,0,14324,14325,5,2052,0,0,14325,
        14326,3,1570,785,0,14326,1567,1,0,0,0,14327,14328,3,2300,1150,0,
        14328,1569,1,0,0,0,14329,14330,3,2300,1150,0,14330,1571,1,0,0,0,
        14331,14336,3,1660,830,0,14332,14336,3,1584,792,0,14333,14336,3,
        1576,788,0,14334,14336,3,1574,787,0,14335,14331,1,0,0,0,14335,14332,
        1,0,0,0,14335,14333,1,0,0,0,14335,14334,1,0,0,0,14336,14337,1,0,
        0,0,14337,14335,1,0,0,0,14337,14338,1,0,0,0,14338,1573,1,0,0,0,14339,
        14340,5,1590,0,0,14340,14354,5,2111,0,0,14341,14342,5,226,0,0,14342,
        14355,3,2300,1150,0,14343,14344,5,2347,0,0,14344,14349,3,2300,1150,
        0,14345,14346,5,2353,0,0,14346,14348,3,2300,1150,0,14347,14345,1,
        0,0,0,14348,14351,1,0,0,0,14349,14347,1,0,0,0,14349,14350,1,0,0,
        0,14350,14352,1,0,0,0,14351,14349,1,0,0,0,14352,14353,5,2348,0,0,
        14353,14355,1,0,0,0,14354,14341,1,0,0,0,14354,14343,1,0,0,0,14355,
        14361,1,0,0,0,14356,14357,5,171,0,0,14357,14360,5,272,0,0,14358,
        14360,5,736,0,0,14359,14356,1,0,0,0,14359,14358,1,0,0,0,14360,14363,
        1,0,0,0,14361,14359,1,0,0,0,14361,14362,1,0,0,0,14362,14402,1,0,
        0,0,14363,14361,1,0,0,0,14364,14378,5,438,0,0,14365,14366,5,226,
        0,0,14366,14379,3,2300,1150,0,14367,14368,5,2347,0,0,14368,14373,
        3,2300,1150,0,14369,14370,5,2353,0,0,14370,14372,3,2300,1150,0,14371,
        14369,1,0,0,0,14372,14375,1,0,0,0,14373,14371,1,0,0,0,14373,14374,
        1,0,0,0,14374,14376,1,0,0,0,14375,14373,1,0,0,0,14376,14377,5,2348,
        0,0,14377,14379,1,0,0,0,14378,14365,1,0,0,0,14378,14367,1,0,0,0,
        14379,14385,1,0,0,0,14380,14381,5,171,0,0,14381,14384,5,272,0,0,
        14382,14384,5,736,0,0,14383,14380,1,0,0,0,14383,14382,1,0,0,0,14384,
        14387,1,0,0,0,14385,14383,1,0,0,0,14385,14386,1,0,0,0,14386,14390,
        1,0,0,0,14387,14385,1,0,0,0,14388,14389,5,191,0,0,14389,14391,5,
        2341,0,0,14390,14388,1,0,0,0,14390,14391,1,0,0,0,14391,14402,1,0,
        0,0,14392,14397,5,438,0,0,14393,14394,5,2111,0,0,14394,14398,5,227,
        0,0,14395,14396,5,227,0,0,14396,14398,5,282,0,0,14397,14393,1,0,
        0,0,14397,14395,1,0,0,0,14398,14399,1,0,0,0,14399,14400,5,191,0,
        0,14400,14402,5,2341,0,0,14401,14339,1,0,0,0,14401,14364,1,0,0,0,
        14401,14392,1,0,0,0,14402,1575,1,0,0,0,14403,14429,5,926,0,0,14404,
        14405,5,2347,0,0,14405,14410,3,1578,789,0,14406,14407,5,2353,0,0,
        14407,14409,3,1578,789,0,14408,14406,1,0,0,0,14409,14412,1,0,0,0,
        14410,14408,1,0,0,0,14410,14411,1,0,0,0,14411,14413,1,0,0,0,14412,
        14410,1,0,0,0,14413,14414,5,2348,0,0,14414,14430,1,0,0,0,14415,14416,
        5,2347,0,0,14416,14421,3,1580,790,0,14417,14418,5,2353,0,0,14418,
        14420,3,1580,790,0,14419,14417,1,0,0,0,14420,14423,1,0,0,0,14421,
        14419,1,0,0,0,14421,14422,1,0,0,0,14422,14424,1,0,0,0,14423,14421,
        1,0,0,0,14424,14425,5,2348,0,0,14425,14430,1,0,0,0,14426,14430,3,
        1578,789,0,14427,14430,3,1580,790,0,14428,14430,3,1582,791,0,14429,
        14404,1,0,0,0,14429,14415,1,0,0,0,14429,14426,1,0,0,0,14429,14427,
        1,0,0,0,14429,14428,1,0,0,0,14430,1577,1,0,0,0,14431,14433,3,2300,
        1150,0,14432,14434,3,2336,1168,0,14433,14432,1,0,0,0,14433,14434,
        1,0,0,0,14434,14437,1,0,0,0,14435,14436,5,368,0,0,14436,14438,3,
        2052,1026,0,14437,14435,1,0,0,0,14437,14438,1,0,0,0,14438,14442,
        1,0,0,0,14439,14440,5,471,0,0,14440,14443,3,1612,806,0,14441,14443,
        5,366,0,0,14442,14439,1,0,0,0,14442,14441,1,0,0,0,14442,14443,1,
        0,0,0,14443,14447,1,0,0,0,14444,14446,3,854,427,0,14445,14444,1,
        0,0,0,14446,14449,1,0,0,0,14447,14445,1,0,0,0,14447,14448,1,0,0,
        0,14448,14451,1,0,0,0,14449,14447,1,0,0,0,14450,14452,3,1598,799,
        0,14451,14450,1,0,0,0,14451,14452,1,0,0,0,14452,1579,1,0,0,0,14453,
        14454,3,2300,1150,0,14454,14455,7,67,0,0,14455,1581,1,0,0,0,14456,
        14457,5,226,0,0,14457,14459,3,2300,1150,0,14458,14460,5,1138,0,0,
        14459,14458,1,0,0,0,14459,14460,1,0,0,0,14460,14461,1,0,0,0,14461,
        14462,5,1696,0,0,14462,14463,5,80,0,0,14463,14464,5,38,0,0,14464,
        14466,5,800,0,0,14465,14467,5,576,0,0,14466,14465,1,0,0,0,14466,
        14467,1,0,0,0,14467,1583,1,0,0,0,14468,14490,5,21,0,0,14469,14472,
        5,2347,0,0,14470,14473,3,1628,814,0,14471,14473,3,1638,819,0,14472,
        14470,1,0,0,0,14472,14471,1,0,0,0,14473,14481,1,0,0,0,14474,14477,
        5,2353,0,0,14475,14478,3,1628,814,0,14476,14478,3,1638,819,0,14477,
        14475,1,0,0,0,14477,14476,1,0,0,0,14478,14480,1,0,0,0,14479,14474,
        1,0,0,0,14480,14483,1,0,0,0,14481,14479,1,0,0,0,14481,14482,1,0,
        0,0,14482,14484,1,0,0,0,14483,14481,1,0,0,0,14484,14485,5,2348,0,
        0,14485,14491,1,0,0,0,14486,14489,3,1628,814,0,14487,14489,3,1638,
        819,0,14488,14486,1,0,0,0,14488,14487,1,0,0,0,14489,14491,1,0,0,
        0,14490,14469,1,0,0,0,14490,14488,1,0,0,0,14491,14493,1,0,0,0,14492,
        14494,3,1618,809,0,14493,14492,1,0,0,0,14493,14494,1,0,0,0,14494,
        1585,1,0,0,0,14495,14496,5,926,0,0,14496,14497,5,2171,0,0,14497,
        14498,3,1616,808,0,14498,14499,5,2347,0,0,14499,14500,3,1602,801,
        0,14500,14501,5,2348,0,0,14501,1587,1,0,0,0,14502,14503,5,2171,0,
        0,14503,14509,3,1616,808,0,14504,14506,3,1650,825,0,14505,14504,
        1,0,0,0,14505,14506,1,0,0,0,14506,14507,1,0,0,0,14507,14510,3,1590,
        795,0,14508,14510,3,1650,825,0,14509,14505,1,0,0,0,14509,14508,1,
        0,0,0,14510,1589,1,0,0,0,14511,14512,5,1679,0,0,14512,14514,5,67,
        0,0,14513,14515,7,116,0,0,14514,14513,1,0,0,0,14514,14515,1,0,0,
        0,14515,14516,1,0,0,0,14516,14525,5,817,0,0,14517,14519,3,1592,796,
        0,14518,14517,1,0,0,0,14518,14519,1,0,0,0,14519,14520,1,0,0,0,14520,
        14521,5,2347,0,0,14521,14522,3,1596,798,0,14522,14523,5,2348,0,0,
        14523,14526,1,0,0,0,14524,14526,3,1592,796,0,14525,14518,1,0,0,0,
        14525,14524,1,0,0,0,14526,1591,1,0,0,0,14527,14528,3,2370,1185,0,
        14528,1593,1,0,0,0,14529,14533,3,2370,1185,0,14530,14533,3,2360,
        1180,0,14531,14533,5,2344,0,0,14532,14529,1,0,0,0,14532,14530,1,
        0,0,0,14532,14531,1,0,0,0,14533,1595,1,0,0,0,14534,14535,5,1996,
        0,0,14535,14542,3,2364,1182,0,14536,14538,3,1604,802,0,14537,14539,
        3,1202,601,0,14538,14537,1,0,0,0,14538,14539,1,0,0,0,14539,14542,
        1,0,0,0,14540,14542,3,1202,601,0,14541,14534,1,0,0,0,14541,14536,
        1,0,0,0,14541,14540,1,0,0,0,14542,1597,1,0,0,0,14543,14588,5,817,
        0,0,14544,14545,5,2347,0,0,14545,14550,3,1594,797,0,14546,14547,
        5,2353,0,0,14547,14549,3,1594,797,0,14548,14546,1,0,0,0,14549,14552,
        1,0,0,0,14550,14548,1,0,0,0,14550,14551,1,0,0,0,14551,14553,1,0,
        0,0,14552,14550,1,0,0,0,14553,14554,5,2348,0,0,14554,14555,5,1679,
        0,0,14555,14565,5,67,0,0,14556,14566,7,116,0,0,14557,14561,5,2347,
        0,0,14558,14560,3,1596,798,0,14559,14558,1,0,0,0,14560,14563,1,0,
        0,0,14561,14559,1,0,0,0,14561,14562,1,0,0,0,14562,14564,1,0,0,0,
        14563,14561,1,0,0,0,14564,14566,5,2348,0,0,14565,14556,1,0,0,0,14565,
        14557,1,0,0,0,14566,14567,1,0,0,0,14567,14565,1,0,0,0,14567,14568,
        1,0,0,0,14568,14589,1,0,0,0,14569,14570,5,2347,0,0,14570,14571,3,
        1594,797,0,14571,14572,5,2348,0,0,14572,14573,5,1679,0,0,14573,14584,
        5,67,0,0,14574,14585,7,116,0,0,14575,14585,3,1592,796,0,14576,14580,
        5,2347,0,0,14577,14579,3,1596,798,0,14578,14577,1,0,0,0,14579,14582,
        1,0,0,0,14580,14578,1,0,0,0,14580,14581,1,0,0,0,14581,14583,1,0,
        0,0,14582,14580,1,0,0,0,14583,14585,5,2348,0,0,14584,14574,1,0,0,
        0,14584,14575,1,0,0,0,14584,14576,1,0,0,0,14585,14586,1,0,0,0,14586,
        14584,1,0,0,0,14586,14587,1,0,0,0,14587,14589,1,0,0,0,14588,14544,
        1,0,0,0,14588,14569,1,0,0,0,14589,1599,1,0,0,0,14590,14591,5,926,
        0,0,14591,14592,5,817,0,0,14592,14593,5,2347,0,0,14593,14594,3,1594,
        797,0,14594,14595,5,2348,0,0,14595,14596,5,2347,0,0,14596,14597,
        3,1602,801,0,14597,14598,5,2348,0,0,14598,1601,1,0,0,0,14599,14624,
        3,1202,601,0,14600,14601,7,164,0,0,14601,14624,5,2341,0,0,14602,
        14603,5,1434,0,0,14603,14624,5,586,0,0,14604,14624,3,1610,805,0,
        14605,14624,3,1606,803,0,14606,14624,3,1608,804,0,14607,14608,5,
        471,0,0,14608,14624,3,1612,806,0,14609,14624,5,366,0,0,14610,14624,
        5,158,0,0,14611,14616,5,158,0,0,14612,14616,5,1010,0,0,14613,14614,
        5,158,0,0,14614,14616,5,1430,0,0,14615,14611,1,0,0,0,14615,14612,
        1,0,0,0,14615,14613,1,0,0,0,14616,14618,1,0,0,0,14617,14619,3,894,
        447,0,14618,14617,1,0,0,0,14618,14619,1,0,0,0,14619,14624,1,0,0,
        0,14620,14624,3,1248,624,0,14621,14624,3,1252,626,0,14622,14624,
        3,1250,625,0,14623,14599,1,0,0,0,14623,14600,1,0,0,0,14623,14602,
        1,0,0,0,14623,14604,1,0,0,0,14623,14605,1,0,0,0,14623,14606,1,0,
        0,0,14623,14607,1,0,0,0,14623,14609,1,0,0,0,14623,14610,1,0,0,0,
        14623,14615,1,0,0,0,14623,14620,1,0,0,0,14623,14621,1,0,0,0,14623,
        14622,1,0,0,0,14624,14625,1,0,0,0,14625,14623,1,0,0,0,14625,14626,
        1,0,0,0,14626,1603,1,0,0,0,14627,14628,7,17,0,0,14628,14629,5,1678,
        0,0,14629,14630,5,696,0,0,14630,14653,5,1528,0,0,14631,14632,5,195,
        0,0,14632,14653,5,2341,0,0,14633,14634,5,1300,0,0,14634,14653,5,
        2341,0,0,14635,14636,5,586,0,0,14636,14653,5,2341,0,0,14637,14653,
        3,1610,805,0,14638,14653,3,1606,803,0,14639,14653,3,1608,804,0,14640,
        14641,5,471,0,0,14641,14653,3,1612,806,0,14642,14653,5,366,0,0,14643,
        14648,5,158,0,0,14644,14648,5,1010,0,0,14645,14646,5,158,0,0,14646,
        14648,5,1430,0,0,14647,14643,1,0,0,0,14647,14644,1,0,0,0,14647,14645,
        1,0,0,0,14648,14650,1,0,0,0,14649,14651,3,894,447,0,14650,14649,
        1,0,0,0,14650,14651,1,0,0,0,14651,14653,1,0,0,0,14652,14627,1,0,
        0,0,14652,14631,1,0,0,0,14652,14633,1,0,0,0,14652,14635,1,0,0,0,
        14652,14637,1,0,0,0,14652,14638,1,0,0,0,14652,14639,1,0,0,0,14652,
        14640,1,0,0,0,14652,14642,1,0,0,0,14652,14647,1,0,0,0,14653,14654,
        1,0,0,0,14654,14652,1,0,0,0,14654,14655,1,0,0,0,14655,1605,1,0,0,
        0,14656,14657,7,165,0,0,14657,1607,1,0,0,0,14658,14664,5,1017,0,
        0,14659,14661,5,246,0,0,14660,14662,7,166,0,0,14661,14660,1,0,0,
        0,14661,14662,1,0,0,0,14662,14664,1,0,0,0,14663,14658,1,0,0,0,14663,
        14659,1,0,0,0,14664,1609,1,0,0,0,14665,14671,5,1505,0,0,14666,14672,
        5,2306,0,0,14667,14668,5,2309,0,0,14668,14672,5,2341,0,0,14669,14672,
        5,89,0,0,14670,14672,5,1071,0,0,14671,14666,1,0,0,0,14671,14667,
        1,0,0,0,14671,14669,1,0,0,0,14671,14670,1,0,0,0,14671,14672,1,0,
        0,0,14672,1611,1,0,0,0,14673,14674,5,2153,0,0,14674,14676,5,2343,
        0,0,14675,14673,1,0,0,0,14675,14676,1,0,0,0,14676,14680,1,0,0,0,
        14677,14678,5,644,0,0,14678,14679,5,154,0,0,14679,14681,5,2378,0,
        0,14680,14677,1,0,0,0,14680,14681,1,0,0,0,14681,14683,1,0,0,0,14682,
        14684,5,2343,0,0,14683,14682,1,0,0,0,14683,14684,1,0,0,0,14684,14689,
        1,0,0,0,14685,14687,5,1074,0,0,14686,14685,1,0,0,0,14686,14687,1,
        0,0,0,14687,14688,1,0,0,0,14688,14690,5,1535,0,0,14689,14686,1,0,
        0,0,14689,14690,1,0,0,0,14690,1613,1,0,0,0,14691,14692,3,2364,1182,
        0,14692,1615,1,0,0,0,14693,14694,3,2364,1182,0,14694,14695,5,2340,
        0,0,14695,14697,1,0,0,0,14696,14693,1,0,0,0,14696,14697,1,0,0,0,
        14697,14701,1,0,0,0,14698,14699,3,2364,1182,0,14699,14700,5,2340,
        0,0,14700,14702,1,0,0,0,14701,14698,1,0,0,0,14701,14702,1,0,0,0,
        14702,14703,1,0,0,0,14703,14704,3,2364,1182,0,14704,1617,1,0,0,0,
        14705,14726,3,1658,829,0,14706,14726,3,1646,823,0,14707,14710,3,
        1588,794,0,14708,14710,3,1598,799,0,14709,14707,1,0,0,0,14709,14708,
        1,0,0,0,14710,14722,1,0,0,0,14711,14712,5,2347,0,0,14712,14717,3,
        1620,810,0,14713,14714,5,2353,0,0,14714,14716,3,1620,810,0,14715,
        14713,1,0,0,0,14716,14719,1,0,0,0,14717,14715,1,0,0,0,14717,14718,
        1,0,0,0,14718,14720,1,0,0,0,14719,14717,1,0,0,0,14720,14721,5,2348,
        0,0,14721,14723,1,0,0,0,14722,14711,1,0,0,0,14722,14723,1,0,0,0,
        14723,14726,1,0,0,0,14724,14726,3,1052,526,0,14725,14705,1,0,0,0,
        14725,14706,1,0,0,0,14725,14709,1,0,0,0,14725,14724,1,0,0,0,14726,
        14727,1,0,0,0,14727,14725,1,0,0,0,14727,14728,1,0,0,0,14728,1619,
        1,0,0,0,14729,14762,5,817,0,0,14730,14731,5,2347,0,0,14731,14732,
        3,1594,797,0,14732,14733,5,2353,0,0,14733,14734,3,1594,797,0,14734,
        14735,1,0,0,0,14735,14736,5,2348,0,0,14736,14737,5,1679,0,0,14737,
        14743,5,67,0,0,14738,14744,7,116,0,0,14739,14740,5,2347,0,0,14740,
        14741,3,1596,798,0,14741,14742,5,2348,0,0,14742,14744,1,0,0,0,14743,
        14738,1,0,0,0,14743,14739,1,0,0,0,14744,14745,1,0,0,0,14745,14743,
        1,0,0,0,14745,14746,1,0,0,0,14746,14763,1,0,0,0,14747,14748,5,2347,
        0,0,14748,14749,3,1594,797,0,14749,14750,5,2348,0,0,14750,14751,
        5,1679,0,0,14751,14758,5,67,0,0,14752,14759,7,116,0,0,14753,14759,
        3,1592,796,0,14754,14755,5,2347,0,0,14755,14756,3,1596,798,0,14756,
        14757,5,2348,0,0,14757,14759,1,0,0,0,14758,14752,1,0,0,0,14758,14753,
        1,0,0,0,14758,14754,1,0,0,0,14759,14760,1,0,0,0,14760,14758,1,0,
        0,0,14760,14761,1,0,0,0,14761,14763,1,0,0,0,14762,14730,1,0,0,0,
        14762,14747,1,0,0,0,14763,1621,1,0,0,0,14764,14765,4,811,9,0,14765,
        14766,5,2340,0,0,14766,14767,5,580,0,0,14767,14774,3,2300,1150,0,
        14768,14769,5,2347,0,0,14769,14770,3,1624,812,0,14770,14771,5,2353,
        0,0,14771,14772,3,1626,813,0,14772,14773,5,2348,0,0,14773,14775,
        1,0,0,0,14774,14768,1,0,0,0,14774,14775,1,0,0,0,14775,1623,1,0,0,
        0,14776,14777,3,2300,1150,0,14777,1625,1,0,0,0,14778,14779,3,2300,
        1150,0,14779,1627,1,0,0,0,14780,14789,3,2300,1150,0,14781,14784,
        3,2336,1168,0,14782,14784,3,2370,1185,0,14783,14781,1,0,0,0,14783,
        14782,1,0,0,0,14784,14787,1,0,0,0,14785,14786,5,2272,0,0,14786,14788,
        3,1630,815,0,14787,14785,1,0,0,0,14787,14788,1,0,0,0,14788,14790,
        1,0,0,0,14789,14783,1,0,0,0,14789,14790,1,0,0,0,14790,14792,1,0,
        0,0,14791,14793,5,1626,0,0,14792,14791,1,0,0,0,14792,14793,1,0,0,
        0,14793,14795,1,0,0,0,14794,14796,7,67,0,0,14795,14794,1,0,0,0,14795,
        14796,1,0,0,0,14796,14804,1,0,0,0,14797,14800,5,368,0,0,14798,14799,
        5,1193,0,0,14799,14801,5,1162,0,0,14800,14798,1,0,0,0,14800,14801,
        1,0,0,0,14801,14802,1,0,0,0,14802,14805,3,2052,1026,0,14803,14805,
        3,1632,816,0,14804,14797,1,0,0,0,14804,14803,1,0,0,0,14804,14805,
        1,0,0,0,14805,14808,1,0,0,0,14806,14807,5,471,0,0,14807,14809,3,
        1612,806,0,14808,14806,1,0,0,0,14808,14809,1,0,0,0,14809,14816,1,
        0,0,0,14810,14812,3,854,427,0,14811,14810,1,0,0,0,14812,14813,1,
        0,0,0,14813,14811,1,0,0,0,14813,14814,1,0,0,0,14814,14817,1,0,0,
        0,14815,14817,3,856,428,0,14816,14811,1,0,0,0,14816,14815,1,0,0,
        0,14816,14817,1,0,0,0,14817,1629,1,0,0,0,14818,14819,3,2364,1182,
        0,14819,1631,1,0,0,0,14820,14828,5,600,0,0,14821,14829,5,44,0,0,
        14822,14823,5,154,0,0,14823,14826,5,368,0,0,14824,14825,5,1193,0,
        0,14825,14827,5,1162,0,0,14826,14824,1,0,0,0,14826,14827,1,0,0,0,
        14827,14829,1,0,0,0,14828,14821,1,0,0,0,14828,14822,1,0,0,0,14828,
        14829,1,0,0,0,14829,14830,1,0,0,0,14830,14831,5,67,0,0,14831,14833,
        5,646,0,0,14832,14834,3,1634,817,0,14833,14832,1,0,0,0,14833,14834,
        1,0,0,0,14834,1633,1,0,0,0,14835,14837,3,1636,818,0,14836,14835,
        1,0,0,0,14837,14838,1,0,0,0,14838,14836,1,0,0,0,14838,14839,1,0,
        0,0,14839,14849,1,0,0,0,14840,14842,5,2347,0,0,14841,14843,3,1636,
        818,0,14842,14841,1,0,0,0,14843,14844,1,0,0,0,14844,14842,1,0,0,
        0,14844,14845,1,0,0,0,14845,14846,1,0,0,0,14846,14847,5,2348,0,0,
        14847,14849,1,0,0,0,14848,14836,1,0,0,0,14848,14840,1,0,0,0,14849,
        1635,1,0,0,0,14850,14851,5,1654,0,0,14851,14855,5,2212,0,0,14852,
        14856,3,2356,1178,0,14853,14854,5,810,0,0,14854,14856,5,2165,0,0,
        14855,14852,1,0,0,0,14855,14853,1,0,0,0,14856,14874,1,0,0,0,14857,
        14858,5,665,0,0,14858,14859,5,154,0,0,14859,14874,3,2356,1178,0,
        14860,14861,5,878,0,0,14861,14874,3,2356,1178,0,14862,14874,5,1059,
        0,0,14863,14864,5,906,0,0,14864,14874,3,2356,1178,0,14865,14874,
        5,1062,0,0,14866,14874,5,331,0,0,14867,14874,5,1027,0,0,14868,14869,
        5,158,0,0,14869,14874,3,2356,1178,0,14870,14874,5,1010,0,0,14871,
        14874,5,1233,0,0,14872,14874,5,1077,0,0,14873,14850,1,0,0,0,14873,
        14857,1,0,0,0,14873,14860,1,0,0,0,14873,14862,1,0,0,0,14873,14863,
        1,0,0,0,14873,14865,1,0,0,0,14873,14866,1,0,0,0,14873,14867,1,0,
        0,0,14873,14868,1,0,0,0,14873,14870,1,0,0,0,14873,14871,1,0,0,0,
        14873,14872,1,0,0,0,14874,1637,1,0,0,0,14875,14880,3,2300,1150,0,
        14876,14877,3,2336,1168,0,14877,14878,5,2272,0,0,14878,14879,3,1630,
        815,0,14879,14881,1,0,0,0,14880,14876,1,0,0,0,14880,14881,1,0,0,
        0,14881,14883,1,0,0,0,14882,14884,7,67,0,0,14883,14882,1,0,0,0,14883,
        14884,1,0,0,0,14884,14886,1,0,0,0,14885,14887,3,1640,820,0,14886,
        14885,1,0,0,0,14886,14887,1,0,0,0,14887,14889,1,0,0,0,14888,14890,
        5,2192,0,0,14889,14888,1,0,0,0,14889,14890,1,0,0,0,14890,14892,1,
        0,0,0,14891,14893,3,1642,821,0,14892,14891,1,0,0,0,14892,14893,1,
        0,0,0,14893,14902,1,0,0,0,14894,14895,5,2110,0,0,14895,14900,5,109,
        0,0,14896,14897,5,319,0,0,14897,14901,5,452,0,0,14898,14899,5,452,
        0,0,14899,14901,3,1418,709,0,14900,14896,1,0,0,0,14900,14898,1,0,
        0,0,14901,14903,1,0,0,0,14902,14894,1,0,0,0,14902,14903,1,0,0,0,
        14903,14913,1,0,0,0,14904,14905,5,2110,0,0,14905,14906,5,111,0,0,
        14906,14911,5,2212,0,0,14907,14908,7,167,0,0,14908,14912,5,452,0,
        0,14909,14910,5,452,0,0,14910,14912,3,1418,709,0,14911,14907,1,0,
        0,0,14911,14909,1,0,0,0,14912,14914,1,0,0,0,14913,14904,1,0,0,0,
        14913,14914,1,0,0,0,14914,14918,1,0,0,0,14915,14917,3,854,427,0,
        14916,14915,1,0,0,0,14917,14920,1,0,0,0,14918,14916,1,0,0,0,14918,
        14919,1,0,0,0,14919,1639,1,0,0,0,14920,14918,1,0,0,0,14921,14929,
        5,600,0,0,14922,14930,5,44,0,0,14923,14924,5,154,0,0,14924,14927,
        5,368,0,0,14925,14926,5,1193,0,0,14926,14928,5,1162,0,0,14927,14925,
        1,0,0,0,14927,14928,1,0,0,0,14928,14930,1,0,0,0,14929,14922,1,0,
        0,0,14929,14923,1,0,0,0,14929,14930,1,0,0,0,14930,14931,1,0,0,0,
        14931,14932,5,67,0,0,14932,14942,5,646,0,0,14933,14938,5,2347,0,
        0,14934,14937,3,336,168,0,14935,14937,3,334,167,0,14936,14934,1,
        0,0,0,14936,14935,1,0,0,0,14937,14940,1,0,0,0,14938,14936,1,0,0,
        0,14938,14939,1,0,0,0,14939,14941,1,0,0,0,14940,14938,1,0,0,0,14941,
        14943,5,2348,0,0,14942,14933,1,0,0,0,14942,14943,1,0,0,0,14943,1641,
        1,0,0,0,14944,14945,5,493,0,0,14945,14950,5,2153,0,0,14946,14947,
        7,167,0,0,14947,14951,5,452,0,0,14948,14949,5,452,0,0,14949,14951,
        3,1418,709,0,14950,14946,1,0,0,0,14950,14948,1,0,0,0,14951,1643,
        1,0,0,0,14952,14953,5,1275,0,0,14953,14954,3,1652,826,0,14954,1645,
        1,0,0,0,14955,14956,5,959,0,0,14956,14959,5,1999,0,0,14957,14960,
        3,1648,824,0,14958,14960,5,229,0,0,14959,14957,1,0,0,0,14959,14958,
        1,0,0,0,14960,14962,1,0,0,0,14961,14963,3,1650,825,0,14962,14961,
        1,0,0,0,14962,14963,1,0,0,0,14963,14965,1,0,0,0,14964,14966,7,168,
        0,0,14965,14964,1,0,0,0,14965,14966,1,0,0,0,14966,14967,1,0,0,0,
        14967,14968,5,1679,0,0,14968,14969,5,67,0,0,14969,14983,3,2302,1151,
        0,14970,14977,5,2347,0,0,14971,14972,5,2347,0,0,14972,14973,3,1066,
        533,0,14973,14974,5,2348,0,0,14974,14978,1,0,0,0,14975,14978,3,1208,
        604,0,14976,14978,3,1618,809,0,14977,14971,1,0,0,0,14977,14975,1,
        0,0,0,14977,14976,1,0,0,0,14978,14979,1,0,0,0,14979,14977,1,0,0,
        0,14979,14980,1,0,0,0,14980,14981,1,0,0,0,14981,14982,5,2348,0,0,
        14982,14984,1,0,0,0,14983,14970,1,0,0,0,14983,14984,1,0,0,0,14984,
        14990,1,0,0,0,14985,14987,5,1508,0,0,14986,14988,5,67,0,0,14987,
        14986,1,0,0,0,14987,14988,1,0,0,0,14988,14989,1,0,0,0,14989,14991,
        7,163,0,0,14990,14985,1,0,0,0,14990,14991,1,0,0,0,14991,1647,1,0,
        0,0,14992,14993,3,2370,1185,0,14993,1649,1,0,0,0,14994,14996,5,455,
        0,0,14995,14994,1,0,0,0,14995,14996,1,0,0,0,14996,14997,1,0,0,0,
        14997,14998,5,740,0,0,14998,15000,5,1180,0,0,14999,15001,5,2076,
        0,0,15000,14999,1,0,0,0,15000,15001,1,0,0,0,15001,15002,1,0,0,0,
        15002,15003,5,2347,0,0,15003,15004,3,2272,1136,0,15004,15005,5,2348,
        0,0,15005,15014,1,0,0,0,15006,15008,5,1138,0,0,15007,15006,1,0,0,
        0,15007,15008,1,0,0,0,15008,15009,1,0,0,0,15009,15010,5,1696,0,0,
        15010,15011,5,80,0,0,15011,15012,5,38,0,0,15012,15014,5,800,0,0,
        15013,14995,1,0,0,0,15013,15007,1,0,0,0,15014,1651,1,0,0,0,15015,
        15018,3,2370,1185,0,15016,15018,5,2344,0,0,15017,15015,1,0,0,0,15017,
        15016,1,0,0,0,15018,1653,1,0,0,0,15019,15020,5,1705,0,0,15020,15023,
        5,836,0,0,15021,15024,3,1244,622,0,15022,15024,3,1246,623,0,15023,
        15021,1,0,0,0,15023,15022,1,0,0,0,15024,1655,1,0,0,0,15025,15026,
        3,2370,1185,0,15026,1657,1,0,0,0,15027,15028,5,226,0,0,15028,15029,
        3,2370,1185,0,15029,15030,3,1650,825,0,15030,1659,1,0,0,0,15031,
        15032,5,21,0,0,15032,15042,5,2347,0,0,15033,15038,3,860,430,0,15034,
        15035,5,2353,0,0,15035,15037,3,860,430,0,15036,15034,1,0,0,0,15037,
        15040,1,0,0,0,15038,15036,1,0,0,0,15038,15039,1,0,0,0,15039,15043,
        1,0,0,0,15040,15038,1,0,0,0,15041,15043,3,858,429,0,15042,15033,
        1,0,0,0,15042,15041,1,0,0,0,15043,15044,1,0,0,0,15044,15045,5,2348,
        0,0,15045,15086,1,0,0,0,15046,15049,5,21,0,0,15047,15050,3,860,430,
        0,15048,15050,3,858,429,0,15049,15047,1,0,0,0,15049,15048,1,0,0,
        0,15050,15086,1,0,0,0,15051,15068,5,926,0,0,15052,15053,5,271,0,
        0,15053,15069,3,2268,1134,0,15054,15055,5,1376,0,0,15055,15069,5,
        770,0,0,15056,15057,5,2091,0,0,15057,15058,5,2347,0,0,15058,15063,
        3,2300,1150,0,15059,15060,5,2353,0,0,15060,15062,3,2300,1150,0,15061,
        15059,1,0,0,0,15062,15065,1,0,0,0,15063,15061,1,0,0,0,15063,15064,
        1,0,0,0,15064,15066,1,0,0,0,15065,15063,1,0,0,0,15066,15067,5,2348,
        0,0,15067,15069,1,0,0,0,15068,15052,1,0,0,0,15068,15054,1,0,0,0,
        15068,15056,1,0,0,0,15069,15070,1,0,0,0,15070,15072,3,862,431,0,
        15071,15073,5,171,0,0,15072,15071,1,0,0,0,15072,15073,1,0,0,0,15073,
        15086,1,0,0,0,15074,15075,5,1481,0,0,15075,15076,5,271,0,0,15076,
        15077,3,1662,831,0,15077,15078,5,2052,0,0,15078,15079,3,1664,832,
        0,15079,15086,1,0,0,0,15080,15082,3,1666,833,0,15081,15080,1,0,0,
        0,15082,15083,1,0,0,0,15083,15081,1,0,0,0,15083,15084,1,0,0,0,15084,
        15086,1,0,0,0,15085,15031,1,0,0,0,15085,15046,1,0,0,0,15085,15051,
        1,0,0,0,15085,15074,1,0,0,0,15085,15081,1,0,0,0,15086,1661,1,0,0,
        0,15087,15088,3,2268,1134,0,15088,1663,1,0,0,0,15089,15090,3,2268,
        1134,0,15090,1665,1,0,0,0,15091,15108,5,438,0,0,15092,15093,5,1376,
        0,0,15093,15109,5,770,0,0,15094,15095,5,2091,0,0,15095,15096,5,2347,
        0,0,15096,15101,3,2300,1150,0,15097,15098,5,2353,0,0,15098,15100,
        3,2300,1150,0,15099,15097,1,0,0,0,15100,15103,1,0,0,0,15101,15099,
        1,0,0,0,15101,15102,1,0,0,0,15102,15104,1,0,0,0,15103,15101,1,0,
        0,0,15104,15105,5,2348,0,0,15105,15109,1,0,0,0,15106,15107,5,271,
        0,0,15107,15109,3,2268,1134,0,15108,15092,1,0,0,0,15108,15094,1,
        0,0,0,15108,15106,1,0,0,0,15109,15111,1,0,0,0,15110,15112,5,171,
        0,0,15111,15110,1,0,0,0,15111,15112,1,0,0,0,15112,15115,1,0,0,0,
        15113,15114,7,169,0,0,15114,15116,5,675,0,0,15115,15113,1,0,0,0,
        15115,15116,1,0,0,0,15116,15118,1,0,0,0,15117,15119,5,1190,0,0,15118,
        15117,1,0,0,0,15118,15119,1,0,0,0,15119,1667,1,0,0,0,15120,15123,
        5,21,0,0,15121,15122,5,271,0,0,15122,15124,3,2268,1134,0,15123,15121,
        1,0,0,0,15123,15124,1,0,0,0,15124,15125,1,0,0,0,15125,15132,3,1670,
        835,0,15126,15129,5,2353,0,0,15127,15128,5,271,0,0,15128,15130,3,
        2268,1134,0,15129,15127,1,0,0,0,15129,15130,1,0,0,0,15130,15131,
        1,0,0,0,15131,15133,3,1670,835,0,15132,15126,1,0,0,0,15133,15134,
        1,0,0,0,15134,15132,1,0,0,0,15134,15135,1,0,0,0,15135,1669,1,0,0,
        0,15136,15141,3,1688,844,0,15137,15141,3,1680,840,0,15138,15141,
        3,1686,843,0,15139,15141,3,1672,836,0,15140,15136,1,0,0,0,15140,
        15137,1,0,0,0,15140,15138,1,0,0,0,15140,15139,1,0,0,0,15141,1671,
        1,0,0,0,15142,15143,5,190,0,0,15143,15144,5,2347,0,0,15144,15145,
        3,2048,1024,0,15145,15147,5,2348,0,0,15146,15148,5,404,0,0,15147,
        15146,1,0,0,0,15147,15148,1,0,0,0,15148,1673,1,0,0,0,15149,15150,
        5,438,0,0,15150,15151,5,271,0,0,15151,15152,3,2268,1134,0,15152,
        1675,1,0,0,0,15153,15154,5,467,0,0,15154,15155,5,271,0,0,15155,15156,
        3,2268,1134,0,15156,1677,1,0,0,0,15157,15158,5,404,0,0,15158,15159,
        5,271,0,0,15159,15160,3,2268,1134,0,15160,1679,1,0,0,0,15161,15162,
        5,578,0,0,15162,15163,5,770,0,0,15163,15164,3,2320,1160,0,15164,
        15166,3,1682,841,0,15165,15167,3,1684,842,0,15166,15165,1,0,0,0,
        15166,15167,1,0,0,0,15167,1681,1,0,0,0,15168,15169,5,1450,0,0,15169,
        15171,3,2302,1151,0,15170,15172,3,2320,1160,0,15171,15170,1,0,0,
        0,15171,15172,1,0,0,0,15172,15180,1,0,0,0,15173,15174,5,1193,0,0,
        15174,15178,5,381,0,0,15175,15179,5,171,0,0,15176,15177,5,1590,0,
        0,15177,15179,5,1162,0,0,15178,15175,1,0,0,0,15178,15176,1,0,0,0,
        15179,15181,1,0,0,0,15180,15173,1,0,0,0,15180,15181,1,0,0,0,15181,
        1683,1,0,0,0,15182,15183,5,1193,0,0,15183,15187,5,381,0,0,15184,
        15188,5,171,0,0,15185,15186,5,1590,0,0,15186,15188,5,1162,0,0,15187,
        15184,1,0,0,0,15187,15185,1,0,0,0,15188,1685,1,0,0,0,15189,15190,
        5,2091,0,0,15190,15192,3,2320,1160,0,15191,15193,3,1542,771,0,15192,
        15191,1,0,0,0,15192,15193,1,0,0,0,15193,1687,1,0,0,0,15194,15195,
        5,1376,0,0,15195,15196,5,770,0,0,15196,15198,3,2320,1160,0,15197,
        15199,3,1542,771,0,15198,15197,1,0,0,0,15198,15199,1,0,0,0,15199,
        1689,1,0,0,0,15200,15201,5,361,0,0,15201,15203,3,1712,856,0,15202,
        15200,1,0,0,0,15202,15203,1,0,0,0,15203,15204,1,0,0,0,15204,15205,
        5,110,0,0,15205,15212,3,1742,871,0,15206,15208,5,498,0,0,15207,15209,
        3,1796,898,0,15208,15207,1,0,0,0,15209,15210,1,0,0,0,15210,15208,
        1,0,0,0,15210,15211,1,0,0,0,15211,15213,1,0,0,0,15212,15206,1,0,
        0,0,15212,15213,1,0,0,0,15213,15214,1,0,0,0,15214,15215,5,473,0,
        0,15215,1691,1,0,0,0,15216,15217,5,86,0,0,15217,15218,7,88,0,0,15218,
        1693,1,0,0,0,15219,15222,3,1696,848,0,15220,15222,3,1698,849,0,15221,
        15219,1,0,0,0,15221,15220,1,0,0,0,15222,1695,1,0,0,0,15223,15224,
        5,777,0,0,15224,15225,5,746,0,0,15225,15226,5,943,0,0,15226,15227,
        5,2343,0,0,15227,1697,1,0,0,0,15228,15229,5,777,0,0,15229,15232,
        5,203,0,0,15230,15232,5,523,0,0,15231,15228,1,0,0,0,15231,15230,
        1,0,0,0,15232,15244,1,0,0,0,15233,15234,5,943,0,0,15234,15235,3,
        2364,1182,0,15235,15236,5,801,0,0,15236,15237,3,2362,1181,0,15237,
        15245,1,0,0,0,15238,15239,5,801,0,0,15239,15242,3,2362,1181,0,15240,
        15241,5,943,0,0,15241,15243,3,2364,1182,0,15242,15240,1,0,0,0,15242,
        15243,1,0,0,0,15243,15245,1,0,0,0,15244,15233,1,0,0,0,15244,15238,
        1,0,0,0,15245,15247,1,0,0,0,15246,15248,3,1700,850,0,15247,15246,
        1,0,0,0,15247,15248,1,0,0,0,15248,15251,1,0,0,0,15249,15250,5,2212,
        0,0,15250,15252,5,281,0,0,15251,15249,1,0,0,0,15251,15252,1,0,0,
        0,15252,15254,1,0,0,0,15253,15255,3,1702,851,0,15254,15253,1,0,0,
        0,15254,15255,1,0,0,0,15255,1699,1,0,0,0,15256,15257,5,34,0,0,15257,
        15258,5,696,0,0,15258,15259,5,2347,0,0,15259,15260,3,2050,1025,0,
        15260,15261,5,2348,0,0,15261,1701,1,0,0,0,15262,15263,5,1263,0,0,
        15263,15264,5,2347,0,0,15264,15269,3,1704,852,0,15265,15266,5,2353,
        0,0,15266,15268,3,1704,852,0,15267,15265,1,0,0,0,15268,15271,1,0,
        0,0,15269,15267,1,0,0,0,15269,15270,1,0,0,0,15270,15272,1,0,0,0,
        15271,15269,1,0,0,0,15272,15273,5,2348,0,0,15273,1703,1,0,0,0,15274,
        15295,5,281,0,0,15275,15278,5,1570,0,0,15276,15279,5,2334,0,0,15277,
        15279,3,1706,853,0,15278,15276,1,0,0,0,15278,15277,1,0,0,0,15278,
        15279,1,0,0,0,15279,15295,1,0,0,0,15280,15283,3,2252,1126,0,15281,
        15283,5,1508,0,0,15282,15280,1,0,0,0,15282,15281,1,0,0,0,15283,15285,
        1,0,0,0,15284,15286,3,1706,853,0,15285,15284,1,0,0,0,15285,15286,
        1,0,0,0,15286,15289,1,0,0,0,15287,15288,5,154,0,0,15288,15290,5,
        1449,0,0,15289,15287,1,0,0,0,15289,15290,1,0,0,0,15290,15292,1,0,
        0,0,15291,15293,3,2370,1185,0,15292,15291,1,0,0,0,15292,15293,1,
        0,0,0,15293,15295,1,0,0,0,15294,15274,1,0,0,0,15294,15275,1,0,0,
        0,15294,15282,1,0,0,0,15295,1705,1,0,0,0,15296,15298,5,691,0,0,15297,
        15299,7,170,0,0,15298,15297,1,0,0,0,15298,15299,1,0,0,0,15299,15306,
        1,0,0,0,15300,15306,5,796,0,0,15301,15306,5,2328,0,0,15302,15306,
        5,2330,0,0,15303,15306,5,2326,0,0,15304,15306,5,2327,0,0,15305,15296,
        1,0,0,0,15305,15300,1,0,0,0,15305,15301,1,0,0,0,15305,15302,1,0,
        0,0,15305,15303,1,0,0,0,15305,15304,1,0,0,0,15306,1707,1,0,0,0,15307,
        15311,3,2252,1126,0,15308,15310,7,171,0,0,15309,15308,1,0,0,0,15310,
        15313,1,0,0,0,15311,15309,1,0,0,0,15311,15312,1,0,0,0,15312,15315,
        1,0,0,0,15313,15311,1,0,0,0,15314,15316,3,2334,1167,0,15315,15314,
        1,0,0,0,15315,15316,1,0,0,0,15316,15318,1,0,0,0,15317,15319,3,1710,
        855,0,15318,15317,1,0,0,0,15318,15319,1,0,0,0,15319,1709,1,0,0,0,
        15320,15321,7,172,0,0,15321,15322,3,2052,1026,0,15322,1711,1,0,0,
        0,15323,15325,3,1714,857,0,15324,15323,1,0,0,0,15325,15326,1,0,0,
        0,15326,15324,1,0,0,0,15326,15327,1,0,0,0,15327,1713,1,0,0,0,15328,
        15340,3,1726,863,0,15329,15340,3,1724,862,0,15330,15340,3,166,83,
        0,15331,15340,3,168,84,0,15332,15340,3,1716,858,0,15333,15340,3,
        1718,859,0,15334,15340,3,1720,860,0,15335,15340,3,1734,867,0,15336,
        15340,3,182,91,0,15337,15340,3,180,90,0,15338,15340,3,1788,894,0,
        15339,15328,1,0,0,0,15339,15329,1,0,0,0,15339,15330,1,0,0,0,15339,
        15331,1,0,0,0,15339,15332,1,0,0,0,15339,15333,1,0,0,0,15339,15334,
        1,0,0,0,15339,15335,1,0,0,0,15339,15336,1,0,0,0,15339,15337,1,0,
        0,0,15339,15338,1,0,0,0,15340,1715,1,0,0,0,15341,15343,3,2362,1181,
        0,15342,15344,5,269,0,0,15343,15342,1,0,0,0,15343,15344,1,0,0,0,
        15344,15345,1,0,0,0,15345,15350,3,2334,1167,0,15346,15348,5,1138,
        0,0,15347,15346,1,0,0,0,15347,15348,1,0,0,0,15348,15349,1,0,0,0,
        15349,15351,5,1162,0,0,15350,15347,1,0,0,0,15350,15351,1,0,0,0,15351,
        15353,1,0,0,0,15352,15354,3,1710,855,0,15353,15352,1,0,0,0,15353,
        15354,1,0,0,0,15354,15355,1,0,0,0,15355,15356,5,2367,0,0,15356,1717,
        1,0,0,0,15357,15358,5,1701,0,0,15358,15359,3,2362,1181,0,15359,15360,
        5,740,0,0,15360,15366,3,2334,1167,0,15361,15362,5,1420,0,0,15362,
        15363,3,2052,1026,0,15363,15364,5,2339,0,0,15364,15365,3,2052,1026,
        0,15365,15367,1,0,0,0,15366,15361,1,0,0,0,15366,15367,1,0,0,0,15367,
        15370,1,0,0,0,15368,15369,5,1138,0,0,15369,15371,5,1162,0,0,15370,
        15368,1,0,0,0,15370,15371,1,0,0,0,15371,15372,1,0,0,0,15372,15373,
        5,2367,0,0,15373,1719,1,0,0,0,15374,15375,5,326,0,0,15375,15387,
        3,2362,1181,0,15376,15377,5,2347,0,0,15377,15382,3,1722,861,0,15378,
        15379,5,2353,0,0,15379,15381,3,1722,861,0,15380,15378,1,0,0,0,15381,
        15384,1,0,0,0,15382,15380,1,0,0,0,15382,15383,1,0,0,0,15383,15385,
        1,0,0,0,15384,15382,1,0,0,0,15385,15386,5,2348,0,0,15386,15388,1,
        0,0,0,15387,15376,1,0,0,0,15387,15388,1,0,0,0,15388,15391,1,0,0,
        0,15389,15390,5,1508,0,0,15390,15392,3,2334,1167,0,15391,15389,1,
        0,0,0,15391,15392,1,0,0,0,15392,15395,1,0,0,0,15393,15394,5,740,
        0,0,15394,15396,3,1844,922,0,15395,15393,1,0,0,0,15395,15396,1,0,
        0,0,15396,15397,1,0,0,0,15397,15398,5,2367,0,0,15398,1721,1,0,0,
        0,15399,15404,3,2252,1126,0,15400,15402,5,696,0,0,15401,15400,1,
        0,0,0,15401,15402,1,0,0,0,15402,15403,1,0,0,0,15403,15405,3,2334,
        1167,0,15404,15401,1,0,0,0,15404,15405,1,0,0,0,15405,15407,1,0,0,
        0,15406,15408,3,1710,855,0,15407,15406,1,0,0,0,15407,15408,1,0,0,
        0,15408,1723,1,0,0,0,15409,15410,3,2362,1181,0,15410,15411,5,498,
        0,0,15411,15412,5,2367,0,0,15412,1725,1,0,0,0,15413,15453,5,1359,
        0,0,15414,15454,5,1579,0,0,15415,15454,5,94,0,0,15416,15417,5,499,
        0,0,15417,15418,5,2347,0,0,15418,15419,3,2276,1138,0,15419,15420,
        5,2353,0,0,15420,15421,3,2358,1179,0,15421,15422,5,2348,0,0,15422,
        15454,1,0,0,0,15423,15424,5,702,0,0,15424,15425,5,2347,0,0,15425,
        15426,3,2362,1181,0,15426,15427,5,2353,0,0,15427,15428,3,2052,1026,
        0,15428,15429,5,2348,0,0,15429,15454,1,0,0,0,15430,15431,5,1499,
        0,0,15431,15434,5,2347,0,0,15432,15435,3,2362,1181,0,15433,15435,
        5,368,0,0,15434,15432,1,0,0,0,15434,15433,1,0,0,0,15435,15438,1,
        0,0,0,15436,15437,5,2353,0,0,15437,15439,3,2362,1181,0,15438,15436,
        1,0,0,0,15439,15440,1,0,0,0,15440,15438,1,0,0,0,15440,15441,1,0,
        0,0,15441,15442,1,0,0,0,15442,15443,5,2348,0,0,15443,15454,1,0,0,
        0,15444,15445,5,386,0,0,15445,15446,5,2347,0,0,15446,15449,3,2362,
        1181,0,15447,15448,5,2353,0,0,15448,15450,5,2343,0,0,15449,15447,
        1,0,0,0,15449,15450,1,0,0,0,15450,15451,1,0,0,0,15451,15452,5,2348,
        0,0,15452,15454,1,0,0,0,15453,15414,1,0,0,0,15453,15415,1,0,0,0,
        15453,15416,1,0,0,0,15453,15423,1,0,0,0,15453,15430,1,0,0,0,15453,
        15444,1,0,0,0,15454,15455,1,0,0,0,15455,15456,5,2367,0,0,15456,1727,
        1,0,0,0,15457,15458,5,1435,0,0,15458,15459,5,2347,0,0,15459,15464,
        3,1730,865,0,15460,15461,5,2353,0,0,15461,15463,3,1730,865,0,15462,
        15460,1,0,0,0,15463,15466,1,0,0,0,15464,15462,1,0,0,0,15464,15465,
        1,0,0,0,15465,15467,1,0,0,0,15466,15464,1,0,0,0,15467,15468,5,2348,
        0,0,15468,1729,1,0,0,0,15469,15471,3,2300,1150,0,15470,15472,3,2334,
        1167,0,15471,15470,1,0,0,0,15471,15472,1,0,0,0,15472,15475,1,0,0,
        0,15473,15474,5,1138,0,0,15474,15476,5,1162,0,0,15475,15473,1,0,
        0,0,15475,15476,1,0,0,0,15476,15478,1,0,0,0,15477,15479,3,1710,855,
        0,15478,15477,1,0,0,0,15478,15479,1,0,0,0,15479,1731,1,0,0,0,15480,
        15481,5,1452,0,0,15481,15484,5,326,0,0,15482,15483,5,1508,0,0,15483,
        15485,3,2334,1167,0,15484,15482,1,0,0,0,15484,15485,1,0,0,0,15485,
        1733,1,0,0,0,15486,15487,5,2076,0,0,15487,15488,3,2362,1181,0,15488,
        15493,5,740,0,0,15489,15494,3,1736,868,0,15490,15494,3,1740,870,
        0,15491,15494,3,1728,864,0,15492,15494,3,1732,866,0,15493,15489,
        1,0,0,0,15493,15490,1,0,0,0,15493,15491,1,0,0,0,15493,15492,1,0,
        0,0,15494,15495,1,0,0,0,15495,15496,5,2367,0,0,15496,1735,1,0,0,
        0,15497,15498,5,1999,0,0,15498,15499,5,1180,0,0,15499,15502,3,2334,
        1167,0,15500,15501,5,1138,0,0,15501,15503,5,1162,0,0,15502,15500,
        1,0,0,0,15502,15503,1,0,0,0,15503,15505,1,0,0,0,15504,15506,3,1738,
        869,0,15505,15504,1,0,0,0,15505,15506,1,0,0,0,15506,1737,1,0,0,0,
        15507,15510,5,671,0,0,15508,15510,5,675,0,0,15509,15507,1,0,0,0,
        15509,15508,1,0,0,0,15510,15511,1,0,0,0,15511,15512,5,154,0,0,15512,
        15513,3,2334,1167,0,15513,1739,1,0,0,0,15514,15520,5,2171,0,0,15515,
        15517,5,2173,0,0,15516,15515,1,0,0,0,15516,15517,1,0,0,0,15517,15518,
        1,0,0,0,15518,15520,5,66,0,0,15519,15514,1,0,0,0,15519,15516,1,0,
        0,0,15520,15521,1,0,0,0,15521,15522,5,2347,0,0,15522,15523,3,2052,
        1026,0,15523,15524,5,2348,0,0,15524,15525,5,1180,0,0,15525,15528,
        3,2334,1167,0,15526,15527,5,1138,0,0,15527,15529,5,1162,0,0,15528,
        15526,1,0,0,0,15528,15529,1,0,0,0,15529,1741,1,0,0,0,15530,15532,
        3,1726,863,0,15531,15530,1,0,0,0,15532,15535,1,0,0,0,15533,15531,
        1,0,0,0,15533,15534,1,0,0,0,15534,15536,1,0,0,0,15535,15533,1,0,
        0,0,15536,15537,3,1746,873,0,15537,15538,7,173,0,0,15538,15542,1,
        0,0,0,15539,15542,3,1744,872,0,15540,15542,3,1788,894,0,15541,15533,
        1,0,0,0,15541,15539,1,0,0,0,15541,15540,1,0,0,0,15542,15543,1,0,
        0,0,15543,15541,1,0,0,0,15543,15544,1,0,0,0,15544,1743,1,0,0,0,15545,
        15546,5,2365,0,0,15546,15547,5,2365,0,0,15547,15548,3,2270,1135,
        0,15548,15549,5,2364,0,0,15549,15550,5,2364,0,0,15550,1745,1,0,0,
        0,15551,15568,3,1794,897,0,15552,15568,3,1802,901,0,15553,15568,
        3,1750,875,0,15554,15568,3,1752,876,0,15555,15568,3,1754,877,0,15556,
        15568,3,1756,878,0,15557,15568,3,1758,879,0,15558,15568,3,1764,882,
        0,15559,15568,3,1768,884,0,15560,15568,3,1778,889,0,15561,15568,
        3,1780,890,0,15562,15568,3,1782,891,0,15563,15568,3,2094,1047,0,
        15564,15568,3,1804,902,0,15565,15568,3,1784,892,0,15566,15568,3,
        1786,893,0,15567,15551,1,0,0,0,15567,15552,1,0,0,0,15567,15553,1,
        0,0,0,15567,15554,1,0,0,0,15567,15555,1,0,0,0,15567,15556,1,0,0,
        0,15567,15557,1,0,0,0,15567,15558,1,0,0,0,15567,15559,1,0,0,0,15567,
        15560,1,0,0,0,15567,15561,1,0,0,0,15567,15562,1,0,0,0,15567,15563,
        1,0,0,0,15567,15564,1,0,0,0,15567,15565,1,0,0,0,15567,15566,1,0,
        0,0,15568,1747,1,0,0,0,15569,15571,8,174,0,0,15570,15569,1,0,0,0,
        15571,15572,1,0,0,0,15572,15570,1,0,0,0,15572,15573,1,0,0,0,15573,
        1749,1,0,0,0,15574,15577,3,2344,1172,0,15575,15577,3,2342,1171,0,
        15576,15574,1,0,0,0,15576,15575,1,0,0,0,15577,15578,1,0,0,0,15578,
        15579,5,2356,0,0,15579,15580,3,2052,1026,0,15580,1751,1,0,0,0,15581,
        15583,5,282,0,0,15582,15584,3,2270,1135,0,15583,15582,1,0,0,0,15583,
        15584,1,0,0,0,15584,15587,1,0,0,0,15585,15586,5,2204,0,0,15586,15588,
        3,2048,1024,0,15587,15585,1,0,0,0,15587,15588,1,0,0,0,15588,1753,
        1,0,0,0,15589,15591,5,510,0,0,15590,15592,3,2270,1135,0,15591,15590,
        1,0,0,0,15591,15592,1,0,0,0,15592,15595,1,0,0,0,15593,15594,5,2204,
        0,0,15594,15596,3,2048,1024,0,15595,15593,1,0,0,0,15595,15596,1,
        0,0,0,15596,1755,1,0,0,0,15597,15598,5,606,0,0,15598,15599,3,2270,
        1135,0,15599,1757,1,0,0,0,15600,15601,5,650,0,0,15601,15602,3,2048,
        1024,0,15602,15603,5,2012,0,0,15603,15607,3,1742,871,0,15604,15606,
        3,1760,880,0,15605,15604,1,0,0,0,15606,15609,1,0,0,0,15607,15605,
        1,0,0,0,15607,15608,1,0,0,0,15608,15611,1,0,0,0,15609,15607,1,0,
        0,0,15610,15612,3,1762,881,0,15611,15610,1,0,0,0,15611,15612,1,0,
        0,0,15612,15613,1,0,0,0,15613,15614,5,473,0,0,15614,15615,5,650,
        0,0,15615,1759,1,0,0,0,15616,15617,5,461,0,0,15617,15618,3,2048,
        1024,0,15618,15619,5,2012,0,0,15619,15620,3,1742,871,0,15620,1761,
        1,0,0,0,15621,15622,5,460,0,0,15622,15623,3,1742,871,0,15623,1763,
        1,0,0,0,15624,15626,3,1744,872,0,15625,15624,1,0,0,0,15625,15626,
        1,0,0,0,15626,15631,1,0,0,0,15627,15628,5,2206,0,0,15628,15632,3,
        2048,1024,0,15629,15630,5,580,0,0,15630,15632,3,1766,883,0,15631,
        15627,1,0,0,0,15631,15629,1,0,0,0,15631,15632,1,0,0,0,15632,15633,
        1,0,0,0,15633,15634,5,842,0,0,15634,15635,3,1742,871,0,15635,15636,
        5,473,0,0,15636,15638,5,842,0,0,15637,15639,3,2270,1135,0,15638,
        15637,1,0,0,0,15638,15639,1,0,0,0,15639,1765,1,0,0,0,15640,15641,
        3,2286,1143,0,15641,15643,5,696,0,0,15642,15644,5,1510,0,0,15643,
        15642,1,0,0,0,15643,15644,1,0,0,0,15644,15645,1,0,0,0,15645,15646,
        3,1774,887,0,15646,15647,5,2339,0,0,15647,15648,3,1776,888,0,15648,
        15666,1,0,0,0,15649,15650,3,2290,1145,0,15650,15663,5,696,0,0,15651,
        15657,3,2288,1144,0,15652,15654,5,2347,0,0,15653,15655,3,2050,1025,
        0,15654,15653,1,0,0,0,15654,15655,1,0,0,0,15655,15656,1,0,0,0,15656,
        15658,5,2348,0,0,15657,15652,1,0,0,0,15657,15658,1,0,0,0,15658,15664,
        1,0,0,0,15659,15660,5,2347,0,0,15660,15661,3,1844,922,0,15661,15662,
        5,2348,0,0,15662,15664,1,0,0,0,15663,15651,1,0,0,0,15663,15659,1,
        0,0,0,15664,15666,1,0,0,0,15665,15640,1,0,0,0,15665,15649,1,0,0,
        0,15666,1767,1,0,0,0,15667,15668,5,575,0,0,15668,15669,3,2286,1143,
        0,15669,15670,5,696,0,0,15670,15673,3,1770,885,0,15671,15672,5,1539,
        0,0,15672,15674,5,500,0,0,15673,15671,1,0,0,0,15673,15674,1,0,0,
        0,15674,15675,1,0,0,0,15675,15676,3,1810,905,0,15676,1769,1,0,0,
        0,15677,15678,3,1774,887,0,15678,15679,5,2339,0,0,15679,15680,3,
        1776,888,0,15680,15691,1,0,0,0,15681,15682,5,692,0,0,15682,15683,
        5,1180,0,0,15683,15685,3,2344,1172,0,15684,15686,3,1772,886,0,15685,
        15684,1,0,0,0,15685,15686,1,0,0,0,15686,15691,1,0,0,0,15687,15688,
        5,2164,0,0,15688,15689,5,1180,0,0,15689,15691,3,2286,1143,0,15690,
        15677,1,0,0,0,15690,15681,1,0,0,0,15690,15687,1,0,0,0,15691,1771,
        1,0,0,0,15692,15693,5,115,0,0,15693,15694,3,1774,887,0,15694,15695,
        5,49,0,0,15695,15696,3,1776,888,0,15696,1773,1,0,0,0,15697,15698,
        3,2076,1038,0,15698,1775,1,0,0,0,15699,15700,3,2076,1038,0,15700,
        1777,1,0,0,0,15701,15702,5,1162,0,0,15702,1779,1,0,0,0,15703,15705,
        5,1417,0,0,15704,15706,3,2276,1138,0,15705,15704,1,0,0,0,15705,15706,
        1,0,0,0,15706,1781,1,0,0,0,15707,15709,5,1508,0,0,15708,15710,3,
        2052,1026,0,15709,15708,1,0,0,0,15709,15710,1,0,0,0,15710,1783,1,
        0,0,0,15711,15713,5,165,0,0,15712,15711,1,0,0,0,15712,15713,1,0,
        0,0,15713,15714,1,0,0,0,15714,15716,3,2246,1123,0,15715,15717,3,
        2324,1162,0,15716,15715,1,0,0,0,15716,15717,1,0,0,0,15717,15725,
        1,0,0,0,15718,15719,5,2340,0,0,15719,15721,3,2246,1123,0,15720,15722,
        3,2324,1162,0,15721,15720,1,0,0,0,15721,15722,1,0,0,0,15722,15724,
        1,0,0,0,15723,15718,1,0,0,0,15724,15727,1,0,0,0,15725,15723,1,0,
        0,0,15725,15726,1,0,0,0,15726,15730,1,0,0,0,15727,15725,1,0,0,0,
        15728,15729,5,735,0,0,15729,15731,3,2342,1171,0,15730,15728,1,0,
        0,0,15730,15731,1,0,0,0,15731,1785,1,0,0,0,15732,15733,5,1322,0,
        0,15733,15734,5,1528,0,0,15734,15735,5,2347,0,0,15735,15736,3,2052,
        1026,0,15736,15737,5,2348,0,0,15737,1787,1,0,0,0,15738,15739,5,429,
        0,0,15739,15740,3,2048,1024,0,15740,15741,5,430,0,0,15741,15746,
        3,1792,896,0,15742,15743,5,426,0,0,15743,15745,3,1792,896,0,15744,
        15742,1,0,0,0,15745,15748,1,0,0,0,15746,15744,1,0,0,0,15746,15747,
        1,0,0,0,15747,15751,1,0,0,0,15748,15746,1,0,0,0,15749,15750,5,425,
        0,0,15750,15752,3,1792,896,0,15751,15749,1,0,0,0,15751,15752,1,0,
        0,0,15752,15753,1,0,0,0,15753,15754,5,427,0,0,15754,1789,1,0,0,0,
        15755,15756,5,428,0,0,15756,15757,3,2076,1038,0,15757,15758,5,427,
        0,0,15758,1791,1,0,0,0,15759,15761,3,1726,863,0,15760,15759,1,0,
        0,0,15760,15761,1,0,0,0,15761,15762,1,0,0,0,15762,15763,3,1746,873,
        0,15763,15764,5,2367,0,0,15764,15770,1,0,0,0,15765,15770,3,1716,
        858,0,15766,15770,3,1790,895,0,15767,15770,3,180,90,0,15768,15770,
        3,182,91,0,15769,15760,1,0,0,0,15769,15765,1,0,0,0,15769,15766,1,
        0,0,0,15769,15767,1,0,0,0,15769,15768,1,0,0,0,15770,15771,1,0,0,
        0,15771,15769,1,0,0,0,15771,15772,1,0,0,0,15772,1793,1,0,0,0,15773,
        15774,5,110,0,0,15774,15781,3,1742,871,0,15775,15777,5,498,0,0,15776,
        15778,3,1796,898,0,15777,15776,1,0,0,0,15778,15779,1,0,0,0,15779,
        15777,1,0,0,0,15779,15780,1,0,0,0,15780,15782,1,0,0,0,15781,15775,
        1,0,0,0,15781,15782,1,0,0,0,15782,15783,1,0,0,0,15783,15785,5,473,
        0,0,15784,15786,3,2270,1135,0,15785,15784,1,0,0,0,15785,15786,1,
        0,0,0,15786,1795,1,0,0,0,15787,15788,5,2204,0,0,15788,15793,3,2276,
        1138,0,15789,15790,5,1237,0,0,15790,15792,3,2276,1138,0,15791,15789,
        1,0,0,0,15792,15795,1,0,0,0,15793,15791,1,0,0,0,15793,15794,1,0,
        0,0,15794,15796,1,0,0,0,15795,15793,1,0,0,0,15796,15797,5,2012,0,
        0,15797,15798,3,1742,871,0,15798,1797,1,0,0,0,15799,15803,5,361,
        0,0,15800,15802,3,1714,857,0,15801,15800,1,0,0,0,15802,15805,1,0,
        0,0,15803,15801,1,0,0,0,15803,15804,1,0,0,0,15804,15807,1,0,0,0,
        15805,15803,1,0,0,0,15806,15799,1,0,0,0,15806,15807,1,0,0,0,15807,
        15808,1,0,0,0,15808,15809,3,1794,897,0,15809,1799,1,0,0,0,15810,
        15812,3,1714,857,0,15811,15810,1,0,0,0,15812,15815,1,0,0,0,15813,
        15811,1,0,0,0,15813,15814,1,0,0,0,15814,15816,1,0,0,0,15815,15813,
        1,0,0,0,15816,15817,3,1794,897,0,15817,1801,1,0,0,0,15818,15822,
        5,361,0,0,15819,15821,3,1714,857,0,15820,15819,1,0,0,0,15821,15824,
        1,0,0,0,15822,15820,1,0,0,0,15822,15823,1,0,0,0,15823,15826,1,0,
        0,0,15824,15822,1,0,0,0,15825,15818,1,0,0,0,15825,15826,1,0,0,0,
        15826,15827,1,0,0,0,15827,15828,3,1794,897,0,15828,1803,1,0,0,0,
        15829,15835,3,1806,903,0,15830,15835,3,1810,905,0,15831,15835,3,
        1812,906,0,15832,15835,3,1824,912,0,15833,15835,3,1838,919,0,15834,
        15829,1,0,0,0,15834,15830,1,0,0,0,15834,15831,1,0,0,0,15834,15832,
        1,0,0,0,15834,15833,1,0,0,0,15835,1805,1,0,0,0,15836,15837,5,505,
        0,0,15837,15838,5,656,0,0,15838,15848,3,2052,1026,0,15839,15841,
        3,2230,1115,0,15840,15842,3,2174,1087,0,15841,15840,1,0,0,0,15841,
        15842,1,0,0,0,15842,15849,1,0,0,0,15843,15845,3,2174,1087,0,15844,
        15846,3,1808,904,0,15845,15844,1,0,0,0,15845,15846,1,0,0,0,15846,
        15849,1,0,0,0,15847,15849,3,1808,904,0,15848,15839,1,0,0,0,15848,
        15843,1,0,0,0,15848,15847,1,0,0,0,15848,15849,1,0,0,0,15849,1807,
        1,0,0,0,15850,15851,7,175,0,0,15851,15852,3,2230,1115,0,15852,1809,
        1,0,0,0,15853,15861,3,2008,1004,0,15854,15861,3,2020,1010,0,15855,
        15861,3,1844,922,0,15856,15861,3,1982,991,0,15857,15861,3,1988,994,
        0,15858,15861,3,1990,995,0,15859,15861,3,1840,920,0,15860,15853,
        1,0,0,0,15860,15854,1,0,0,0,15860,15855,1,0,0,0,15860,15856,1,0,
        0,0,15860,15857,1,0,0,0,15860,15858,1,0,0,0,15860,15859,1,0,0,0,
        15861,1811,1,0,0,0,15862,15867,3,1814,907,0,15863,15867,3,1816,908,
        0,15864,15867,3,1818,909,0,15865,15867,3,1822,911,0,15866,15862,
        1,0,0,0,15866,15863,1,0,0,0,15866,15864,1,0,0,0,15866,15865,1,0,
        0,0,15867,1813,1,0,0,0,15868,15869,5,208,0,0,15869,15870,3,2288,
        1144,0,15870,1815,1,0,0,0,15871,15872,5,1198,0,0,15872,15878,3,2288,
        1144,0,15873,15875,5,2347,0,0,15874,15876,3,2050,1025,0,15875,15874,
        1,0,0,0,15875,15876,1,0,0,0,15876,15877,1,0,0,0,15877,15879,5,2348,
        0,0,15878,15873,1,0,0,0,15878,15879,1,0,0,0,15879,1817,1,0,0,0,15880,
        15881,5,549,0,0,15881,15909,3,2288,1144,0,15882,15883,5,735,0,0,
        15883,15888,3,1820,910,0,15884,15885,5,2353,0,0,15885,15887,3,1820,
        910,0,15886,15884,1,0,0,0,15887,15890,1,0,0,0,15888,15886,1,0,0,
        0,15888,15889,1,0,0,0,15889,15910,1,0,0,0,15890,15888,1,0,0,0,15891,
        15892,5,153,0,0,15892,15893,5,223,0,0,15893,15894,5,735,0,0,15894,
        15899,3,1820,910,0,15895,15896,5,2353,0,0,15896,15898,3,1820,910,
        0,15897,15895,1,0,0,0,15898,15901,1,0,0,0,15899,15897,1,0,0,0,15899,
        15900,1,0,0,0,15900,15907,1,0,0,0,15901,15899,1,0,0,0,15902,15905,
        5,810,0,0,15903,15906,3,2356,1178,0,15904,15906,3,1820,910,0,15905,
        15903,1,0,0,0,15905,15904,1,0,0,0,15906,15908,1,0,0,0,15907,15902,
        1,0,0,0,15907,15908,1,0,0,0,15908,15910,1,0,0,0,15909,15882,1,0,
        0,0,15909,15891,1,0,0,0,15910,1819,1,0,0,0,15911,15914,3,2284,1142,
        0,15912,15914,3,2092,1046,0,15913,15911,1,0,0,0,15913,15912,1,0,
        0,0,15914,1821,1,0,0,0,15915,15916,5,1198,0,0,15916,15917,3,2284,
        1142,0,15917,15920,5,580,0,0,15918,15921,3,1844,922,0,15919,15921,
        3,2052,1026,0,15920,15918,1,0,0,0,15920,15919,1,0,0,0,15921,15923,
        1,0,0,0,15922,15924,3,2174,1087,0,15923,15922,1,0,0,0,15923,15924,
        1,0,0,0,15924,1823,1,0,0,0,15925,15931,3,1826,913,0,15926,15931,
        3,1828,914,0,15927,15931,3,1830,915,0,15928,15931,3,1834,917,0,15929,
        15931,3,1836,918,0,15930,15925,1,0,0,0,15930,15926,1,0,0,0,15930,
        15927,1,0,0,0,15930,15928,1,0,0,0,15930,15929,1,0,0,0,15931,1825,
        1,0,0,0,15932,15933,5,1590,0,0,15933,15947,5,2058,0,0,15934,15935,
        5,1429,0,0,15935,15948,7,11,0,0,15936,15937,5,742,0,0,15937,15941,
        5,798,0,0,15938,15942,5,1578,0,0,15939,15940,5,1429,0,0,15940,15942,
        5,232,0,0,15941,15938,1,0,0,0,15941,15939,1,0,0,0,15942,15948,1,
        0,0,0,15943,15944,5,2148,0,0,15944,15945,5,1518,0,0,15945,15946,
        5,1567,0,0,15946,15948,3,2240,1120,0,15947,15934,1,0,0,0,15947,15936,
        1,0,0,0,15947,15943,1,0,0,0,15947,15948,1,0,0,0,15948,15951,1,0,
        0,0,15949,15950,5,943,0,0,15950,15952,3,2360,1180,0,15951,15949,
        1,0,0,0,15951,15952,1,0,0,0,15952,1827,1,0,0,0,15953,15954,5,1590,
        0,0,15954,15964,7,91,0,0,15955,15965,5,38,0,0,15956,15961,3,2268,
        1134,0,15957,15958,5,2353,0,0,15958,15960,3,2268,1134,0,15959,15957,
        1,0,0,0,15960,15963,1,0,0,0,15961,15959,1,0,0,0,15961,15962,1,0,
        0,0,15962,15965,1,0,0,0,15963,15961,1,0,0,0,15964,15955,1,0,0,0,
        15964,15956,1,0,0,0,15965,15966,1,0,0,0,15966,15967,7,66,0,0,15967,
        1829,1,0,0,0,15968,15970,5,231,0,0,15969,15971,5,2213,0,0,15970,
        15969,1,0,0,0,15970,15971,1,0,0,0,15971,15973,1,0,0,0,15972,15974,
        3,1832,916,0,15973,15972,1,0,0,0,15973,15974,1,0,0,0,15974,15991,
        1,0,0,0,15975,15976,5,230,0,0,15976,15978,5,2343,0,0,15977,15979,
        3,1832,916,0,15978,15977,1,0,0,0,15978,15979,1,0,0,0,15979,15992,
        1,0,0,0,15980,15989,5,576,0,0,15981,15984,5,2343,0,0,15982,15983,
        5,2353,0,0,15983,15985,3,2356,1178,0,15984,15982,1,0,0,0,15984,15985,
        1,0,0,0,15985,15990,1,0,0,0,15986,15987,5,293,0,0,15987,15990,5,
        2343,0,0,15988,15990,5,292,0,0,15989,15981,1,0,0,0,15989,15986,1,
        0,0,0,15989,15988,1,0,0,0,15990,15992,1,0,0,0,15991,15975,1,0,0,
        0,15991,15980,1,0,0,0,15991,15992,1,0,0,0,15992,1831,1,0,0,0,15993,
        15995,5,2216,0,0,15994,15996,7,0,0,0,15995,15994,1,0,0,0,15995,15996,
        1,0,0,0,15996,15998,1,0,0,0,15997,15999,7,176,0,0,15998,15997,1,
        0,0,0,15998,15999,1,0,0,0,15999,1833,1,0,0,0,16000,16002,5,1518,
        0,0,16001,16003,5,2213,0,0,16002,16001,1,0,0,0,16002,16003,1,0,0,
        0,16003,16011,1,0,0,0,16004,16006,5,2052,0,0,16005,16007,5,1538,
        0,0,16006,16005,1,0,0,0,16006,16007,1,0,0,0,16007,16008,1,0,0,0,
        16008,16012,3,2238,1119,0,16009,16010,5,576,0,0,16010,16012,3,2360,
        1180,0,16011,16004,1,0,0,0,16011,16009,1,0,0,0,16011,16012,1,0,0,
        0,16012,1835,1,0,0,0,16013,16014,5,1538,0,0,16014,16015,3,2238,1119,
        0,16015,1837,1,0,0,0,16016,16017,3,2052,1026,0,16017,16039,5,2340,
        0,0,16018,16030,7,177,0,0,16019,16020,5,2347,0,0,16020,16025,3,2052,
        1026,0,16021,16022,5,2353,0,0,16022,16024,3,2052,1026,0,16023,16021,
        1,0,0,0,16024,16027,1,0,0,0,16025,16023,1,0,0,0,16025,16026,1,0,
        0,0,16026,16028,1,0,0,0,16027,16025,1,0,0,0,16028,16029,5,2348,0,
        0,16029,16031,1,0,0,0,16030,16019,1,0,0,0,16030,16031,1,0,0,0,16031,
        16040,1,0,0,0,16032,16037,5,2318,0,0,16033,16034,5,2347,0,0,16034,
        16035,3,2052,1026,0,16035,16036,5,2348,0,0,16036,16038,1,0,0,0,16037,
        16033,1,0,0,0,16037,16038,1,0,0,0,16038,16040,1,0,0,0,16039,16018,
        1,0,0,0,16039,16032,1,0,0,0,16040,1839,1,0,0,0,16041,16042,5,515,
        0,0,16042,16047,5,1328,0,0,16043,16044,5,1590,0,0,16044,16045,5,
        1656,0,0,16045,16046,5,2369,0,0,16046,16048,3,2360,1180,0,16047,
        16043,1,0,0,0,16047,16048,1,0,0,0,16048,16051,1,0,0,0,16049,16050,
        5,735,0,0,16050,16052,3,2302,1151,0,16051,16049,1,0,0,0,16051,16052,
        1,0,0,0,16052,16053,1,0,0,0,16053,16059,5,580,0,0,16054,16060,3,
        1844,922,0,16055,16060,3,1982,991,0,16056,16060,3,1988,994,0,16057,
        16060,3,1990,995,0,16058,16060,3,2008,1004,0,16059,16054,1,0,0,0,
        16059,16055,1,0,0,0,16059,16056,1,0,0,0,16059,16057,1,0,0,0,16059,
        16058,1,0,0,0,16060,1841,1,0,0,0,16061,16063,3,1846,923,0,16062,
        16061,1,0,0,0,16062,16063,1,0,0,0,16063,16064,1,0,0,0,16064,16065,
        3,1870,935,0,16065,1843,1,0,0,0,16066,16073,3,1842,921,0,16067,16072,
        3,1976,988,0,16068,16072,3,1968,984,0,16069,16072,3,1972,986,0,16070,
        16072,3,1974,987,0,16071,16067,1,0,0,0,16071,16068,1,0,0,0,16071,
        16069,1,0,0,0,16071,16070,1,0,0,0,16072,16075,1,0,0,0,16073,16071,
        1,0,0,0,16073,16074,1,0,0,0,16074,1845,1,0,0,0,16075,16073,1,0,0,
        0,16076,16081,5,2212,0,0,16077,16080,3,180,90,0,16078,16080,3,182,
        91,0,16079,16077,1,0,0,0,16079,16078,1,0,0,0,16080,16083,1,0,0,0,
        16081,16079,1,0,0,0,16081,16082,1,0,0,0,16082,16084,1,0,0,0,16083,
        16081,1,0,0,0,16084,16089,3,1848,924,0,16085,16086,5,2353,0,0,16086,
        16088,3,1848,924,0,16087,16085,1,0,0,0,16088,16091,1,0,0,0,16089,
        16087,1,0,0,0,16089,16090,1,0,0,0,16090,16110,1,0,0,0,16091,16089,
        1,0,0,0,16092,16095,5,2212,0,0,16093,16096,3,180,90,0,16094,16096,
        3,182,91,0,16095,16093,1,0,0,0,16095,16094,1,0,0,0,16096,16097,1,
        0,0,0,16097,16095,1,0,0,0,16097,16098,1,0,0,0,16098,16107,1,0,0,
        0,16099,16104,3,1848,924,0,16100,16101,5,2353,0,0,16101,16103,3,
        1848,924,0,16102,16100,1,0,0,0,16103,16106,1,0,0,0,16104,16102,1,
        0,0,0,16104,16105,1,0,0,0,16105,16108,1,0,0,0,16106,16104,1,0,0,
        0,16107,16099,1,0,0,0,16107,16108,1,0,0,0,16108,16110,1,0,0,0,16109,
        16076,1,0,0,0,16109,16092,1,0,0,0,16110,1847,1,0,0,0,16111,16114,
        3,1850,925,0,16112,16114,3,1856,928,0,16113,16111,1,0,0,0,16113,
        16112,1,0,0,0,16114,1849,1,0,0,0,16115,16117,3,2262,1131,0,16116,
        16118,3,2320,1160,0,16117,16116,1,0,0,0,16117,16118,1,0,0,0,16118,
        16119,1,0,0,0,16119,16120,5,67,0,0,16120,16121,5,2347,0,0,16121,
        16123,3,1870,935,0,16122,16124,3,1968,984,0,16123,16122,1,0,0,0,
        16123,16124,1,0,0,0,16124,16125,1,0,0,0,16125,16127,5,2348,0,0,16126,
        16128,3,1852,926,0,16127,16126,1,0,0,0,16127,16128,1,0,0,0,16128,
        16130,1,0,0,0,16129,16131,3,1854,927,0,16130,16129,1,0,0,0,16130,
        16131,1,0,0,0,16131,1851,1,0,0,0,16132,16133,5,1557,0,0,16133,16134,
        7,178,0,0,16134,16135,5,559,0,0,16135,16136,5,154,0,0,16136,16138,
        3,2300,1150,0,16137,16139,5,68,0,0,16138,16137,1,0,0,0,16138,16139,
        1,0,0,0,16139,16141,1,0,0,0,16140,16142,5,391,0,0,16141,16140,1,
        0,0,0,16141,16142,1,0,0,0,16142,16145,1,0,0,0,16143,16144,5,1163,
        0,0,16144,16146,5,559,0,0,16145,16143,1,0,0,0,16145,16146,1,0,0,
        0,16146,16149,1,0,0,0,16147,16148,5,1163,0,0,16148,16150,5,779,0,
        0,16149,16147,1,0,0,0,16149,16150,1,0,0,0,16150,16169,1,0,0,0,16151,
        16152,5,2353,0,0,16152,16154,3,2300,1150,0,16153,16155,5,68,0,0,
        16154,16153,1,0,0,0,16154,16155,1,0,0,0,16155,16157,1,0,0,0,16156,
        16158,5,391,0,0,16157,16156,1,0,0,0,16157,16158,1,0,0,0,16158,16161,
        1,0,0,0,16159,16160,5,1163,0,0,16160,16162,5,559,0,0,16161,16159,
        1,0,0,0,16161,16162,1,0,0,0,16162,16165,1,0,0,0,16163,16164,5,1163,
        0,0,16164,16166,5,779,0,0,16165,16163,1,0,0,0,16165,16166,1,0,0,
        0,16166,16168,1,0,0,0,16167,16151,1,0,0,0,16168,16171,1,0,0,0,16169,
        16167,1,0,0,0,16169,16170,1,0,0,0,16170,16172,1,0,0,0,16171,16169,
        1,0,0,0,16172,16173,5,1590,0,0,16173,16174,3,2300,1150,0,16174,1853,
        1,0,0,0,16175,16176,5,331,0,0,16176,16177,3,2318,1159,0,16177,16178,
        5,1590,0,0,16178,16179,3,2300,1150,0,16179,16180,5,2052,0,0,16180,
        16181,3,2052,1026,0,16181,16182,5,368,0,0,16182,16183,3,2052,1026,
        0,16183,1855,1,0,0,0,16184,16185,3,2364,1182,0,16185,16186,5,45,
        0,0,16186,16187,5,2190,0,0,16187,16188,5,67,0,0,16188,16189,5,2347,
        0,0,16189,16190,3,1858,929,0,16190,16191,5,2348,0,0,16191,1857,1,
        0,0,0,16192,16193,5,2153,0,0,16193,16195,3,748,374,0,16194,16196,
        3,1860,930,0,16195,16194,1,0,0,0,16195,16196,1,0,0,0,16196,16198,
        1,0,0,0,16197,16199,3,1862,931,0,16198,16197,1,0,0,0,16198,16199,
        1,0,0,0,16199,16201,1,0,0,0,16200,16202,3,1866,933,0,16201,16200,
        1,0,0,0,16201,16202,1,0,0,0,16202,1859,1,0,0,0,16203,16204,5,632,
        0,0,16204,16205,5,2347,0,0,16205,16210,3,748,374,0,16206,16207,5,
        2353,0,0,16207,16209,3,748,374,0,16208,16206,1,0,0,0,16209,16212,
        1,0,0,0,16210,16208,1,0,0,0,16210,16211,1,0,0,0,16211,16213,1,0,
        0,0,16212,16210,1,0,0,0,16213,16214,5,2348,0,0,16214,1861,1,0,0,
        0,16215,16216,5,555,0,0,16216,16217,5,530,0,0,16217,16218,5,2347,
        0,0,16218,16223,3,1864,932,0,16219,16220,5,2353,0,0,16220,16222,
        3,1864,932,0,16221,16219,1,0,0,0,16222,16225,1,0,0,0,16223,16221,
        1,0,0,0,16223,16224,1,0,0,0,16224,16226,1,0,0,0,16225,16223,1,0,
        0,0,16226,16227,5,2348,0,0,16227,1863,1,0,0,0,16228,16231,5,880,
        0,0,16229,16231,3,748,374,0,16230,16228,1,0,0,0,16230,16229,1,0,
        0,0,16231,16232,1,0,0,0,16232,16233,5,2052,0,0,16233,16234,3,2048,
        1024,0,16234,1865,1,0,0,0,16235,16236,5,21,0,0,16236,16237,5,880,
        0,0,16237,16238,5,2347,0,0,16238,16243,3,1868,934,0,16239,16240,
        5,2353,0,0,16240,16242,3,1868,934,0,16241,16239,1,0,0,0,16242,16245,
        1,0,0,0,16243,16241,1,0,0,0,16243,16244,1,0,0,0,16244,16246,1,0,
        0,0,16245,16243,1,0,0,0,16246,16247,5,2348,0,0,16247,1867,1,0,0,
        0,16248,16249,3,2364,1182,0,16249,16250,5,67,0,0,16250,16251,5,2347,
        0,0,16251,16252,3,2052,1026,0,16252,16253,5,2348,0,0,16253,1869,
        1,0,0,0,16254,16258,3,1872,936,0,16255,16257,3,1874,937,0,16256,
        16255,1,0,0,0,16257,16260,1,0,0,0,16258,16256,1,0,0,0,16258,16259,
        1,0,0,0,16259,1871,1,0,0,0,16260,16258,1,0,0,0,16261,16267,3,1876,
        938,0,16262,16263,5,2347,0,0,16263,16264,3,1870,935,0,16264,16265,
        5,2348,0,0,16265,16267,1,0,0,0,16266,16261,1,0,0,0,16266,16262,1,
        0,0,0,16267,1873,1,0,0,0,16268,16270,5,2090,0,0,16269,16271,5,38,
        0,0,16270,16269,1,0,0,0,16270,16271,1,0,0,0,16271,16275,1,0,0,0,
        16272,16275,5,732,0,0,16273,16275,5,902,0,0,16274,16268,1,0,0,0,
        16274,16272,1,0,0,0,16274,16273,1,0,0,0,16275,16276,1,0,0,0,16276,
        16277,3,1872,936,0,16277,1875,1,0,0,0,16278,16280,5,1569,0,0,16279,
        16281,7,179,0,0,16280,16279,1,0,0,0,16280,16281,1,0,0,0,16281,16282,
        1,0,0,0,16282,16284,3,1878,939,0,16283,16285,3,2230,1115,0,16284,
        16283,1,0,0,0,16284,16285,1,0,0,0,16285,16287,1,0,0,0,16286,16288,
        3,1880,940,0,16287,16286,1,0,0,0,16287,16288,1,0,0,0,16288,16290,
        1,0,0,0,16289,16291,3,2226,1113,0,16290,16289,1,0,0,0,16290,16291,
        1,0,0,0,16291,16296,1,0,0,0,16292,16295,3,1922,961,0,16293,16295,
        3,1926,963,0,16294,16292,1,0,0,0,16294,16293,1,0,0,0,16295,16298,
        1,0,0,0,16296,16294,1,0,0,0,16296,16297,1,0,0,0,16297,16300,1,0,
        0,0,16298,16296,1,0,0,0,16299,16301,3,1938,969,0,16300,16299,1,0,
        0,0,16300,16301,1,0,0,0,16301,16303,1,0,0,0,16302,16304,3,1968,984,
        0,16303,16302,1,0,0,0,16303,16304,1,0,0,0,16304,16306,1,0,0,0,16305,
        16307,3,1972,986,0,16306,16305,1,0,0,0,16306,16307,1,0,0,0,16307,
        16309,1,0,0,0,16308,16310,3,1974,987,0,16309,16308,1,0,0,0,16309,
        16310,1,0,0,0,16310,1877,1,0,0,0,16311,16321,5,2350,0,0,16312,16317,
        3,1882,941,0,16313,16314,5,2353,0,0,16314,16316,3,1882,941,0,16315,
        16313,1,0,0,0,16316,16319,1,0,0,0,16317,16315,1,0,0,0,16317,16318,
        1,0,0,0,16318,16321,1,0,0,0,16319,16317,1,0,0,0,16320,16311,1,0,
        0,0,16320,16312,1,0,0,0,16321,1879,1,0,0,0,16322,16323,5,588,0,0,
        16323,16324,3,1884,942,0,16324,1881,1,0,0,0,16325,16326,3,2302,1151,
        0,16326,16327,5,2340,0,0,16327,16328,5,2350,0,0,16328,16334,1,0,
        0,0,16329,16331,3,2052,1026,0,16330,16332,3,2222,1111,0,16331,16330,
        1,0,0,0,16331,16332,1,0,0,0,16332,16334,1,0,0,0,16333,16325,1,0,
        0,0,16333,16329,1,0,0,0,16334,1883,1,0,0,0,16335,16340,3,1886,943,
        0,16336,16337,5,2353,0,0,16337,16339,3,1886,943,0,16338,16336,1,
        0,0,0,16339,16342,1,0,0,0,16340,16338,1,0,0,0,16340,16341,1,0,0,
        0,16341,1885,1,0,0,0,16342,16340,1,0,0,0,16343,16347,3,1888,944,
        0,16344,16346,3,1892,946,0,16345,16344,1,0,0,0,16346,16349,1,0,0,
        0,16347,16345,1,0,0,0,16347,16348,1,0,0,0,16348,16352,1,0,0,0,16349,
        16347,1,0,0,0,16350,16353,3,1904,952,0,16351,16353,3,1916,958,0,
        16352,16350,1,0,0,0,16352,16351,1,0,0,0,16352,16353,1,0,0,0,16353,
        1887,1,0,0,0,16354,16358,3,1890,945,0,16355,16357,3,1902,951,0,16356,
        16355,1,0,0,0,16357,16360,1,0,0,0,16358,16356,1,0,0,0,16358,16359,
        1,0,0,0,16359,16362,1,0,0,0,16360,16358,1,0,0,0,16361,16363,3,2224,
        1112,0,16362,16361,1,0,0,0,16362,16363,1,0,0,0,16363,1889,1,0,0,
        0,16364,16367,3,2038,1019,0,16365,16368,3,1904,952,0,16366,16368,
        3,1916,958,0,16367,16365,1,0,0,0,16367,16366,1,0,0,0,16367,16368,
        1,0,0,0,16368,16388,1,0,0,0,16369,16370,5,2347,0,0,16370,16374,3,
        1886,943,0,16371,16373,3,1874,937,0,16372,16371,1,0,0,0,16373,16376,
        1,0,0,0,16374,16372,1,0,0,0,16374,16375,1,0,0,0,16375,16377,1,0,
        0,0,16376,16374,1,0,0,0,16377,16380,5,2348,0,0,16378,16381,3,1904,
        952,0,16379,16381,3,1916,958,0,16380,16378,1,0,0,0,16380,16379,1,
        0,0,0,16380,16381,1,0,0,0,16381,16388,1,0,0,0,16382,16383,5,1192,
        0,0,16383,16384,5,2347,0,0,16384,16385,3,2038,1019,0,16385,16386,
        5,2348,0,0,16386,16388,1,0,0,0,16387,16364,1,0,0,0,16387,16369,1,
        0,0,0,16387,16382,1,0,0,0,16388,1891,1,0,0,0,16389,16391,3,1900,
        950,0,16390,16389,1,0,0,0,16390,16391,1,0,0,0,16391,16393,1,0,0,
        0,16392,16394,7,180,0,0,16393,16392,1,0,0,0,16393,16394,1,0,0,0,
        16394,16397,1,0,0,0,16395,16398,5,707,0,0,16396,16398,3,1898,949,
        0,16397,16395,1,0,0,0,16397,16396,1,0,0,0,16397,16398,1,0,0,0,16398,
        16399,1,0,0,0,16399,16400,5,748,0,0,16400,16402,3,1888,944,0,16401,
        16403,3,1900,950,0,16402,16401,1,0,0,0,16402,16403,1,0,0,0,16403,
        16408,1,0,0,0,16404,16407,3,1894,947,0,16405,16407,3,1896,948,0,
        16406,16404,1,0,0,0,16406,16405,1,0,0,0,16407,16410,1,0,0,0,16408,
        16406,1,0,0,0,16408,16409,1,0,0,0,16409,16415,1,0,0,0,16410,16408,
        1,0,0,0,16411,16412,7,181,0,0,16412,16413,5,60,0,0,16413,16415,3,
        1888,944,0,16414,16390,1,0,0,0,16414,16411,1,0,0,0,16415,1893,1,
        0,0,0,16416,16417,5,1193,0,0,16417,16418,3,2048,1024,0,16418,1895,
        1,0,0,0,16419,16420,5,2153,0,0,16420,16421,3,2320,1160,0,16421,1897,
        1,0,0,0,16422,16424,7,182,0,0,16423,16425,5,1243,0,0,16424,16423,
        1,0,0,0,16424,16425,1,0,0,0,16425,1899,1,0,0,0,16426,16427,5,1275,
        0,0,16427,16435,5,154,0,0,16428,16431,5,2347,0,0,16429,16432,3,1870,
        935,0,16430,16432,3,2050,1025,0,16431,16429,1,0,0,0,16431,16430,
        1,0,0,0,16431,16432,1,0,0,0,16432,16433,1,0,0,0,16433,16436,5,2348,
        0,0,16434,16436,3,2050,1025,0,16435,16428,1,0,0,0,16435,16434,1,
        0,0,0,16436,1901,1,0,0,0,16437,16445,5,2187,0,0,16438,16439,5,1313,
        0,0,16439,16440,5,580,0,0,16440,16441,3,2300,1150,0,16441,16442,
        5,115,0,0,16442,16446,1,0,0,0,16443,16444,5,115,0,0,16444,16446,
        7,79,0,0,16445,16438,1,0,0,0,16445,16443,1,0,0,0,16446,16447,1,0,
        0,0,16447,16448,3,2052,1026,0,16448,16449,5,49,0,0,16449,16450,3,
        2052,1026,0,16450,16463,1,0,0,0,16451,16452,5,67,0,0,16452,16460,
        5,1180,0,0,16453,16454,7,183,0,0,16454,16461,3,2052,1026,0,16455,
        16456,5,1313,0,0,16456,16457,5,580,0,0,16457,16458,3,2300,1150,0,
        16458,16459,3,2052,1026,0,16459,16461,1,0,0,0,16460,16453,1,0,0,
        0,16460,16455,1,0,0,0,16461,16463,1,0,0,0,16462,16437,1,0,0,0,16462,
        16451,1,0,0,0,16463,1903,1,0,0,0,16464,16466,5,1324,0,0,16465,16467,
        5,2254,0,0,16466,16465,1,0,0,0,16466,16467,1,0,0,0,16467,16468,1,
        0,0,0,16468,16469,5,2347,0,0,16469,16474,3,1906,953,0,16470,16471,
        5,2353,0,0,16471,16473,3,1906,953,0,16472,16470,1,0,0,0,16473,16476,
        1,0,0,0,16474,16472,1,0,0,0,16474,16475,1,0,0,0,16475,16477,1,0,
        0,0,16476,16474,1,0,0,0,16477,16478,3,1908,954,0,16478,16479,3,1910,
        955,0,16479,16480,5,2348,0,0,16480,1905,1,0,0,0,16481,16488,3,2154,
        1077,0,16482,16483,3,2260,1130,0,16483,16484,5,2347,0,0,16484,16485,
        3,2052,1026,0,16485,16486,5,2348,0,0,16486,16488,1,0,0,0,16487,16481,
        1,0,0,0,16487,16482,1,0,0,0,16488,16490,1,0,0,0,16489,16491,3,2222,
        1111,0,16490,16489,1,0,0,0,16490,16491,1,0,0,0,16491,1907,1,0,0,
        0,16492,16495,5,580,0,0,16493,16496,3,2300,1150,0,16494,16496,3,
        2320,1160,0,16495,16493,1,0,0,0,16495,16494,1,0,0,0,16496,1909,1,
        0,0,0,16497,16498,5,696,0,0,16498,16516,5,2347,0,0,16499,16517,3,
        1870,935,0,16500,16505,5,54,0,0,16501,16502,5,2353,0,0,16502,16504,
        5,54,0,0,16503,16501,1,0,0,0,16504,16507,1,0,0,0,16505,16503,1,0,
        0,0,16505,16506,1,0,0,0,16506,16517,1,0,0,0,16507,16505,1,0,0,0,
        16508,16513,3,1912,956,0,16509,16510,5,2353,0,0,16510,16512,3,1912,
        956,0,16511,16509,1,0,0,0,16512,16515,1,0,0,0,16513,16511,1,0,0,
        0,16513,16514,1,0,0,0,16514,16517,1,0,0,0,16515,16513,1,0,0,0,16516,
        16499,1,0,0,0,16516,16500,1,0,0,0,16516,16508,1,0,0,0,16517,16518,
        1,0,0,0,16518,16519,5,2348,0,0,16519,1911,1,0,0,0,16520,16522,3,
        1914,957,0,16521,16523,3,2222,1111,0,16522,16521,1,0,0,0,16522,16523,
        1,0,0,0,16523,1913,1,0,0,0,16524,16531,3,2052,1026,0,16525,16527,
        5,2347,0,0,16526,16528,3,2050,1025,0,16527,16526,1,0,0,0,16527,16528,
        1,0,0,0,16528,16529,1,0,0,0,16529,16531,5,2348,0,0,16530,16524,1,
        0,0,0,16530,16525,1,0,0,0,16531,1915,1,0,0,0,16532,16535,5,2102,
        0,0,16533,16534,7,184,0,0,16534,16536,5,1163,0,0,16535,16533,1,0,
        0,0,16535,16536,1,0,0,0,16536,16537,1,0,0,0,16537,16540,5,2347,0,
        0,16538,16541,3,2300,1150,0,16539,16541,3,2320,1160,0,16540,16538,
        1,0,0,0,16540,16539,1,0,0,0,16541,16542,1,0,0,0,16542,16543,3,1908,
        954,0,16543,16544,3,1918,959,0,16544,16545,5,2348,0,0,16545,1917,
        1,0,0,0,16546,16547,5,696,0,0,16547,16548,5,2347,0,0,16548,16553,
        3,1920,960,0,16549,16550,5,2353,0,0,16550,16552,3,1920,960,0,16551,
        16549,1,0,0,0,16552,16555,1,0,0,0,16553,16551,1,0,0,0,16553,16554,
        1,0,0,0,16554,16556,1,0,0,0,16555,16553,1,0,0,0,16556,16557,5,2348,
        0,0,16557,1919,1,0,0,0,16558,16561,3,2300,1150,0,16559,16561,3,2320,
        1160,0,16560,16558,1,0,0,0,16560,16559,1,0,0,0,16561,16577,1,0,0,
        0,16562,16575,5,67,0,0,16563,16576,3,2354,1177,0,16564,16565,5,2347,
        0,0,16565,16570,3,2354,1177,0,16566,16567,5,2353,0,0,16567,16569,
        3,2354,1177,0,16568,16566,1,0,0,0,16569,16572,1,0,0,0,16570,16568,
        1,0,0,0,16570,16571,1,0,0,0,16571,16573,1,0,0,0,16572,16570,1,0,
        0,0,16573,16574,5,2348,0,0,16574,16576,1,0,0,0,16575,16563,1,0,0,
        0,16575,16564,1,0,0,0,16576,16578,1,0,0,0,16577,16562,1,0,0,0,16577,
        16578,1,0,0,0,16578,1921,1,0,0,0,16579,16580,5,265,0,0,16580,16582,
        5,154,0,0,16581,16583,5,1027,0,0,16582,16581,1,0,0,0,16582,16583,
        1,0,0,0,16583,16584,1,0,0,0,16584,16586,3,2048,1024,0,16585,16587,
        3,1924,962,0,16586,16585,1,0,0,0,16586,16587,1,0,0,0,16587,16597,
        1,0,0,0,16588,16589,3,1924,962,0,16589,16590,5,265,0,0,16590,16592,
        5,154,0,0,16591,16593,5,1027,0,0,16592,16591,1,0,0,0,16592,16593,
        1,0,0,0,16593,16594,1,0,0,0,16594,16595,3,2048,1024,0,16595,16597,
        1,0,0,0,16596,16579,1,0,0,0,16596,16588,1,0,0,0,16597,1923,1,0,0,
        0,16598,16599,5,1654,0,0,16599,16600,5,2212,0,0,16600,16601,3,2048,
        1024,0,16601,1925,1,0,0,0,16602,16603,5,609,0,0,16603,16604,5,154,
        0,0,16604,16609,3,1928,964,0,16605,16606,5,2353,0,0,16606,16608,
        3,1928,964,0,16607,16605,1,0,0,0,16608,16611,1,0,0,0,16609,16607,
        1,0,0,0,16609,16610,1,0,0,0,16610,16613,1,0,0,0,16611,16609,1,0,
        0,0,16612,16614,3,1936,968,0,16613,16612,1,0,0,0,16613,16614,1,0,
        0,0,16614,16629,1,0,0,0,16615,16626,3,1936,968,0,16616,16617,5,609,
        0,0,16617,16618,5,154,0,0,16618,16623,3,1928,964,0,16619,16620,5,
        2353,0,0,16620,16622,3,1928,964,0,16621,16619,1,0,0,0,16622,16625,
        1,0,0,0,16623,16621,1,0,0,0,16623,16624,1,0,0,0,16624,16627,1,0,
        0,0,16625,16623,1,0,0,0,16626,16616,1,0,0,0,16626,16627,1,0,0,0,
        16627,16629,1,0,0,0,16628,16602,1,0,0,0,16628,16615,1,0,0,0,16629,
        1927,1,0,0,0,16630,16634,3,1932,966,0,16631,16634,3,1930,965,0,16632,
        16634,3,2052,1026,0,16633,16630,1,0,0,0,16633,16631,1,0,0,0,16633,
        16632,1,0,0,0,16634,1929,1,0,0,0,16635,16636,7,185,0,0,16636,16637,
        5,2347,0,0,16637,16642,3,1934,967,0,16638,16639,5,2353,0,0,16639,
        16641,3,1934,967,0,16640,16638,1,0,0,0,16641,16644,1,0,0,0,16642,
        16640,1,0,0,0,16642,16643,1,0,0,0,16643,16645,1,0,0,0,16644,16642,
        1,0,0,0,16645,16646,5,2348,0,0,16646,1931,1,0,0,0,16647,16648,5,
        611,0,0,16648,16649,5,1591,0,0,16649,16650,5,2347,0,0,16650,16655,
        3,1934,967,0,16651,16652,5,2353,0,0,16652,16654,3,1934,967,0,16653,
        16651,1,0,0,0,16654,16657,1,0,0,0,16655,16653,1,0,0,0,16655,16656,
        1,0,0,0,16656,16658,1,0,0,0,16657,16655,1,0,0,0,16658,16659,5,2348,
        0,0,16659,1933,1,0,0,0,16660,16668,3,1930,965,0,16661,16663,5,2347,
        0,0,16662,16664,3,2050,1025,0,16663,16662,1,0,0,0,16663,16664,1,
        0,0,0,16664,16665,1,0,0,0,16665,16668,5,2348,0,0,16666,16668,3,2052,
        1026,0,16667,16660,1,0,0,0,16667,16661,1,0,0,0,16667,16666,1,0,0,
        0,16668,1935,1,0,0,0,16669,16670,5,622,0,0,16670,16671,3,2048,1024,
        0,16671,1937,1,0,0,0,16672,16676,5,917,0,0,16673,16675,3,1940,970,
        0,16674,16673,1,0,0,0,16675,16678,1,0,0,0,16676,16674,1,0,0,0,16676,
        16677,1,0,0,0,16677,16680,1,0,0,0,16678,16676,1,0,0,0,16679,16681,
        3,1942,971,0,16680,16679,1,0,0,0,16680,16681,1,0,0,0,16681,16685,
        1,0,0,0,16682,16684,3,1944,972,0,16683,16682,1,0,0,0,16684,16687,
        1,0,0,0,16685,16683,1,0,0,0,16685,16686,1,0,0,0,16686,16688,1,0,
        0,0,16687,16685,1,0,0,0,16688,16689,3,1946,973,0,16689,1939,1,0,
        0,0,16690,16691,7,186,0,0,16691,16699,5,952,0,0,16692,16696,5,2091,
        0,0,16693,16697,5,398,0,0,16694,16695,5,1613,0,0,16695,16697,5,1449,
        0,0,16696,16693,1,0,0,0,16696,16694,1,0,0,0,16697,16699,1,0,0,0,
        16698,16690,1,0,0,0,16698,16692,1,0,0,0,16699,1941,1,0,0,0,16700,
        16701,5,1508,0,0,16701,16702,7,187,0,0,16702,16703,5,1529,0,0,16703,
        1943,1,0,0,0,16704,16705,5,1449,0,0,16705,16706,3,2254,1127,0,16706,
        16707,5,1193,0,0,16707,16708,5,2347,0,0,16708,16709,3,1870,935,0,
        16709,16710,5,2348,0,0,16710,16714,3,1948,974,0,16711,16713,3,1940,
        970,0,16712,16711,1,0,0,0,16713,16716,1,0,0,0,16714,16712,1,0,0,
        0,16714,16715,1,0,0,0,16715,1945,1,0,0,0,16716,16714,1,0,0,0,16717,
        16718,5,849,0,0,16718,16720,3,2256,1128,0,16719,16717,1,0,0,0,16719,
        16720,1,0,0,0,16720,16721,1,0,0,0,16721,16725,3,1948,974,0,16722,
        16724,3,1940,970,0,16723,16722,1,0,0,0,16724,16727,1,0,0,0,16725,
        16723,1,0,0,0,16725,16726,1,0,0,0,16726,16728,1,0,0,0,16727,16725,
        1,0,0,0,16728,16729,3,1956,978,0,16729,1947,1,0,0,0,16730,16732,
        3,1950,975,0,16731,16730,1,0,0,0,16731,16732,1,0,0,0,16732,16733,
        1,0,0,0,16733,16734,5,398,0,0,16734,16735,5,154,0,0,16735,16736,
        3,1952,976,0,16736,16737,5,880,0,0,16737,16738,3,1952,976,0,16738,
        1949,1,0,0,0,16739,16740,5,1275,0,0,16740,16741,5,154,0,0,16741,
        16742,3,1952,976,0,16742,1951,1,0,0,0,16743,16744,5,2347,0,0,16744,
        16749,3,1954,977,0,16745,16746,5,2353,0,0,16746,16748,3,1954,977,
        0,16747,16745,1,0,0,0,16748,16751,1,0,0,0,16749,16747,1,0,0,0,16749,
        16750,1,0,0,0,16750,16752,1,0,0,0,16751,16749,1,0,0,0,16752,16753,
        5,2348,0,0,16753,1953,1,0,0,0,16754,16757,3,2052,1026,0,16755,16757,
        3,1876,938,0,16756,16754,1,0,0,0,16756,16755,1,0,0,0,16757,16759,
        1,0,0,0,16758,16760,3,2222,1111,0,16759,16758,1,0,0,0,16759,16760,
        1,0,0,0,16760,1955,1,0,0,0,16761,16763,3,1958,979,0,16762,16761,
        1,0,0,0,16762,16763,1,0,0,0,16763,16764,1,0,0,0,16764,16773,5,2347,
        0,0,16765,16770,3,1960,980,0,16766,16767,5,2353,0,0,16767,16769,
        3,1960,980,0,16768,16766,1,0,0,0,16769,16772,1,0,0,0,16770,16768,
        1,0,0,0,16770,16771,1,0,0,0,16771,16774,1,0,0,0,16772,16770,1,0,
        0,0,16773,16765,1,0,0,0,16773,16774,1,0,0,0,16774,16775,1,0,0,0,
        16775,16776,5,2348,0,0,16776,1957,1,0,0,0,16777,16783,5,1533,0,0,
        16778,16784,5,2114,0,0,16779,16781,5,2120,0,0,16780,16782,5,38,0,
        0,16781,16780,1,0,0,0,16781,16782,1,0,0,0,16782,16784,1,0,0,0,16783,
        16778,1,0,0,0,16783,16779,1,0,0,0,16783,16784,1,0,0,0,16784,16787,
        1,0,0,0,16785,16786,7,188,0,0,16786,16788,5,1233,0,0,16787,16785,
        1,0,0,0,16787,16788,1,0,0,0,16788,16790,1,0,0,0,16789,16791,3,1964,
        982,0,16790,16789,1,0,0,0,16790,16791,1,0,0,0,16791,1959,1,0,0,0,
        16792,16798,5,2114,0,0,16793,16795,5,2120,0,0,16794,16796,5,38,0,
        0,16795,16794,1,0,0,0,16795,16796,1,0,0,0,16796,16798,1,0,0,0,16797,
        16792,1,0,0,0,16797,16793,1,0,0,0,16797,16798,1,0,0,0,16798,16799,
        1,0,0,0,16799,16801,3,1962,981,0,16800,16802,3,1968,984,0,16801,
        16800,1,0,0,0,16801,16802,1,0,0,0,16802,16803,1,0,0,0,16803,16804,
        5,2369,0,0,16804,16805,3,2052,1026,0,16805,1961,1,0,0,0,16806,16807,
        3,2080,1040,0,16807,1963,1,0,0,0,16808,16809,5,744,0,0,16809,16810,
        5,2347,0,0,16810,16811,3,2052,1026,0,16811,16813,5,2348,0,0,16812,
        16814,3,1966,983,0,16813,16812,1,0,0,0,16813,16814,1,0,0,0,16814,
        1965,1,0,0,0,16815,16816,5,2109,0,0,16816,16817,5,2347,0,0,16817,
        16818,3,2048,1024,0,16818,16819,5,2348,0,0,16819,1967,1,0,0,0,16820,
        16822,5,1233,0,0,16821,16823,5,1604,0,0,16822,16821,1,0,0,0,16822,
        16823,1,0,0,0,16823,16824,1,0,0,0,16824,16825,5,154,0,0,16825,16830,
        3,1970,985,0,16826,16827,5,2353,0,0,16827,16829,3,1970,985,0,16828,
        16826,1,0,0,0,16829,16832,1,0,0,0,16830,16828,1,0,0,0,16830,16831,
        1,0,0,0,16831,1969,1,0,0,0,16832,16830,1,0,0,0,16833,16835,3,2052,
        1026,0,16834,16836,7,52,0,0,16835,16834,1,0,0,0,16835,16836,1,0,
        0,0,16836,16839,1,0,0,0,16837,16838,5,1163,0,0,16838,16840,7,53,
        0,0,16839,16837,1,0,0,0,16839,16840,1,0,0,0,16840,1971,1,0,0,0,16841,
        16842,5,1179,0,0,16842,16843,3,2052,1026,0,16843,16844,7,189,0,0,
        16844,1973,1,0,0,0,16845,16846,5,549,0,0,16846,16851,7,190,0,0,16847,
        16849,3,2052,1026,0,16848,16850,5,1305,0,0,16849,16848,1,0,0,0,16849,
        16850,1,0,0,0,16850,16852,1,0,0,0,16851,16847,1,0,0,0,16851,16852,
        1,0,0,0,16852,16853,1,0,0,0,16853,16857,7,189,0,0,16854,16858,5,
        1192,0,0,16855,16856,5,2212,0,0,16856,16858,5,2017,0,0,16857,16854,
        1,0,0,0,16857,16855,1,0,0,0,16858,1975,1,0,0,0,16859,16860,5,580,
        0,0,16860,16862,5,2114,0,0,16861,16863,3,1978,989,0,16862,16861,
        1,0,0,0,16862,16863,1,0,0,0,16863,16865,1,0,0,0,16864,16866,3,1980,
        990,0,16865,16864,1,0,0,0,16865,16866,1,0,0,0,16866,1977,1,0,0,0,
        16867,16868,5,1180,0,0,16868,16869,3,2318,1159,0,16869,1979,1,0,
        0,0,16870,16871,5,1619,0,0,16871,16876,5,827,0,0,16872,16876,5,1153,
        0,0,16873,16874,5,2197,0,0,16874,16876,3,2052,1026,0,16875,16870,
        1,0,0,0,16875,16872,1,0,0,0,16875,16873,1,0,0,0,16876,1981,1,0,0,
        0,16877,16878,5,2114,0,0,16878,16879,3,2028,1014,0,16879,16881,3,
        1984,992,0,16880,16882,3,2226,1113,0,16881,16880,1,0,0,0,16881,16882,
        1,0,0,0,16882,16884,1,0,0,0,16883,16885,3,2030,1015,0,16884,16883,
        1,0,0,0,16884,16885,1,0,0,0,16885,16887,1,0,0,0,16886,16888,3,2032,
        1016,0,16887,16886,1,0,0,0,16887,16888,1,0,0,0,16888,1983,1,0,0,
        0,16889,16905,5,1590,0,0,16890,16895,3,1986,993,0,16891,16892,5,
        2353,0,0,16892,16894,3,1986,993,0,16893,16891,1,0,0,0,16894,16897,
        1,0,0,0,16895,16893,1,0,0,0,16895,16896,1,0,0,0,16896,16906,1,0,
        0,0,16897,16895,1,0,0,0,16898,16899,5,2165,0,0,16899,16900,5,2347,
        0,0,16900,16901,3,2362,1181,0,16901,16902,5,2348,0,0,16902,16903,
        5,2369,0,0,16903,16904,3,2052,1026,0,16904,16906,1,0,0,0,16905,16890,
        1,0,0,0,16905,16898,1,0,0,0,16906,1985,1,0,0,0,16907,16908,3,2300,
        1150,0,16908,16909,5,2369,0,0,16909,16910,3,2052,1026,0,16910,16916,
        1,0,0,0,16911,16912,3,2320,1160,0,16912,16913,5,2369,0,0,16913,16914,
        3,1870,935,0,16914,16916,1,0,0,0,16915,16907,1,0,0,0,16915,16911,
        1,0,0,0,16916,1987,1,0,0,0,16917,16919,5,381,0,0,16918,16920,5,588,
        0,0,16919,16918,1,0,0,0,16919,16920,1,0,0,0,16920,16921,1,0,0,0,
        16921,16923,3,2028,1014,0,16922,16924,3,2226,1113,0,16923,16922,
        1,0,0,0,16923,16924,1,0,0,0,16924,16926,1,0,0,0,16925,16927,3,2030,
        1015,0,16926,16925,1,0,0,0,16926,16927,1,0,0,0,16927,16929,1,0,0,
        0,16928,16930,3,2032,1016,0,16929,16928,1,0,0,0,16929,16930,1,0,
        0,0,16930,1989,1,0,0,0,16931,16934,5,713,0,0,16932,16935,3,1992,
        996,0,16933,16935,3,1994,997,0,16934,16932,1,0,0,0,16934,16933,1,
        0,0,0,16935,1991,1,0,0,0,16936,16942,3,2004,1002,0,16937,16939,3,
        2006,1003,0,16938,16940,3,2030,1015,0,16939,16938,1,0,0,0,16939,
        16940,1,0,0,0,16940,16943,1,0,0,0,16941,16943,3,1844,922,0,16942,
        16937,1,0,0,0,16942,16941,1,0,0,0,16943,16945,1,0,0,0,16944,16946,
        3,2032,1016,0,16945,16944,1,0,0,0,16945,16946,1,0,0,0,16946,1993,
        1,0,0,0,16947,16949,5,38,0,0,16948,16950,3,1996,998,0,16949,16948,
        1,0,0,0,16950,16951,1,0,0,0,16951,16949,1,0,0,0,16951,16952,1,0,
        0,0,16952,16955,1,0,0,0,16953,16955,3,1998,999,0,16954,16947,1,0,
        0,0,16954,16953,1,0,0,0,16955,16956,1,0,0,0,16956,16957,3,1844,922,
        0,16957,1995,1,0,0,0,16958,16960,3,2004,1002,0,16959,16961,3,2006,
        1003,0,16960,16959,1,0,0,0,16960,16961,1,0,0,0,16961,16963,1,0,0,
        0,16962,16964,3,2032,1016,0,16963,16962,1,0,0,0,16963,16964,1,0,
        0,0,16964,1997,1,0,0,0,16965,16967,7,191,0,0,16966,16965,1,0,0,0,
        16966,16967,1,0,0,0,16967,16969,1,0,0,0,16968,16970,3,2000,1000,
        0,16969,16968,1,0,0,0,16970,16971,1,0,0,0,16971,16969,1,0,0,0,16971,
        16972,1,0,0,0,16972,16974,1,0,0,0,16973,16975,3,2002,1001,0,16974,
        16973,1,0,0,0,16974,16975,1,0,0,0,16975,1999,1,0,0,0,16976,16977,
        5,2204,0,0,16977,16978,3,2048,1024,0,16978,16980,5,2012,0,0,16979,
        16981,3,1996,998,0,16980,16979,1,0,0,0,16981,16982,1,0,0,0,16982,
        16980,1,0,0,0,16982,16983,1,0,0,0,16983,2001,1,0,0,0,16984,16986,
        5,460,0,0,16985,16987,3,1996,998,0,16986,16985,1,0,0,0,16987,16988,
        1,0,0,0,16988,16986,1,0,0,0,16988,16989,1,0,0,0,16989,2003,1,0,0,
        0,16990,16991,5,735,0,0,16991,16993,3,2028,1014,0,16992,16994,3,
        2320,1160,0,16993,16992,1,0,0,0,16993,16994,1,0,0,0,16994,2005,1,
        0,0,0,16995,17002,5,2164,0,0,16996,17003,5,2378,0,0,16997,16998,
        5,2347,0,0,16998,16999,3,2050,1025,0,16999,17000,5,2348,0,0,17000,
        17003,1,0,0,0,17001,17003,3,2092,1046,0,17002,16996,1,0,0,0,17002,
        16997,1,0,0,0,17002,17001,1,0,0,0,17003,2007,1,0,0,0,17004,17005,
        5,892,0,0,17005,17006,5,735,0,0,17006,17008,3,2302,1151,0,17007,
        17009,3,2224,1112,0,17008,17007,1,0,0,0,17008,17009,1,0,0,0,17009,
        17010,1,0,0,0,17010,17011,5,2153,0,0,17011,17012,3,2018,1009,0,17012,
        17013,5,1193,0,0,17013,17014,5,2347,0,0,17014,17015,3,2048,1024,
        0,17015,17024,5,2348,0,0,17016,17018,3,2010,1005,0,17017,17019,3,
        2016,1008,0,17018,17017,1,0,0,0,17018,17019,1,0,0,0,17019,17025,
        1,0,0,0,17020,17022,3,2016,1008,0,17021,17023,3,2010,1005,0,17022,
        17021,1,0,0,0,17022,17023,1,0,0,0,17023,17025,1,0,0,0,17024,17016,
        1,0,0,0,17024,17020,1,0,0,0,17024,17025,1,0,0,0,17025,17027,1,0,
        0,0,17026,17028,3,2032,1016,0,17027,17026,1,0,0,0,17027,17028,1,
        0,0,0,17028,2009,1,0,0,0,17029,17030,5,2204,0,0,17030,17031,5,860,
        0,0,17031,17032,5,2012,0,0,17032,17033,5,2114,0,0,17033,17034,5,
        1590,0,0,17034,17039,3,2012,1006,0,17035,17036,5,2353,0,0,17036,
        17038,3,2012,1006,0,17037,17035,1,0,0,0,17038,17041,1,0,0,0,17039,
        17037,1,0,0,0,17039,17040,1,0,0,0,17040,17043,1,0,0,0,17041,17039,
        1,0,0,0,17042,17044,3,2226,1113,0,17043,17042,1,0,0,0,17043,17044,
        1,0,0,0,17044,17046,1,0,0,0,17045,17047,3,2014,1007,0,17046,17045,
        1,0,0,0,17046,17047,1,0,0,0,17047,2011,1,0,0,0,17048,17049,3,2300,
        1150,0,17049,17050,5,2369,0,0,17050,17051,3,2052,1026,0,17051,2013,
        1,0,0,0,17052,17053,5,381,0,0,17053,17054,3,2226,1113,0,17054,2015,
        1,0,0,0,17055,17056,5,2204,0,0,17056,17057,5,1138,0,0,17057,17058,
        5,860,0,0,17058,17059,5,2012,0,0,17059,17061,5,713,0,0,17060,17062,
        3,2320,1160,0,17061,17060,1,0,0,0,17061,17062,1,0,0,0,17062,17063,
        1,0,0,0,17063,17065,3,2006,1003,0,17064,17066,3,2226,1113,0,17065,
        17064,1,0,0,0,17065,17066,1,0,0,0,17066,2017,1,0,0,0,17067,17073,
        3,2302,1151,0,17068,17069,5,2347,0,0,17069,17070,3,1844,922,0,17070,
        17071,5,2348,0,0,17071,17073,1,0,0,0,17072,17067,1,0,0,0,17072,17068,
        1,0,0,0,17073,17075,1,0,0,0,17074,17076,3,2224,1112,0,17075,17074,
        1,0,0,0,17075,17076,1,0,0,0,17076,2019,1,0,0,0,17077,17078,5,829,
        0,0,17078,17079,5,1999,0,0,17079,17084,3,2024,1012,0,17080,17081,
        5,2353,0,0,17081,17083,3,2024,1012,0,17082,17080,1,0,0,0,17083,17086,
        1,0,0,0,17084,17082,1,0,0,0,17084,17085,1,0,0,0,17085,17087,1,0,
        0,0,17086,17084,1,0,0,0,17087,17088,5,696,0,0,17088,17089,3,2026,
        1013,0,17089,17091,5,923,0,0,17090,17092,3,2022,1011,0,17091,17090,
        1,0,0,0,17091,17092,1,0,0,0,17092,2021,1,0,0,0,17093,17094,5,2197,
        0,0,17094,17097,3,2052,1026,0,17095,17097,5,1153,0,0,17096,17093,
        1,0,0,0,17096,17095,1,0,0,0,17097,2023,1,0,0,0,17098,17100,3,2302,
        1151,0,17099,17101,3,2220,1110,0,17100,17099,1,0,0,0,17100,17101,
        1,0,0,0,17101,2025,1,0,0,0,17102,17103,5,1528,0,0,17103,17115,5,
        1598,0,0,17104,17105,5,1528,0,0,17105,17115,5,504,0,0,17106,17108,
        5,1598,0,0,17107,17109,5,2114,0,0,17108,17107,1,0,0,0,17108,17109,
        1,0,0,0,17109,17115,1,0,0,0,17110,17111,5,1598,0,0,17111,17112,5,
        1528,0,0,17112,17115,5,504,0,0,17113,17115,5,504,0,0,17114,17102,
        1,0,0,0,17114,17104,1,0,0,0,17114,17106,1,0,0,0,17114,17110,1,0,
        0,0,17114,17113,1,0,0,0,17115,2027,1,0,0,0,17116,17123,3,2038,1019,
        0,17117,17118,5,1192,0,0,17118,17119,5,2347,0,0,17119,17120,3,2038,
        1019,0,17120,17121,5,2348,0,0,17121,17123,1,0,0,0,17122,17116,1,
        0,0,0,17122,17117,1,0,0,0,17123,17125,1,0,0,0,17124,17126,3,2224,
        1112,0,17125,17124,1,0,0,0,17125,17126,1,0,0,0,17126,2029,1,0,0,
        0,17127,17128,7,175,0,0,17128,17129,3,2050,1025,0,17129,17130,3,
        2230,1115,0,17130,2031,1,0,0,0,17131,17132,5,836,0,0,17132,17134,
        5,486,0,0,17133,17135,3,2034,1017,0,17134,17133,1,0,0,0,17134,17135,
        1,0,0,0,17135,17137,1,0,0,0,17136,17138,3,2052,1026,0,17137,17136,
        1,0,0,0,17137,17138,1,0,0,0,17138,17140,1,0,0,0,17139,17141,3,2036,
        1018,0,17140,17139,1,0,0,0,17140,17141,1,0,0,0,17141,2033,1,0,0,
        0,17142,17143,5,735,0,0,17143,17144,3,2302,1151,0,17144,2035,1,0,
        0,0,17145,17146,5,1471,0,0,17146,17149,5,810,0,0,17147,17150,5,2093,
        0,0,17148,17150,3,2052,1026,0,17149,17147,1,0,0,0,17149,17148,1,
        0,0,0,17150,2037,1,0,0,0,17151,17180,3,2040,1020,0,17152,17153,5,
        2347,0,0,17153,17155,3,1844,922,0,17154,17156,3,2042,1021,0,17155,
        17154,1,0,0,0,17155,17156,1,0,0,0,17156,17157,1,0,0,0,17157,17158,
        5,2348,0,0,17158,17180,1,0,0,0,17159,17161,3,2302,1151,0,17160,17162,
        3,1860,930,0,17161,17160,1,0,0,0,17161,17162,1,0,0,0,17162,17164,
        1,0,0,0,17163,17165,3,2044,1022,0,17164,17163,1,0,0,0,17164,17165,
        1,0,0,0,17165,17180,1,0,0,0,17166,17169,3,2120,1060,0,17167,17168,
        5,67,0,0,17168,17170,3,2362,1181,0,17169,17167,1,0,0,0,17169,17170,
        1,0,0,0,17170,17180,1,0,0,0,17171,17172,5,781,0,0,17172,17173,5,
        2347,0,0,17173,17175,3,1870,935,0,17174,17176,3,2042,1021,0,17175,
        17174,1,0,0,0,17175,17176,1,0,0,0,17176,17177,1,0,0,0,17177,17178,
        5,2348,0,0,17178,17180,1,0,0,0,17179,17151,1,0,0,0,17179,17152,1,
        0,0,0,17179,17159,1,0,0,0,17179,17166,1,0,0,0,17179,17171,1,0,0,
        0,17180,2039,1,0,0,0,17181,17192,7,192,0,0,17182,17183,5,2347,0,
        0,17183,17184,3,1870,935,0,17184,17185,5,2348,0,0,17185,17193,1,
        0,0,0,17186,17187,5,2347,0,0,17187,17188,3,2052,1026,0,17188,17190,
        5,2348,0,0,17189,17191,3,2368,1184,0,17190,17189,1,0,0,0,17190,17191,
        1,0,0,0,17191,17193,1,0,0,0,17192,17182,1,0,0,0,17192,17186,1,0,
        0,0,17193,2041,1,0,0,0,17194,17203,5,2212,0,0,17195,17196,5,1429,
        0,0,17196,17204,5,1192,0,0,17197,17198,5,190,0,0,17198,17201,5,1206,
        0,0,17199,17200,5,271,0,0,17200,17202,3,2268,1134,0,17201,17199,
        1,0,0,0,17201,17202,1,0,0,0,17202,17204,1,0,0,0,17203,17195,1,0,
        0,0,17203,17197,1,0,0,0,17204,2043,1,0,0,0,17205,17207,5,1536,0,
        0,17206,17208,5,137,0,0,17207,17206,1,0,0,0,17207,17208,1,0,0,0,
        17208,17209,1,0,0,0,17209,17210,5,2347,0,0,17210,17213,3,2052,1026,
        0,17211,17212,5,2353,0,0,17212,17214,3,2052,1026,0,17213,17211,1,
        0,0,0,17213,17214,1,0,0,0,17214,17215,1,0,0,0,17215,17217,5,2348,
        0,0,17216,17218,3,2046,1023,0,17217,17216,1,0,0,0,17217,17218,1,
        0,0,0,17218,2045,1,0,0,0,17219,17220,5,1564,0,0,17220,17221,5,2347,
        0,0,17221,17222,3,2052,1026,0,17222,17223,5,2348,0,0,17223,2047,
        1,0,0,0,17224,17231,3,2052,1026,0,17225,17226,5,751,0,0,17226,17227,
        5,2347,0,0,17227,17228,3,2050,1025,0,17228,17229,5,2348,0,0,17229,
        17231,1,0,0,0,17230,17224,1,0,0,0,17230,17225,1,0,0,0,17231,2049,
        1,0,0,0,17232,17237,3,2052,1026,0,17233,17234,5,2353,0,0,17234,17236,
        3,2052,1026,0,17235,17233,1,0,0,0,17236,17239,1,0,0,0,17237,17235,
        1,0,0,0,17237,17238,1,0,0,0,17238,2051,1,0,0,0,17239,17237,1,0,0,
        0,17240,17243,3,2054,1027,0,17241,17243,3,2056,1028,0,17242,17240,
        1,0,0,0,17242,17241,1,0,0,0,17243,2053,1,0,0,0,17244,17245,5,326,
        0,0,17245,17246,5,2347,0,0,17246,17247,3,1870,935,0,17247,17248,
        5,2348,0,0,17248,2055,1,0,0,0,17249,17250,6,1028,-1,0,17250,17251,
        3,2058,1029,0,17251,17260,1,0,0,0,17252,17253,10,2,0,0,17253,17254,
        5,49,0,0,17254,17259,3,2056,1028,3,17255,17256,10,1,0,0,17256,17257,
        5,1237,0,0,17257,17259,3,2056,1028,2,17258,17252,1,0,0,0,17258,17255,
        1,0,0,0,17259,17262,1,0,0,0,17260,17258,1,0,0,0,17260,17261,1,0,
        0,0,17261,2057,1,0,0,0,17262,17260,1,0,0,0,17263,17265,5,1138,0,
        0,17264,17263,1,0,0,0,17264,17265,1,0,0,0,17265,17266,1,0,0,0,17266,
        17268,3,2064,1032,0,17267,17269,3,2060,1030,0,17268,17267,1,0,0,
        0,17268,17269,1,0,0,0,17269,2059,1,0,0,0,17270,17272,5,740,0,0,17271,
        17273,5,1138,0,0,17272,17271,1,0,0,0,17272,17273,1,0,0,0,17273,17274,
        1,0,0,0,17274,17275,3,2062,1031,0,17275,2061,1,0,0,0,17276,17315,
        5,1162,0,0,17277,17315,5,945,0,0,17278,17315,5,1369,0,0,17279,17315,
        5,693,0,0,17280,17281,5,36,0,0,17281,17315,5,1590,0,0,17282,17315,
        5,465,0,0,17283,17285,5,1180,0,0,17284,17286,5,2076,0,0,17285,17284,
        1,0,0,0,17285,17286,1,0,0,0,17286,17287,1,0,0,0,17287,17289,5,2347,
        0,0,17288,17290,5,1192,0,0,17289,17288,1,0,0,0,17289,17290,1,0,0,
        0,17290,17291,1,0,0,0,17291,17296,3,2334,1167,0,17292,17293,5,2353,
        0,0,17293,17295,3,2334,1167,0,17294,17292,1,0,0,0,17295,17298,1,
        0,0,0,17296,17294,1,0,0,0,17296,17297,1,0,0,0,17297,17299,1,0,0,
        0,17298,17296,1,0,0,0,17299,17300,5,2348,0,0,17300,17315,1,0,0,0,
        17301,17304,5,755,0,0,17302,17303,5,581,0,0,17303,17305,5,755,0,
        0,17304,17302,1,0,0,0,17304,17305,1,0,0,0,17305,17307,1,0,0,0,17306,
        17308,7,193,0,0,17307,17306,1,0,0,0,17307,17308,1,0,0,0,17308,17312,
        1,0,0,0,17309,17310,7,2,0,0,17310,17311,5,2091,0,0,17311,17313,5,
        773,0,0,17312,17309,1,0,0,0,17312,17313,1,0,0,0,17313,17315,1,0,
        0,0,17314,17276,1,0,0,0,17314,17277,1,0,0,0,17314,17278,1,0,0,0,
        17314,17279,1,0,0,0,17314,17280,1,0,0,0,17314,17282,1,0,0,0,17314,
        17283,1,0,0,0,17314,17301,1,0,0,0,17315,2063,1,0,0,0,17316,17317,
        6,1032,-1,0,17317,17323,3,2066,1033,0,17318,17320,7,194,0,0,17319,
        17321,5,1180,0,0,17320,17319,1,0,0,0,17320,17321,1,0,0,0,17321,17322,
        1,0,0,0,17322,17324,3,2076,1038,0,17323,17318,1,0,0,0,17323,17324,
        1,0,0,0,17324,17334,1,0,0,0,17325,17326,10,1,0,0,17326,17327,5,940,
        0,0,17327,17329,7,195,0,0,17328,17330,7,196,0,0,17329,17328,1,0,
        0,0,17329,17330,1,0,0,0,17330,17331,1,0,0,0,17331,17333,3,2066,1033,
        0,17332,17325,1,0,0,0,17333,17336,1,0,0,0,17334,17332,1,0,0,0,17334,
        17335,1,0,0,0,17335,2065,1,0,0,0,17336,17334,1,0,0,0,17337,17338,
        6,1033,-1,0,17338,17339,3,2068,1034,0,17339,17346,1,0,0,0,17340,
        17341,10,2,0,0,17341,17342,3,2070,1035,0,17342,17343,3,2066,1033,
        3,17343,17345,1,0,0,0,17344,17340,1,0,0,0,17345,17348,1,0,0,0,17346,
        17344,1,0,0,0,17346,17347,1,0,0,0,17347,2067,1,0,0,0,17348,17346,
        1,0,0,0,17349,17365,3,2076,1038,0,17350,17352,5,1138,0,0,17351,17350,
        1,0,0,0,17351,17352,1,0,0,0,17352,17363,1,0,0,0,17353,17354,5,696,
        0,0,17354,17364,3,2072,1036,0,17355,17356,5,115,0,0,17356,17364,
        3,2074,1037,0,17357,17358,7,197,0,0,17358,17361,3,2076,1038,0,17359,
        17360,5,489,0,0,17360,17362,3,2076,1038,0,17361,17359,1,0,0,0,17361,
        17362,1,0,0,0,17362,17364,1,0,0,0,17363,17353,1,0,0,0,17363,17355,
        1,0,0,0,17363,17357,1,0,0,0,17364,17366,1,0,0,0,17365,17351,1,0,
        0,0,17365,17366,1,0,0,0,17366,2069,1,0,0,0,17367,17382,5,2369,0,
        0,17368,17376,5,2360,0,0,17369,17370,5,2365,0,0,17370,17376,5,2364,
        0,0,17371,17372,5,2363,0,0,17372,17376,5,2369,0,0,17373,17374,5,
        2361,0,0,17374,17376,5,2369,0,0,17375,17368,1,0,0,0,17375,17369,
        1,0,0,0,17375,17371,1,0,0,0,17375,17373,1,0,0,0,17376,17382,1,0,
        0,0,17377,17379,7,198,0,0,17378,17380,5,2369,0,0,17379,17378,1,0,
        0,0,17379,17380,1,0,0,0,17380,17382,1,0,0,0,17381,17367,1,0,0,0,
        17381,17375,1,0,0,0,17381,17377,1,0,0,0,17382,2071,1,0,0,0,17383,
        17384,5,2347,0,0,17384,17385,3,1870,935,0,17385,17386,5,2348,0,0,
        17386,17402,1,0,0,0,17387,17388,5,2347,0,0,17388,17393,3,2076,1038,
        0,17389,17390,5,2353,0,0,17390,17392,3,2076,1038,0,17391,17389,1,
        0,0,0,17392,17395,1,0,0,0,17393,17391,1,0,0,0,17393,17394,1,0,0,
        0,17394,17396,1,0,0,0,17395,17393,1,0,0,0,17396,17397,5,2348,0,0,
        17397,17402,1,0,0,0,17398,17402,3,2354,1177,0,17399,17402,3,2342,
        1171,0,17400,17402,3,2344,1172,0,17401,17383,1,0,0,0,17401,17387,
        1,0,0,0,17401,17398,1,0,0,0,17401,17399,1,0,0,0,17401,17400,1,0,
        0,0,17402,2073,1,0,0,0,17403,17404,3,2076,1038,0,17404,17405,5,49,
        0,0,17405,17406,3,2076,1038,0,17406,2075,1,0,0,0,17407,17408,6,1038,
        -1,0,17408,17417,3,2080,1040,0,17409,17414,5,80,0,0,17410,17415,
        5,821,0,0,17411,17412,5,2024,0,0,17412,17413,5,2264,0,0,17413,17415,
        3,2076,1038,0,17414,17410,1,0,0,0,17414,17411,1,0,0,0,17415,17418,
        1,0,0,0,17416,17418,3,2078,1039,0,17417,17409,1,0,0,0,17417,17416,
        1,0,0,0,17417,17418,1,0,0,0,17418,17422,1,0,0,0,17419,17420,5,1193,
        0,0,17420,17421,5,1249,0,0,17421,17423,7,199,0,0,17422,17419,1,0,
        0,0,17422,17423,1,0,0,0,17423,17442,1,0,0,0,17424,17425,10,5,0,0,
        17425,17426,5,2349,0,0,17426,17441,3,2076,1038,6,17427,17428,10,
        4,0,0,17428,17429,7,200,0,0,17429,17441,3,2076,1038,5,17430,17431,
        10,3,0,0,17431,17432,7,201,0,0,17432,17441,3,2076,1038,4,17433,17434,
        10,2,0,0,17434,17435,5,2368,0,0,17435,17436,5,2368,0,0,17436,17441,
        3,2076,1038,3,17437,17438,10,1,0,0,17438,17439,5,2272,0,0,17439,
        17441,3,1630,815,0,17440,17424,1,0,0,0,17440,17427,1,0,0,0,17440,
        17430,1,0,0,0,17440,17433,1,0,0,0,17440,17437,1,0,0,0,17441,17444,
        1,0,0,0,17442,17440,1,0,0,0,17442,17443,1,0,0,0,17443,2077,1,0,0,
        0,17444,17442,1,0,0,0,17445,17450,5,346,0,0,17446,17447,5,2347,0,
        0,17447,17448,3,2076,1038,0,17448,17449,5,2348,0,0,17449,17451,1,
        0,0,0,17450,17446,1,0,0,0,17450,17451,1,0,0,0,17451,17452,1,0,0,
        0,17452,17453,5,2052,0,0,17453,17458,5,1558,0,0,17454,17455,5,2347,
        0,0,17455,17456,3,2076,1038,0,17456,17457,5,2348,0,0,17457,17459,
        1,0,0,0,17458,17454,1,0,0,0,17458,17459,1,0,0,0,17459,17473,1,0,
        0,0,17460,17465,5,2260,0,0,17461,17462,5,2347,0,0,17462,17463,3,
        2076,1038,0,17463,17464,5,2348,0,0,17464,17466,1,0,0,0,17465,17461,
        1,0,0,0,17465,17466,1,0,0,0,17466,17467,1,0,0,0,17467,17468,5,2052,
        0,0,17468,17473,5,931,0,0,17469,17470,3,2076,1038,0,17470,17471,
        7,202,0,0,17471,17473,1,0,0,0,17472,17445,1,0,0,0,17472,17460,1,
        0,0,0,17472,17469,1,0,0,0,17473,2079,1,0,0,0,17474,17479,3,2088,
        1044,0,17475,17476,5,2370,0,0,17476,17477,3,2082,1041,0,17477,17478,
        5,2371,0,0,17478,17480,1,0,0,0,17479,17475,1,0,0,0,17479,17480,1,
        0,0,0,17480,2081,1,0,0,0,17481,17484,5,54,0,0,17482,17484,3,2052,
        1026,0,17483,17481,1,0,0,0,17483,17482,1,0,0,0,17484,17492,1,0,0,
        0,17485,17488,5,2353,0,0,17486,17489,5,54,0,0,17487,17489,3,2052,
        1026,0,17488,17486,1,0,0,0,17488,17487,1,0,0,0,17489,17491,1,0,0,
        0,17490,17485,1,0,0,0,17491,17494,1,0,0,0,17492,17490,1,0,0,0,17492,
        17493,1,0,0,0,17493,17505,1,0,0,0,17494,17492,1,0,0,0,17495,17500,
        3,2084,1042,0,17496,17497,5,2353,0,0,17497,17499,3,2084,1042,0,17498,
        17496,1,0,0,0,17499,17502,1,0,0,0,17500,17498,1,0,0,0,17500,17501,
        1,0,0,0,17501,17505,1,0,0,0,17502,17500,1,0,0,0,17503,17505,3,2086,
        1043,0,17504,17483,1,0,0,0,17504,17495,1,0,0,0,17504,17503,1,0,0,
        0,17505,2083,1,0,0,0,17506,17507,5,580,0,0,17507,17525,3,2300,1150,
        0,17508,17509,5,696,0,0,17509,17511,5,2347,0,0,17510,17512,3,2050,
        1025,0,17511,17510,1,0,0,0,17511,17512,1,0,0,0,17512,17513,1,0,0,
        0,17513,17526,5,2348,0,0,17514,17515,5,809,0,0,17515,17517,3,2052,
        1026,0,17516,17514,1,0,0,0,17516,17517,1,0,0,0,17517,17518,1,0,0,
        0,17518,17519,5,588,0,0,17519,17520,3,2052,1026,0,17520,17521,5,
        2052,0,0,17521,17522,3,2052,1026,0,17522,17523,7,203,0,0,17523,17524,
        3,2052,1026,0,17524,17526,1,0,0,0,17525,17508,1,0,0,0,17525,17516,
        1,0,0,0,17526,2085,1,0,0,0,17527,17528,5,580,0,0,17528,17529,3,2320,
        1160,0,17529,17530,5,696,0,0,17530,17537,5,2347,0,0,17531,17538,
        3,1870,935,0,17532,17534,5,2347,0,0,17533,17535,3,2050,1025,0,17534,
        17533,1,0,0,0,17534,17535,1,0,0,0,17535,17536,1,0,0,0,17536,17538,
        5,2348,0,0,17537,17531,1,0,0,0,17537,17532,1,0,0,0,17538,17539,1,
        0,0,0,17539,17540,5,2348,0,0,17540,2087,1,0,0,0,17541,17542,6,1044,
        -1,0,17542,17543,7,201,0,0,17543,17560,3,2088,1044,12,17544,17545,
        5,1379,0,0,17545,17560,3,2088,1044,11,17546,17547,5,264,0,0,17547,
        17560,3,2088,1044,10,17548,17549,5,967,0,0,17549,17560,3,2088,1044,
        9,17550,17551,5,417,0,0,17551,17560,3,2088,1044,8,17552,17553,5,
        38,0,0,17553,17560,3,2088,1044,7,17554,17560,3,2094,1047,0,17555,
        17560,3,2108,1054,0,17556,17560,3,2112,1056,0,17557,17560,3,2106,
        1053,0,17558,17560,3,2090,1045,0,17559,17541,1,0,0,0,17559,17544,
        1,0,0,0,17559,17546,1,0,0,0,17559,17548,1,0,0,0,17559,17550,1,0,
        0,0,17559,17552,1,0,0,0,17559,17554,1,0,0,0,17559,17555,1,0,0,0,
        17559,17556,1,0,0,0,17559,17557,1,0,0,0,17559,17558,1,0,0,0,17560,
        17573,1,0,0,0,17561,17562,10,5,0,0,17562,17569,5,2340,0,0,17563,
        17570,7,204,0,0,17564,17565,7,205,0,0,17565,17566,5,2347,0,0,17566,
        17567,3,2052,1026,0,17567,17568,5,2348,0,0,17568,17570,1,0,0,0,17569,
        17563,1,0,0,0,17569,17564,1,0,0,0,17570,17572,1,0,0,0,17571,17561,
        1,0,0,0,17572,17575,1,0,0,0,17573,17571,1,0,0,0,17573,17574,1,0,
        0,0,17574,2089,1,0,0,0,17575,17573,1,0,0,0,17576,17593,5,1639,0,
        0,17577,17578,5,1311,0,0,17578,17579,5,2347,0,0,17579,17580,3,2052,
        1026,0,17580,17581,5,2348,0,0,17581,17594,1,0,0,0,17582,17591,5,
        1310,0,0,17583,17584,5,2340,0,0,17584,17592,5,298,0,0,17585,17586,
        5,2347,0,0,17586,17587,3,2052,1026,0,17587,17588,5,2348,0,0,17588,
        17589,5,2340,0,0,17589,17590,7,206,0,0,17590,17592,1,0,0,0,17591,
        17583,1,0,0,0,17591,17585,1,0,0,0,17592,17594,1,0,0,0,17593,17577,
        1,0,0,0,17593,17582,1,0,0,0,17594,2091,1,0,0,0,17595,17596,3,1086,
        543,0,17596,17597,5,2347,0,0,17597,17598,3,2052,1026,0,17598,17603,
        5,2348,0,0,17599,17600,5,2340,0,0,17600,17602,3,2346,1173,0,17601,
        17599,1,0,0,0,17602,17605,1,0,0,0,17603,17601,1,0,0,0,17603,17604,
        1,0,0,0,17604,2093,1,0,0,0,17605,17603,1,0,0,0,17606,17609,3,2100,
        1050,0,17607,17609,3,2096,1048,0,17608,17606,1,0,0,0,17608,17607,
        1,0,0,0,17609,2095,1,0,0,0,17610,17612,3,1744,872,0,17611,17610,
        1,0,0,0,17611,17612,1,0,0,0,17612,17613,1,0,0,0,17613,17614,5,172,
        0,0,17614,17616,3,2052,1026,0,17615,17617,3,2098,1049,0,17616,17615,
        1,0,0,0,17617,17618,1,0,0,0,17618,17616,1,0,0,0,17618,17619,1,0,
        0,0,17619,17621,1,0,0,0,17620,17622,3,2104,1052,0,17621,17620,1,
        0,0,0,17621,17622,1,0,0,0,17622,17623,1,0,0,0,17623,17625,5,473,
        0,0,17624,17626,5,172,0,0,17625,17624,1,0,0,0,17625,17626,1,0,0,
        0,17626,17628,1,0,0,0,17627,17629,3,2270,1135,0,17628,17627,1,0,
        0,0,17628,17629,1,0,0,0,17629,2097,1,0,0,0,17630,17631,5,2204,0,
        0,17631,17632,3,2052,1026,0,17632,17635,5,2012,0,0,17633,17636,3,
        1742,871,0,17634,17636,3,2052,1026,0,17635,17633,1,0,0,0,17635,17634,
        1,0,0,0,17636,2099,1,0,0,0,17637,17639,3,1744,872,0,17638,17637,
        1,0,0,0,17638,17639,1,0,0,0,17639,17640,1,0,0,0,17640,17642,5,172,
        0,0,17641,17643,3,2102,1051,0,17642,17641,1,0,0,0,17643,17644,1,
        0,0,0,17644,17642,1,0,0,0,17644,17645,1,0,0,0,17645,17647,1,0,0,
        0,17646,17648,3,2104,1052,0,17647,17646,1,0,0,0,17647,17648,1,0,
        0,0,17648,17649,1,0,0,0,17649,17651,5,473,0,0,17650,17652,5,172,
        0,0,17651,17650,1,0,0,0,17651,17652,1,0,0,0,17652,17654,1,0,0,0,
        17653,17655,3,2270,1135,0,17654,17653,1,0,0,0,17654,17655,1,0,0,
        0,17655,2101,1,0,0,0,17656,17657,5,2204,0,0,17657,17658,3,2048,1024,
        0,17658,17661,5,2012,0,0,17659,17662,3,1742,871,0,17660,17662,3,
        2052,1026,0,17661,17659,1,0,0,0,17661,17660,1,0,0,0,17662,2103,1,
        0,0,0,17663,17666,5,460,0,0,17664,17667,3,1742,871,0,17665,17667,
        3,2052,1026,0,17666,17664,1,0,0,0,17666,17665,1,0,0,0,17667,2105,
        1,0,0,0,17668,17689,3,2342,1171,0,17669,17689,3,2354,1177,0,17670,
        17689,3,2366,1183,0,17671,17673,3,2344,1172,0,17672,17674,3,2368,
        1184,0,17673,17672,1,0,0,0,17673,17674,1,0,0,0,17674,17689,1,0,0,
        0,17675,17676,5,2347,0,0,17676,17677,3,1870,935,0,17677,17681,5,
        2348,0,0,17678,17680,3,1874,937,0,17679,17678,1,0,0,0,17680,17683,
        1,0,0,0,17681,17679,1,0,0,0,17681,17682,1,0,0,0,17682,17689,1,0,
        0,0,17683,17681,1,0,0,0,17684,17685,5,2347,0,0,17685,17686,3,2050,
        1025,0,17686,17687,5,2348,0,0,17687,17689,1,0,0,0,17688,17668,1,
        0,0,0,17688,17669,1,0,0,0,17688,17670,1,0,0,0,17688,17671,1,0,0,
        0,17688,17675,1,0,0,0,17688,17684,1,0,0,0,17689,2107,1,0,0,0,17690,
        17706,7,207,0,0,17691,17692,5,2347,0,0,17692,17693,3,1842,921,0,
        17693,17694,5,2348,0,0,17694,17707,1,0,0,0,17695,17696,5,2347,0,
        0,17696,17701,3,2052,1026,0,17697,17698,5,2353,0,0,17698,17700,3,
        2052,1026,0,17699,17697,1,0,0,0,17700,17703,1,0,0,0,17701,17699,
        1,0,0,0,17701,17702,1,0,0,0,17702,17704,1,0,0,0,17703,17701,1,0,
        0,0,17704,17705,5,2348,0,0,17705,17707,1,0,0,0,17706,17691,1,0,0,
        0,17706,17695,1,0,0,0,17707,2109,1,0,0,0,17708,17709,5,2316,0,0,
        17709,17710,5,2347,0,0,17710,17711,3,2052,1026,0,17711,17712,5,2353,
        0,0,17712,17715,3,2052,1026,0,17713,17714,5,2353,0,0,17714,17716,
        3,2052,1026,0,17715,17713,1,0,0,0,17715,17716,1,0,0,0,17716,17717,
        1,0,0,0,17717,17718,5,2348,0,0,17718,17795,1,0,0,0,17719,17720,5,
        2317,0,0,17720,17724,5,2347,0,0,17721,17725,3,2348,1174,0,17722,
        17725,3,2112,1056,0,17723,17725,3,2052,1026,0,17724,17721,1,0,0,
        0,17724,17722,1,0,0,0,17724,17723,1,0,0,0,17725,17728,1,0,0,0,17726,
        17727,5,2353,0,0,17727,17729,3,2360,1180,0,17728,17726,1,0,0,0,17728,
        17729,1,0,0,0,17729,17732,1,0,0,0,17730,17731,5,2353,0,0,17731,17733,
        3,2360,1180,0,17732,17730,1,0,0,0,17732,17733,1,0,0,0,17733,17734,
        1,0,0,0,17734,17735,5,2348,0,0,17735,17795,1,0,0,0,17736,17737,5,
        2301,0,0,17737,17738,5,2347,0,0,17738,17739,3,2050,1025,0,17739,
        17740,5,2348,0,0,17740,17795,1,0,0,0,17741,17742,5,194,0,0,17742,
        17743,5,2347,0,0,17743,17744,3,2076,1038,0,17744,17745,5,2153,0,
        0,17745,17746,5,953,0,0,17746,17747,5,2348,0,0,17747,17795,1,0,0,
        0,17748,17749,5,2311,0,0,17749,17750,5,2347,0,0,17750,17751,3,2052,
        1026,0,17751,17752,5,2353,0,0,17752,17753,3,2052,1026,0,17753,17754,
        5,2348,0,0,17754,17795,1,0,0,0,17755,17756,5,2318,0,0,17756,17764,
        5,2347,0,0,17757,17759,7,208,0,0,17758,17757,1,0,0,0,17758,17759,
        1,0,0,0,17759,17761,1,0,0,0,17760,17762,3,2052,1026,0,17761,17760,
        1,0,0,0,17761,17762,1,0,0,0,17762,17763,1,0,0,0,17763,17765,5,588,
        0,0,17764,17758,1,0,0,0,17764,17765,1,0,0,0,17765,17766,1,0,0,0,
        17766,17767,3,2076,1038,0,17767,17768,5,2348,0,0,17768,17795,1,0,
        0,0,17769,17770,5,2325,0,0,17770,17774,5,2347,0,0,17771,17775,3,
        2348,1174,0,17772,17775,3,2112,1056,0,17773,17775,3,2052,1026,0,
        17774,17771,1,0,0,0,17774,17772,1,0,0,0,17774,17773,1,0,0,0,17775,
        17782,1,0,0,0,17776,17777,5,368,0,0,17777,17778,3,2076,1038,0,17778,
        17779,5,1193,0,0,17779,17780,5,286,0,0,17780,17781,5,484,0,0,17781,
        17783,1,0,0,0,17782,17776,1,0,0,0,17782,17783,1,0,0,0,17783,17790,
        1,0,0,0,17784,17785,5,2353,0,0,17785,17788,3,2360,1180,0,17786,17787,
        5,2353,0,0,17787,17789,3,2360,1180,0,17788,17786,1,0,0,0,17788,17789,
        1,0,0,0,17789,17791,1,0,0,0,17790,17784,1,0,0,0,17790,17791,1,0,
        0,0,17791,17792,1,0,0,0,17792,17793,5,2348,0,0,17793,17795,1,0,0,
        0,17794,17708,1,0,0,0,17794,17719,1,0,0,0,17794,17736,1,0,0,0,17794,
        17741,1,0,0,0,17794,17748,1,0,0,0,17794,17755,1,0,0,0,17794,17769,
        1,0,0,0,17795,2111,1,0,0,0,17796,17801,3,2110,1055,0,17797,17801,
        3,2152,1076,0,17798,17801,3,2114,1057,0,17799,17801,3,2158,1079,
        0,17800,17796,1,0,0,0,17800,17797,1,0,0,0,17800,17798,1,0,0,0,17800,
        17799,1,0,0,0,17801,2113,1,0,0,0,17802,17803,5,750,0,0,17803,17804,
        5,2347,0,0,17804,17809,3,2122,1061,0,17805,17806,5,2353,0,0,17806,
        17808,3,2122,1061,0,17807,17805,1,0,0,0,17808,17811,1,0,0,0,17809,
        17807,1,0,0,0,17809,17810,1,0,0,0,17810,17813,1,0,0,0,17811,17809,
        1,0,0,0,17812,17814,3,2124,1062,0,17813,17812,1,0,0,0,17813,17814,
        1,0,0,0,17814,17816,1,0,0,0,17815,17817,3,2126,1063,0,17816,17815,
        1,0,0,0,17816,17817,1,0,0,0,17817,17819,1,0,0,0,17818,17820,5,1682,
        0,0,17819,17818,1,0,0,0,17819,17820,1,0,0,0,17820,17821,1,0,0,0,
        17821,17822,5,2348,0,0,17822,17991,1,0,0,0,17823,17824,5,749,0,0,
        17824,17825,5,2347,0,0,17825,17828,3,2052,1026,0,17826,17827,5,581,
        0,0,17827,17829,5,755,0,0,17828,17826,1,0,0,0,17828,17829,1,0,0,
        0,17829,17831,1,0,0,0,17830,17832,3,1968,984,0,17831,17830,1,0,0,
        0,17831,17832,1,0,0,0,17832,17834,1,0,0,0,17833,17835,3,2124,1062,
        0,17834,17833,1,0,0,0,17834,17835,1,0,0,0,17835,17837,1,0,0,0,17836,
        17838,3,2126,1063,0,17837,17836,1,0,0,0,17837,17838,1,0,0,0,17838,
        17840,1,0,0,0,17839,17841,5,1682,0,0,17840,17839,1,0,0,0,17840,17841,
        1,0,0,0,17841,17842,1,0,0,0,17842,17843,5,2348,0,0,17843,17991,1,
        0,0,0,17844,17845,5,757,0,0,17845,17846,5,2347,0,0,17846,17847,3,
        2116,1058,0,17847,17848,5,2348,0,0,17848,17991,1,0,0,0,17849,17850,
        5,756,0,0,17850,17852,5,2347,0,0,17851,17853,5,770,0,0,17852,17851,
        1,0,0,0,17852,17853,1,0,0,0,17853,17854,1,0,0,0,17854,17855,3,2052,
        1026,0,17855,17856,5,2165,0,0,17856,17860,3,2052,1026,0,17857,17858,
        7,209,0,0,17858,17859,5,1193,0,0,17859,17861,5,1162,0,0,17860,17857,
        1,0,0,0,17860,17861,1,0,0,0,17861,17876,1,0,0,0,17862,17874,5,1507,
        0,0,17863,17870,5,2166,0,0,17864,17865,5,2347,0,0,17865,17867,5,
        2341,0,0,17866,17868,7,210,0,0,17867,17866,1,0,0,0,17867,17868,1,
        0,0,0,17868,17869,1,0,0,0,17869,17871,5,2348,0,0,17870,17864,1,0,
        0,0,17870,17871,1,0,0,0,17871,17875,1,0,0,0,17872,17875,5,205,0,
        0,17873,17875,5,136,0,0,17874,17863,1,0,0,0,17874,17872,1,0,0,0,
        17874,17873,1,0,0,0,17875,17877,1,0,0,0,17876,17862,1,0,0,0,17876,
        17877,1,0,0,0,17877,17879,1,0,0,0,17878,17880,5,1682,0,0,17879,17878,
        1,0,0,0,17879,17880,1,0,0,0,17880,17884,1,0,0,0,17881,17882,5,2212,
        0,0,17882,17883,5,2091,0,0,17883,17885,5,773,0,0,17884,17881,1,0,
        0,0,17884,17885,1,0,0,0,17885,17886,1,0,0,0,17886,17887,5,2348,0,
        0,17887,17991,1,0,0,0,17888,17889,5,759,0,0,17889,17890,5,2347,0,
        0,17890,17893,3,2052,1026,0,17891,17892,5,581,0,0,17892,17894,5,
        755,0,0,17893,17891,1,0,0,0,17893,17894,1,0,0,0,17894,17895,1,0,
        0,0,17895,17896,5,2353,0,0,17896,17897,5,2343,0,0,17897,17899,3,
        2134,1067,0,17898,17900,3,2138,1069,0,17899,17898,1,0,0,0,17899,
        17900,1,0,0,0,17900,17902,1,0,0,0,17901,17903,3,2140,1070,0,17902,
        17901,1,0,0,0,17902,17903,1,0,0,0,17903,17905,1,0,0,0,17904,17906,
        3,2142,1071,0,17905,17904,1,0,0,0,17905,17906,1,0,0,0,17906,17907,
        1,0,0,0,17907,17908,5,2348,0,0,17908,17991,1,0,0,0,17909,17910,5,
        760,0,0,17910,17911,5,2347,0,0,17911,17914,5,2343,0,0,17912,17913,
        5,1507,0,0,17913,17915,3,2136,1068,0,17914,17912,1,0,0,0,17914,17915,
        1,0,0,0,17915,17917,1,0,0,0,17916,17918,5,1373,0,0,17917,17916,1,
        0,0,0,17917,17918,1,0,0,0,17918,17920,1,0,0,0,17919,17921,5,69,0,
        0,17920,17919,1,0,0,0,17920,17921,1,0,0,0,17921,17923,1,0,0,0,17922,
        17924,5,2069,0,0,17923,17922,1,0,0,0,17923,17924,1,0,0,0,17924,17933,
        1,0,0,0,17925,17930,5,1162,0,0,17926,17930,5,484,0,0,17927,17928,
        5,465,0,0,17928,17930,7,211,0,0,17929,17925,1,0,0,0,17929,17926,
        1,0,0,0,17929,17927,1,0,0,0,17930,17931,1,0,0,0,17931,17932,5,1193,
        0,0,17932,17934,5,484,0,0,17933,17929,1,0,0,0,17933,17934,1,0,0,
        0,17934,17935,1,0,0,0,17935,17991,5,2348,0,0,17936,17937,5,764,0,
        0,17937,17938,5,2347,0,0,17938,17939,3,2052,1026,0,17939,17940,5,
        2353,0,0,17940,17945,3,2128,1064,0,17941,17942,5,2353,0,0,17942,
        17944,3,2128,1064,0,17943,17941,1,0,0,0,17944,17947,1,0,0,0,17945,
        17943,1,0,0,0,17945,17946,1,0,0,0,17946,17948,1,0,0,0,17947,17945,
        1,0,0,0,17948,17949,5,2348,0,0,17949,17991,1,0,0,0,17950,17951,5,
        765,0,0,17951,17952,5,2347,0,0,17952,17955,3,2052,1026,0,17953,17954,
        5,581,0,0,17954,17956,5,755,0,0,17955,17953,1,0,0,0,17955,17956,
        1,0,0,0,17956,17988,1,0,0,0,17957,17959,5,2353,0,0,17958,17960,5,
        2343,0,0,17959,17958,1,0,0,0,17959,17960,1,0,0,0,17960,17962,1,0,
        0,0,17961,17963,3,2144,1072,0,17962,17961,1,0,0,0,17962,17963,1,
        0,0,0,17963,17972,1,0,0,0,17964,17969,5,484,0,0,17965,17969,5,1162,
        0,0,17966,17967,5,368,0,0,17967,17969,3,2150,1075,0,17968,17964,
        1,0,0,0,17968,17965,1,0,0,0,17968,17966,1,0,0,0,17968,17969,1,0,
        0,0,17969,17970,1,0,0,0,17970,17971,5,1193,0,0,17971,17973,5,484,
        0,0,17972,17968,1,0,0,0,17972,17973,1,0,0,0,17973,17982,1,0,0,0,
        17974,17979,5,484,0,0,17975,17979,5,1162,0,0,17976,17977,5,368,0,
        0,17977,17979,3,2150,1075,0,17978,17974,1,0,0,0,17978,17975,1,0,
        0,0,17978,17976,1,0,0,0,17978,17979,1,0,0,0,17979,17980,1,0,0,0,
        17980,17981,5,1193,0,0,17981,17983,5,465,0,0,17982,17978,1,0,0,0,
        17982,17983,1,0,0,0,17983,17985,1,0,0,0,17984,17986,3,2148,1074,
        0,17985,17984,1,0,0,0,17985,17986,1,0,0,0,17986,17987,1,0,0,0,17987,
        17989,5,2348,0,0,17988,17957,1,0,0,0,17988,17989,1,0,0,0,17989,17991,
        1,0,0,0,17990,17802,1,0,0,0,17990,17823,1,0,0,0,17990,17844,1,0,
        0,0,17990,17849,1,0,0,0,17990,17888,1,0,0,0,17990,17909,1,0,0,0,
        17990,17936,1,0,0,0,17990,17950,1,0,0,0,17991,2115,1,0,0,0,17992,
        17997,3,2118,1059,0,17993,17994,5,2353,0,0,17994,17996,3,2118,1059,
        0,17995,17993,1,0,0,0,17996,17999,1,0,0,0,17997,17995,1,0,0,0,17997,
        17998,1,0,0,0,17998,18002,1,0,0,0,17999,17997,1,0,0,0,18000,18002,
        5,2350,0,0,18001,17992,1,0,0,0,18001,18000,1,0,0,0,18002,18004,1,
        0,0,0,18003,18005,3,2124,1062,0,18004,18003,1,0,0,0,18004,18005,
        1,0,0,0,18005,18007,1,0,0,0,18006,18008,3,2126,1063,0,18007,18006,
        1,0,0,0,18007,18008,1,0,0,0,18008,18010,1,0,0,0,18009,18011,5,1682,
        0,0,18010,18009,1,0,0,0,18010,18011,1,0,0,0,18011,18015,1,0,0,0,
        18012,18013,5,2212,0,0,18013,18014,5,2091,0,0,18014,18016,5,773,
        0,0,18015,18012,1,0,0,0,18015,18016,1,0,0,0,18016,2117,1,0,0,0,18017,
        18019,5,770,0,0,18018,18017,1,0,0,0,18018,18019,1,0,0,0,18019,18020,
        1,0,0,0,18020,18022,3,2052,1026,0,18021,18023,7,212,0,0,18022,18021,
        1,0,0,0,18022,18023,1,0,0,0,18023,18024,1,0,0,0,18024,18025,3,2052,
        1026,0,18025,18032,1,0,0,0,18026,18027,3,2052,1026,0,18027,18028,
        5,2366,0,0,18028,18029,3,2052,1026,0,18029,18032,1,0,0,0,18030,18032,
        3,2362,1181,0,18031,18018,1,0,0,0,18031,18026,1,0,0,0,18031,18030,
        1,0,0,0,18032,18035,1,0,0,0,18033,18034,5,581,0,0,18034,18036,5,
        755,0,0,18035,18033,1,0,0,0,18035,18036,1,0,0,0,18036,2119,1,0,0,
        0,18037,18038,5,761,0,0,18038,18039,5,2347,0,0,18039,18042,3,2052,
        1026,0,18040,18041,5,581,0,0,18041,18043,5,755,0,0,18042,18040,1,
        0,0,0,18042,18043,1,0,0,0,18043,18046,1,0,0,0,18044,18045,5,2353,
        0,0,18045,18047,5,2343,0,0,18046,18044,1,0,0,0,18046,18047,1,0,0,
        0,18047,18051,1,0,0,0,18048,18049,7,213,0,0,18049,18050,5,1193,0,
        0,18050,18052,5,484,0,0,18051,18048,1,0,0,0,18051,18052,1,0,0,0,
        18052,18056,1,0,0,0,18053,18054,7,214,0,0,18054,18055,5,1193,0,0,
        18055,18057,5,465,0,0,18056,18053,1,0,0,0,18056,18057,1,0,0,0,18057,
        18059,1,0,0,0,18058,18060,3,2130,1065,0,18059,18058,1,0,0,0,18059,
        18060,1,0,0,0,18060,18061,1,0,0,0,18061,18062,5,2348,0,0,18062,2121,
        1,0,0,0,18063,18069,3,2052,1026,0,18064,18069,5,2343,0,0,18065,18069,
        5,1162,0,0,18066,18069,5,2341,0,0,18067,18069,3,2114,1057,0,18068,
        18063,1,0,0,0,18068,18064,1,0,0,0,18068,18065,1,0,0,0,18068,18066,
        1,0,0,0,18068,18067,1,0,0,0,18069,18072,1,0,0,0,18070,18071,5,581,
        0,0,18071,18073,5,755,0,0,18072,18070,1,0,0,0,18072,18073,1,0,0,
        0,18073,2123,1,0,0,0,18074,18075,7,209,0,0,18075,18076,5,1193,0,
        0,18076,18077,5,1162,0,0,18077,2125,1,0,0,0,18078,18090,5,1507,0,
        0,18079,18086,5,2166,0,0,18080,18081,5,2347,0,0,18081,18083,5,2341,
        0,0,18082,18084,7,210,0,0,18083,18082,1,0,0,0,18083,18084,1,0,0,
        0,18084,18085,1,0,0,0,18085,18087,5,2348,0,0,18086,18080,1,0,0,0,
        18086,18087,1,0,0,0,18087,18091,1,0,0,0,18088,18091,5,205,0,0,18089,
        18091,5,136,0,0,18090,18079,1,0,0,0,18090,18088,1,0,0,0,18090,18089,
        1,0,0,0,18091,2127,1,0,0,0,18092,18093,5,1480,0,0,18093,18099,5,
        2343,0,0,18094,18096,7,215,0,0,18095,18094,1,0,0,0,18095,18096,1,
        0,0,0,18096,18097,1,0,0,0,18097,18098,5,1193,0,0,18098,18100,5,910,
        0,0,18099,18095,1,0,0,0,18099,18100,1,0,0,0,18100,18180,1,0,0,0,
        18101,18102,5,713,0,0,18102,18103,5,2343,0,0,18103,18104,5,2369,
        0,0,18104,18108,5,2343,0,0,18105,18106,7,216,0,0,18106,18107,5,1193,
        0,0,18107,18109,5,507,0,0,18108,18105,1,0,0,0,18108,18109,1,0,0,
        0,18109,18115,1,0,0,0,18110,18112,7,217,0,0,18111,18110,1,0,0,0,
        18111,18112,1,0,0,0,18112,18113,1,0,0,0,18113,18114,5,1193,0,0,18114,
        18116,5,1162,0,0,18115,18111,1,0,0,0,18115,18116,1,0,0,0,18116,18180,
        1,0,0,0,18117,18118,5,1484,0,0,18118,18119,5,2343,0,0,18119,18120,
        5,2369,0,0,18120,18124,5,2343,0,0,18121,18122,7,218,0,0,18122,18123,
        5,1193,0,0,18123,18125,5,910,0,0,18124,18121,1,0,0,0,18124,18125,
        1,0,0,0,18125,18131,1,0,0,0,18126,18128,7,219,0,0,18127,18126,1,
        0,0,0,18127,18128,1,0,0,0,18128,18129,1,0,0,0,18129,18130,5,1193,
        0,0,18130,18132,5,1162,0,0,18131,18127,1,0,0,0,18131,18132,1,0,0,
        0,18132,18180,1,0,0,0,18133,18136,3,2052,1026,0,18134,18135,5,581,
        0,0,18135,18137,5,755,0,0,18136,18134,1,0,0,0,18136,18137,1,0,0,
        0,18137,18180,1,0,0,0,18138,18139,5,56,0,0,18139,18140,5,2343,0,
        0,18140,18141,5,2369,0,0,18141,18145,5,2343,0,0,18142,18143,7,218,
        0,0,18143,18144,5,1193,0,0,18144,18146,5,910,0,0,18145,18142,1,0,
        0,0,18145,18146,1,0,0,0,18146,18152,1,0,0,0,18147,18149,7,219,0,
        0,18148,18147,1,0,0,0,18148,18149,1,0,0,0,18149,18150,1,0,0,0,18150,
        18151,5,1193,0,0,18151,18153,5,1162,0,0,18152,18148,1,0,0,0,18152,
        18153,1,0,0,0,18153,18180,1,0,0,0,18154,18155,5,1590,0,0,18155,18156,
        5,2343,0,0,18156,18157,5,2369,0,0,18157,18160,3,2052,1026,0,18158,
        18159,5,581,0,0,18159,18161,5,755,0,0,18160,18158,1,0,0,0,18160,
        18161,1,0,0,0,18161,18165,1,0,0,0,18162,18163,7,216,0,0,18163,18164,
        5,1193,0,0,18164,18166,5,507,0,0,18165,18162,1,0,0,0,18165,18166,
        1,0,0,0,18166,18170,1,0,0,0,18167,18168,7,218,0,0,18168,18169,5,
        1193,0,0,18169,18171,5,910,0,0,18170,18167,1,0,0,0,18170,18171,1,
        0,0,0,18171,18177,1,0,0,0,18172,18174,7,219,0,0,18173,18172,1,0,
        0,0,18173,18174,1,0,0,0,18174,18175,1,0,0,0,18175,18176,5,1193,0,
        0,18176,18178,5,1162,0,0,18177,18173,1,0,0,0,18177,18178,1,0,0,0,
        18178,18180,1,0,0,0,18179,18092,1,0,0,0,18179,18101,1,0,0,0,18179,
        18117,1,0,0,0,18179,18133,1,0,0,0,18179,18138,1,0,0,0,18179,18154,
        1,0,0,0,18180,2129,1,0,0,0,18181,18182,5,227,0,0,18182,18183,5,2347,
        0,0,18183,18188,3,2132,1066,0,18184,18185,5,2353,0,0,18185,18187,
        3,2132,1066,0,18186,18184,1,0,0,0,18187,18190,1,0,0,0,18188,18186,
        1,0,0,0,18188,18189,1,0,0,0,18189,18191,1,0,0,0,18190,18188,1,0,
        0,0,18191,18192,5,2348,0,0,18192,2131,1,0,0,0,18193,18195,3,2052,
        1026,0,18194,18196,3,2146,1073,0,18195,18194,1,0,0,0,18195,18196,
        1,0,0,0,18196,18207,1,0,0,0,18197,18199,5,508,0,0,18198,18197,1,
        0,0,0,18198,18199,1,0,0,0,18199,18200,1,0,0,0,18200,18201,5,1290,
        0,0,18201,18208,5,2343,0,0,18202,18205,5,2069,0,0,18203,18204,5,
        1290,0,0,18204,18206,5,2343,0,0,18205,18203,1,0,0,0,18205,18206,
        1,0,0,0,18206,18208,1,0,0,0,18207,18198,1,0,0,0,18207,18202,1,0,
        0,0,18207,18208,1,0,0,0,18208,18210,1,0,0,0,18209,18211,3,2140,1070,
        0,18210,18209,1,0,0,0,18210,18211,1,0,0,0,18211,18213,1,0,0,0,18212,
        18214,3,2142,1071,0,18213,18212,1,0,0,0,18213,18214,1,0,0,0,18214,
        18247,1,0,0,0,18215,18217,3,2052,1026,0,18216,18218,3,2136,1068,
        0,18217,18216,1,0,0,0,18217,18218,1,0,0,0,18218,18220,1,0,0,0,18219,
        18221,5,2069,0,0,18220,18219,1,0,0,0,18220,18221,1,0,0,0,18221,18222,
        1,0,0,0,18222,18223,5,581,0,0,18223,18225,5,755,0,0,18224,18226,
        3,2138,1069,0,18225,18224,1,0,0,0,18225,18226,1,0,0,0,18226,18227,
        1,0,0,0,18227,18228,5,1290,0,0,18228,18229,5,2343,0,0,18229,18247,
        1,0,0,0,18230,18232,5,959,0,0,18231,18233,5,1290,0,0,18232,18231,
        1,0,0,0,18232,18233,1,0,0,0,18233,18234,1,0,0,0,18234,18238,3,2052,
        1026,0,18235,18236,5,2370,0,0,18236,18237,5,2350,0,0,18237,18239,
        5,2371,0,0,18238,18235,1,0,0,0,18238,18239,1,0,0,0,18239,18240,1,
        0,0,0,18240,18241,3,2130,1065,0,18241,18247,1,0,0,0,18242,18243,
        3,2052,1026,0,18243,18244,5,580,0,0,18244,18245,5,1234,0,0,18245,
        18247,1,0,0,0,18246,18193,1,0,0,0,18246,18215,1,0,0,0,18246,18230,
        1,0,0,0,18246,18242,1,0,0,0,18247,2133,1,0,0,0,18248,18249,5,1507,
        0,0,18249,18251,3,2136,1068,0,18250,18248,1,0,0,0,18250,18251,1,
        0,0,0,18251,18253,1,0,0,0,18252,18254,5,1373,0,0,18253,18252,1,0,
        0,0,18253,18254,1,0,0,0,18254,18256,1,0,0,0,18255,18257,5,69,0,0,
        18256,18255,1,0,0,0,18256,18257,1,0,0,0,18257,2135,1,0,0,0,18258,
        18265,5,2166,0,0,18259,18260,5,2347,0,0,18260,18262,5,2341,0,0,18261,
        18263,7,210,0,0,18262,18261,1,0,0,0,18262,18263,1,0,0,0,18263,18264,
        1,0,0,0,18264,18266,5,2348,0,0,18265,18259,1,0,0,0,18265,18266,1,
        0,0,0,18266,18270,1,0,0,0,18267,18270,5,205,0,0,18268,18270,5,136,
        0,0,18269,18258,1,0,0,0,18269,18267,1,0,0,0,18269,18268,1,0,0,0,
        18270,2137,1,0,0,0,18271,18273,5,2210,0,0,18272,18274,5,66,0,0,18273,
        18272,1,0,0,0,18273,18274,1,0,0,0,18274,18275,1,0,0,0,18275,18285,
        5,2215,0,0,18276,18278,5,2212,0,0,18277,18279,7,220,0,0,18278,18277,
        1,0,0,0,18278,18279,1,0,0,0,18279,18281,1,0,0,0,18280,18282,5,66,
        0,0,18281,18280,1,0,0,0,18281,18282,1,0,0,0,18282,18283,1,0,0,0,
        18283,18285,5,2215,0,0,18284,18271,1,0,0,0,18284,18276,1,0,0,0,18285,
        2139,1,0,0,0,18286,18294,5,484,0,0,18287,18294,5,1162,0,0,18288,
        18294,5,465,0,0,18289,18290,5,465,0,0,18290,18294,5,66,0,0,18291,
        18292,5,465,0,0,18292,18294,5,1172,0,0,18293,18286,1,0,0,0,18293,
        18287,1,0,0,0,18293,18288,1,0,0,0,18293,18289,1,0,0,0,18293,18291,
        1,0,0,0,18293,18294,1,0,0,0,18294,18295,1,0,0,0,18295,18296,5,1193,
        0,0,18296,18297,5,484,0,0,18297,2141,1,0,0,0,18298,18306,5,484,0,
        0,18299,18306,5,1162,0,0,18300,18306,5,465,0,0,18301,18302,5,465,
        0,0,18302,18306,5,66,0,0,18303,18304,5,465,0,0,18304,18306,5,1172,
        0,0,18305,18298,1,0,0,0,18305,18299,1,0,0,0,18305,18300,1,0,0,0,
        18305,18301,1,0,0,0,18305,18303,1,0,0,0,18305,18306,1,0,0,0,18306,
        18307,1,0,0,0,18307,18308,5,1193,0,0,18308,18309,5,465,0,0,18309,
        2143,1,0,0,0,18310,18312,5,1507,0,0,18311,18313,3,2146,1073,0,18312,
        18311,1,0,0,0,18312,18313,1,0,0,0,18313,18315,1,0,0,0,18314,18316,
        5,69,0,0,18315,18314,1,0,0,0,18315,18316,1,0,0,0,18316,2145,1,0,
        0,0,18317,18324,5,2166,0,0,18318,18319,5,2347,0,0,18319,18321,5,
        2341,0,0,18320,18322,7,210,0,0,18321,18320,1,0,0,0,18321,18322,1,
        0,0,0,18322,18323,1,0,0,0,18323,18325,5,2348,0,0,18324,18318,1,0,
        0,0,18324,18325,1,0,0,0,18325,18327,1,0,0,0,18326,18328,5,2069,0,
        0,18327,18326,1,0,0,0,18327,18328,1,0,0,0,18328,18354,1,0,0,0,18329,
        18354,5,205,0,0,18330,18354,5,344,0,0,18331,18339,5,1164,0,0,18332,
        18333,5,2347,0,0,18333,18336,5,726,0,0,18334,18335,5,2353,0,0,18335,
        18337,5,726,0,0,18336,18334,1,0,0,0,18336,18337,1,0,0,0,18337,18338,
        1,0,0,0,18338,18340,5,2348,0,0,18339,18332,1,0,0,0,18339,18340,1,
        0,0,0,18340,18354,1,0,0,0,18341,18344,5,2020,0,0,18342,18343,5,2212,
        0,0,18343,18345,5,2025,0,0,18344,18342,1,0,0,0,18344,18345,1,0,0,
        0,18345,18354,1,0,0,0,18346,18354,5,1555,0,0,18347,18351,3,2052,
        1026,0,18348,18349,5,2153,0,0,18349,18350,5,174,0,0,18350,18352,
        5,858,0,0,18351,18348,1,0,0,0,18351,18352,1,0,0,0,18352,18354,1,
        0,0,0,18353,18317,1,0,0,0,18353,18329,1,0,0,0,18353,18330,1,0,0,
        0,18353,18331,1,0,0,0,18353,18341,1,0,0,0,18353,18346,1,0,0,0,18353,
        18347,1,0,0,0,18354,2147,1,0,0,0,18355,18356,7,219,0,0,18356,18357,
        5,1193,0,0,18357,18366,5,911,0,0,18358,18359,5,2347,0,0,18359,18360,
        5,910,0,0,18360,18367,5,334,0,0,18361,18362,5,528,0,0,18362,18367,
        5,334,0,0,18363,18364,5,2076,0,0,18364,18365,5,484,0,0,18365,18367,
        5,2348,0,0,18366,18358,1,0,0,0,18366,18361,1,0,0,0,18366,18363,1,
        0,0,0,18366,18367,1,0,0,0,18367,2149,1,0,0,0,18368,18373,5,2343,
        0,0,18369,18373,3,2110,1055,0,18370,18373,3,2356,1178,0,18371,18373,
        5,878,0,0,18372,18368,1,0,0,0,18372,18369,1,0,0,0,18372,18370,1,
        0,0,0,18372,18371,1,0,0,0,18373,2151,1,0,0,0,18374,18377,3,2154,
        1077,0,18375,18378,3,2084,1042,0,18376,18378,3,2086,1043,0,18377,
        18375,1,0,0,0,18377,18376,1,0,0,0,18377,18378,1,0,0,0,18378,2153,
        1,0,0,0,18379,18380,5,2319,0,0,18380,18382,5,2347,0,0,18381,18383,
        7,196,0,0,18382,18381,1,0,0,0,18382,18383,1,0,0,0,18383,18384,1,
        0,0,0,18384,18385,3,2052,1026,0,18385,18386,5,2348,0,0,18386,18438,
        1,0,0,0,18387,18388,5,298,0,0,18388,18396,5,2347,0,0,18389,18397,
        5,2350,0,0,18390,18392,7,179,0,0,18391,18390,1,0,0,0,18391,18392,
        1,0,0,0,18392,18393,1,0,0,0,18393,18395,3,2076,1038,0,18394,18391,
        1,0,0,0,18394,18395,1,0,0,0,18395,18397,1,0,0,0,18396,18389,1,0,
        0,0,18396,18394,1,0,0,0,18397,18398,1,0,0,0,18398,18400,5,2348,0,
        0,18399,18401,3,2166,1083,0,18400,18399,1,0,0,0,18400,18401,1,0,
        0,0,18401,18438,1,0,0,0,18402,18403,5,2314,0,0,18403,18404,5,2347,
        0,0,18404,18407,3,2052,1026,0,18405,18406,5,2353,0,0,18406,18408,
        5,2341,0,0,18407,18405,1,0,0,0,18407,18408,1,0,0,0,18408,18409,1,
        0,0,0,18409,18410,5,2348,0,0,18410,18438,1,0,0,0,18411,18412,5,2298,
        0,0,18412,18414,5,2347,0,0,18413,18415,7,196,0,0,18414,18413,1,0,
        0,0,18414,18415,1,0,0,0,18415,18416,1,0,0,0,18416,18417,3,2052,1026,
        0,18417,18418,5,2348,0,0,18418,18438,1,0,0,0,18419,18420,5,2306,
        0,0,18420,18422,5,2347,0,0,18421,18423,7,196,0,0,18422,18421,1,0,
        0,0,18422,18423,1,0,0,0,18423,18424,1,0,0,0,18424,18425,3,2052,1026,
        0,18425,18426,5,2348,0,0,18426,18438,1,0,0,0,18427,18428,5,2323,
        0,0,18428,18429,5,2347,0,0,18429,18430,3,2050,1025,0,18430,18431,
        5,2348,0,0,18431,18438,1,0,0,0,18432,18433,5,2324,0,0,18433,18434,
        5,2347,0,0,18434,18435,3,2050,1025,0,18435,18436,5,2348,0,0,18436,
        18438,1,0,0,0,18437,18379,1,0,0,0,18437,18387,1,0,0,0,18437,18402,
        1,0,0,0,18437,18411,1,0,0,0,18437,18419,1,0,0,0,18437,18427,1,0,
        0,0,18437,18432,1,0,0,0,18438,2155,1,0,0,0,18439,18440,5,1193,0,
        0,18440,18441,5,1249,0,0,18441,18443,7,199,0,0,18442,18444,5,2343,
        0,0,18443,18442,1,0,0,0,18443,18444,1,0,0,0,18444,18447,1,0,0,0,
        18445,18446,7,2,0,0,18446,18448,5,298,0,0,18447,18445,1,0,0,0,18447,
        18448,1,0,0,0,18448,2157,1,0,0,0,18449,18450,3,2160,1080,0,18450,
        18452,3,2326,1163,0,18451,18453,3,2166,1083,0,18452,18451,1,0,0,
        0,18452,18453,1,0,0,0,18453,18871,1,0,0,0,18454,18455,3,2370,1185,
        0,18455,18457,3,2328,1164,0,18456,18458,3,2174,1087,0,18457,18456,
        1,0,0,0,18457,18458,1,0,0,0,18458,18871,1,0,0,0,18459,18460,5,298,
        0,0,18460,18466,5,2347,0,0,18461,18467,5,2350,0,0,18462,18464,7,
        179,0,0,18463,18462,1,0,0,0,18463,18464,1,0,0,0,18464,18465,1,0,
        0,0,18465,18467,3,2076,1038,0,18466,18461,1,0,0,0,18466,18463,1,
        0,0,0,18467,18468,1,0,0,0,18468,18470,5,2348,0,0,18469,18471,3,2166,
        1083,0,18470,18469,1,0,0,0,18470,18471,1,0,0,0,18471,18871,1,0,0,
        0,18472,18473,7,221,0,0,18473,18480,5,2347,0,0,18474,18475,5,940,
        0,0,18475,18476,5,2347,0,0,18476,18477,3,1870,935,0,18477,18478,
        5,2348,0,0,18478,18481,1,0,0,0,18479,18481,3,2076,1038,0,18480,18474,
        1,0,0,0,18480,18479,1,0,0,0,18481,18482,1,0,0,0,18482,18483,5,67,
        0,0,18483,18490,3,2334,1167,0,18484,18485,5,368,0,0,18485,18486,
        3,2076,1038,0,18486,18487,5,1193,0,0,18487,18488,5,286,0,0,18488,
        18489,5,484,0,0,18489,18491,1,0,0,0,18490,18484,1,0,0,0,18490,18491,
        1,0,0,0,18491,18498,1,0,0,0,18492,18493,5,2353,0,0,18493,18496,3,
        2360,1180,0,18494,18495,5,2353,0,0,18495,18497,3,2360,1180,0,18496,
        18494,1,0,0,0,18496,18497,1,0,0,0,18497,18499,1,0,0,0,18498,18492,
        1,0,0,0,18498,18499,1,0,0,0,18499,18500,1,0,0,0,18500,18501,5,2348,
        0,0,18501,18871,1,0,0,0,18502,18503,5,218,0,0,18503,18504,5,2347,
        0,0,18504,18510,3,2348,1174,0,18505,18508,5,2353,0,0,18506,18509,
        3,2356,1178,0,18507,18509,3,2360,1180,0,18508,18506,1,0,0,0,18508,
        18507,1,0,0,0,18509,18511,1,0,0,0,18510,18505,1,0,0,0,18510,18511,
        1,0,0,0,18511,18512,1,0,0,0,18512,18513,5,2348,0,0,18513,18871,1,
        0,0,0,18514,18515,5,223,0,0,18515,18517,5,2347,0,0,18516,18518,7,
        222,0,0,18517,18516,1,0,0,0,18517,18518,1,0,0,0,18518,18519,1,0,
        0,0,18519,18521,3,2076,1038,0,18520,18522,3,2178,1089,0,18521,18520,
        1,0,0,0,18521,18522,1,0,0,0,18522,18523,1,0,0,0,18523,18524,5,2348,
        0,0,18524,18871,1,0,0,0,18525,18526,3,2162,1081,0,18526,18528,3,
        2324,1162,0,18527,18529,3,2180,1090,0,18528,18527,1,0,0,0,18529,
        18530,1,0,0,0,18530,18528,1,0,0,0,18530,18531,1,0,0,0,18531,18871,
        1,0,0,0,18532,18533,5,2293,0,0,18533,18535,5,2347,0,0,18534,18536,
        7,179,0,0,18535,18534,1,0,0,0,18535,18536,1,0,0,0,18536,18537,1,
        0,0,0,18537,18540,3,2332,1166,0,18538,18539,5,2353,0,0,18539,18541,
        3,2182,1091,0,18540,18538,1,0,0,0,18540,18541,1,0,0,0,18541,18543,
        1,0,0,0,18542,18544,3,2156,1078,0,18543,18542,1,0,0,0,18543,18544,
        1,0,0,0,18544,18545,1,0,0,0,18545,18552,5,2348,0,0,18546,18547,5,
        2209,0,0,18547,18548,5,609,0,0,18548,18549,5,2347,0,0,18549,18550,
        3,1968,984,0,18550,18551,5,2348,0,0,18551,18553,1,0,0,0,18552,18546,
        1,0,0,0,18552,18553,1,0,0,0,18553,18555,1,0,0,0,18554,18556,3,2166,
        1083,0,18555,18554,1,0,0,0,18555,18556,1,0,0,0,18556,18871,1,0,0,
        0,18557,18558,3,2288,1144,0,18558,18559,7,223,0,0,18559,18871,1,
        0,0,0,18560,18561,5,362,0,0,18561,18562,5,2347,0,0,18562,18564,3,
        2076,1038,0,18563,18565,7,224,0,0,18564,18563,1,0,0,0,18564,18565,
        1,0,0,0,18565,18566,1,0,0,0,18566,18567,5,2348,0,0,18567,18871,1,
        0,0,0,18568,18569,5,526,0,0,18569,18570,5,2347,0,0,18570,18571,3,
        2370,1185,0,18571,18572,5,588,0,0,18572,18573,3,2076,1038,0,18573,
        18574,5,2348,0,0,18574,18871,1,0,0,0,18575,18576,7,225,0,0,18576,
        18578,3,2326,1163,0,18577,18579,3,2330,1165,0,18578,18577,1,0,0,
        0,18578,18579,1,0,0,0,18579,18580,1,0,0,0,18580,18581,3,2166,1083,
        0,18581,18871,1,0,0,0,18582,18583,7,226,0,0,18583,18585,3,2326,1163,
        0,18584,18586,3,2330,1165,0,18585,18584,1,0,0,0,18585,18586,1,0,
        0,0,18586,18587,1,0,0,0,18587,18588,3,2166,1083,0,18588,18871,1,
        0,0,0,18589,18590,3,2164,1082,0,18590,18591,5,2347,0,0,18591,18593,
        3,2050,1025,0,18592,18594,3,2184,1092,0,18593,18592,1,0,0,0,18593,
        18594,1,0,0,0,18594,18596,1,0,0,0,18595,18597,3,2174,1087,0,18596,
        18595,1,0,0,0,18596,18597,1,0,0,0,18597,18598,1,0,0,0,18598,18599,
        5,2348,0,0,18599,18871,1,0,0,0,18600,18601,7,227,0,0,18601,18602,
        5,2347,0,0,18602,18609,3,2076,1038,0,18603,18604,5,368,0,0,18604,
        18605,3,2076,1038,0,18605,18606,5,1193,0,0,18606,18607,5,286,0,0,
        18607,18608,5,484,0,0,18608,18610,1,0,0,0,18609,18603,1,0,0,0,18609,
        18610,1,0,0,0,18610,18617,1,0,0,0,18611,18612,5,2353,0,0,18612,18615,
        3,2360,1180,0,18613,18614,5,2353,0,0,18614,18616,3,2360,1180,0,18615,
        18613,1,0,0,0,18615,18616,1,0,0,0,18616,18618,1,0,0,0,18617,18611,
        1,0,0,0,18617,18618,1,0,0,0,18618,18619,1,0,0,0,18619,18620,5,2348,
        0,0,18620,18871,1,0,0,0,18621,18622,7,228,0,0,18622,18623,5,2347,
        0,0,18623,18630,3,2076,1038,0,18624,18625,5,368,0,0,18625,18626,
        3,2076,1038,0,18626,18627,5,1193,0,0,18627,18628,5,286,0,0,18628,
        18629,5,484,0,0,18629,18631,1,0,0,0,18630,18624,1,0,0,0,18630,18631,
        1,0,0,0,18631,18632,1,0,0,0,18632,18633,5,2348,0,0,18633,18871,1,
        0,0,0,18634,18635,5,2063,0,0,18635,18636,5,2347,0,0,18636,18639,
        3,2052,1026,0,18637,18638,5,2153,0,0,18638,18640,7,229,0,0,18639,
        18637,1,0,0,0,18639,18640,1,0,0,0,18640,18645,1,0,0,0,18641,18642,
        5,2353,0,0,18642,18644,3,2052,1026,0,18643,18641,1,0,0,0,18644,18647,
        1,0,0,0,18645,18643,1,0,0,0,18645,18646,1,0,0,0,18646,18648,1,0,
        0,0,18647,18645,1,0,0,0,18648,18649,5,2348,0,0,18649,18871,1,0,0,
        0,18650,18651,5,2065,0,0,18651,18652,5,2347,0,0,18652,18653,3,2052,
        1026,0,18653,18655,5,67,0,0,18654,18656,5,1452,0,0,18655,18654,1,
        0,0,0,18655,18656,1,0,0,0,18656,18657,1,0,0,0,18657,18658,3,2334,
        1167,0,18658,18663,5,2348,0,0,18659,18660,5,2340,0,0,18660,18662,
        3,2346,1173,0,18661,18659,1,0,0,0,18662,18665,1,0,0,0,18663,18661,
        1,0,0,0,18663,18664,1,0,0,0,18664,18871,1,0,0,0,18665,18663,1,0,
        0,0,18666,18667,5,2318,0,0,18667,18675,5,2347,0,0,18668,18670,7,
        208,0,0,18669,18668,1,0,0,0,18669,18670,1,0,0,0,18670,18672,1,0,
        0,0,18671,18673,3,2360,1180,0,18672,18671,1,0,0,0,18672,18673,1,
        0,0,0,18673,18674,1,0,0,0,18674,18676,5,588,0,0,18675,18669,1,0,
        0,0,18675,18676,1,0,0,0,18676,18677,1,0,0,0,18677,18678,3,2076,1038,
        0,18678,18679,5,2348,0,0,18679,18871,1,0,0,0,18680,18681,5,2161,
        0,0,18681,18682,5,2347,0,0,18682,18683,3,2076,1038,0,18683,18684,
        5,67,0,0,18684,18691,3,2334,1167,0,18685,18686,5,2353,0,0,18686,
        18689,3,2360,1180,0,18687,18688,5,2353,0,0,18688,18690,3,2360,1180,
        0,18689,18687,1,0,0,0,18689,18690,1,0,0,0,18690,18692,1,0,0,0,18691,
        18685,1,0,0,0,18691,18692,1,0,0,0,18692,18693,1,0,0,0,18693,18694,
        5,2348,0,0,18694,18871,1,0,0,0,18695,18696,5,2222,0,0,18696,18697,
        5,2347,0,0,18697,18699,3,2052,1026,0,18698,18700,3,1968,984,0,18699,
        18698,1,0,0,0,18699,18700,1,0,0,0,18700,18701,1,0,0,0,18701,18706,
        5,2348,0,0,18702,18703,5,2340,0,0,18703,18705,3,2346,1173,0,18704,
        18702,1,0,0,0,18705,18708,1,0,0,0,18706,18704,1,0,0,0,18706,18707,
        1,0,0,0,18707,18871,1,0,0,0,18708,18706,1,0,0,0,18709,18710,7,230,
        0,0,18710,18711,5,2347,0,0,18711,18716,3,2196,1098,0,18712,18713,
        5,2353,0,0,18713,18715,3,2196,1098,0,18714,18712,1,0,0,0,18715,18718,
        1,0,0,0,18716,18714,1,0,0,0,18716,18717,1,0,0,0,18717,18719,1,0,
        0,0,18718,18716,1,0,0,0,18719,18724,5,2348,0,0,18720,18721,5,2340,
        0,0,18721,18723,3,2346,1173,0,18722,18720,1,0,0,0,18723,18726,1,
        0,0,0,18724,18722,1,0,0,0,18724,18725,1,0,0,0,18725,18871,1,0,0,
        0,18726,18724,1,0,0,0,18727,18728,5,2231,0,0,18728,18730,5,2347,
        0,0,18729,18731,7,231,0,0,18730,18729,1,0,0,0,18730,18731,1,0,0,
        0,18731,18733,1,0,0,0,18732,18734,7,232,0,0,18733,18732,1,0,0,0,
        18733,18734,1,0,0,0,18734,18735,1,0,0,0,18735,18738,3,2052,1026,
        0,18736,18737,5,2353,0,0,18737,18739,3,2188,1094,0,18738,18736,1,
        0,0,0,18738,18739,1,0,0,0,18739,18747,1,0,0,0,18740,18741,5,2353,
        0,0,18741,18743,3,2052,1026,0,18742,18744,3,2222,1111,0,18743,18742,
        1,0,0,0,18743,18744,1,0,0,0,18744,18746,1,0,0,0,18745,18740,1,0,
        0,0,18746,18749,1,0,0,0,18747,18745,1,0,0,0,18747,18748,1,0,0,0,
        18748,18750,1,0,0,0,18749,18747,1,0,0,0,18750,18755,5,2348,0,0,18751,
        18752,5,2340,0,0,18752,18754,3,2346,1173,0,18753,18751,1,0,0,0,18754,
        18757,1,0,0,0,18755,18753,1,0,0,0,18755,18756,1,0,0,0,18756,18871,
        1,0,0,0,18757,18755,1,0,0,0,18758,18759,5,2233,0,0,18759,18760,5,
        2347,0,0,18760,18762,3,2052,1026,0,18761,18763,3,2186,1093,0,18762,
        18761,1,0,0,0,18762,18763,1,0,0,0,18763,18764,1,0,0,0,18764,18765,
        5,2348,0,0,18765,18871,1,0,0,0,18766,18767,5,2242,0,0,18767,18768,
        5,2347,0,0,18768,18769,7,233,0,0,18769,18771,3,2076,1038,0,18770,
        18772,5,2202,0,0,18771,18770,1,0,0,0,18771,18772,1,0,0,0,18772,18773,
        1,0,0,0,18773,18778,5,2348,0,0,18774,18775,5,2340,0,0,18775,18777,
        3,2346,1173,0,18776,18774,1,0,0,0,18777,18780,1,0,0,0,18778,18776,
        1,0,0,0,18778,18779,1,0,0,0,18779,18871,1,0,0,0,18780,18778,1,0,
        0,0,18781,18782,5,2244,0,0,18782,18787,5,2347,0,0,18783,18784,5,
        943,0,0,18784,18788,3,2362,1181,0,18785,18786,5,492,0,0,18786,18788,
        3,2076,1038,0,18787,18783,1,0,0,0,18787,18785,1,0,0,0,18788,18791,
        1,0,0,0,18789,18790,5,2353,0,0,18790,18792,3,2076,1038,0,18791,18789,
        1,0,0,0,18791,18792,1,0,0,0,18792,18793,1,0,0,0,18793,18798,5,2348,
        0,0,18794,18795,5,2340,0,0,18795,18797,3,2346,1173,0,18796,18794,
        1,0,0,0,18797,18800,1,0,0,0,18798,18796,1,0,0,0,18798,18799,1,0,
        0,0,18799,18871,1,0,0,0,18800,18798,1,0,0,0,18801,18802,5,2246,0,
        0,18802,18803,5,2347,0,0,18803,18805,3,2076,1038,0,18804,18806,3,
        2186,1093,0,18805,18804,1,0,0,0,18805,18806,1,0,0,0,18806,18807,
        1,0,0,0,18807,18808,5,1507,0,0,18808,18812,5,279,0,0,18809,18810,
        5,1162,0,0,18810,18811,5,1193,0,0,18811,18813,5,465,0,0,18812,18809,
        1,0,0,0,18812,18813,1,0,0,0,18813,18814,1,0,0,0,18814,18819,5,2348,
        0,0,18815,18816,5,2340,0,0,18816,18818,3,2346,1173,0,18817,18815,
        1,0,0,0,18818,18821,1,0,0,0,18819,18817,1,0,0,0,18819,18820,1,0,
        0,0,18820,18871,1,0,0,0,18821,18819,1,0,0,0,18822,18823,5,2247,0,
        0,18823,18824,5,2347,0,0,18824,18827,3,2076,1038,0,18825,18826,5,
        2353,0,0,18826,18828,3,2198,1099,0,18827,18825,1,0,0,0,18827,18828,
        1,0,0,0,18828,18831,1,0,0,0,18829,18830,5,2353,0,0,18830,18832,3,
        2200,1100,0,18831,18829,1,0,0,0,18831,18832,1,0,0,0,18832,18833,
        1,0,0,0,18833,18838,5,2348,0,0,18834,18835,5,2340,0,0,18835,18837,
        3,2346,1173,0,18836,18834,1,0,0,0,18837,18840,1,0,0,0,18838,18836,
        1,0,0,0,18838,18839,1,0,0,0,18839,18871,1,0,0,0,18840,18838,1,0,
        0,0,18841,18842,5,2249,0,0,18842,18843,5,2347,0,0,18843,18844,7,
        233,0,0,18844,18847,3,2076,1038,0,18845,18846,5,67,0,0,18846,18848,
        3,2334,1167,0,18847,18845,1,0,0,0,18847,18848,1,0,0,0,18848,18850,
        1,0,0,0,18849,18851,3,2202,1101,0,18850,18849,1,0,0,0,18850,18851,
        1,0,0,0,18851,18853,1,0,0,0,18852,18854,3,2204,1102,0,18853,18852,
        1,0,0,0,18853,18854,1,0,0,0,18854,18856,1,0,0,0,18855,18857,3,2206,
        1103,0,18856,18855,1,0,0,0,18856,18857,1,0,0,0,18857,18860,1,0,0,
        0,18858,18859,7,234,0,0,18859,18861,5,369,0,0,18860,18858,1,0,0,
        0,18860,18861,1,0,0,0,18861,18862,1,0,0,0,18862,18865,5,2348,0,0,
        18863,18864,5,2340,0,0,18864,18866,3,2346,1173,0,18865,18863,1,0,
        0,0,18865,18866,1,0,0,0,18866,18871,1,0,0,0,18867,18868,5,2024,0,
        0,18868,18871,5,2343,0,0,18869,18871,3,2304,1152,0,18870,18449,1,
        0,0,0,18870,18454,1,0,0,0,18870,18459,1,0,0,0,18870,18472,1,0,0,
        0,18870,18502,1,0,0,0,18870,18514,1,0,0,0,18870,18525,1,0,0,0,18870,
        18532,1,0,0,0,18870,18557,1,0,0,0,18870,18560,1,0,0,0,18870,18568,
        1,0,0,0,18870,18575,1,0,0,0,18870,18582,1,0,0,0,18870,18589,1,0,
        0,0,18870,18600,1,0,0,0,18870,18621,1,0,0,0,18870,18634,1,0,0,0,
        18870,18650,1,0,0,0,18870,18666,1,0,0,0,18870,18680,1,0,0,0,18870,
        18695,1,0,0,0,18870,18709,1,0,0,0,18870,18727,1,0,0,0,18870,18758,
        1,0,0,0,18870,18766,1,0,0,0,18870,18781,1,0,0,0,18870,18801,1,0,
        0,0,18870,18822,1,0,0,0,18870,18841,1,0,0,0,18870,18867,1,0,0,0,
        18870,18869,1,0,0,0,18871,2159,1,0,0,0,18872,18873,7,235,0,0,18873,
        2161,1,0,0,0,18874,18875,7,236,0,0,18875,2163,1,0,0,0,18876,18877,
        7,237,0,0,18877,2165,1,0,0,0,18878,18879,5,1251,0,0,18879,18900,
        5,2347,0,0,18880,18882,3,1900,950,0,18881,18880,1,0,0,0,18881,18882,
        1,0,0,0,18882,18887,1,0,0,0,18883,18885,3,1968,984,0,18884,18886,
        3,2168,1084,0,18885,18884,1,0,0,0,18885,18886,1,0,0,0,18886,18888,
        1,0,0,0,18887,18883,1,0,0,0,18887,18888,1,0,0,0,18888,18901,1,0,
        0,0,18889,18890,5,633,0,0,18890,18891,3,2364,1182,0,18891,18892,
        5,1179,0,0,18892,18898,3,2356,1178,0,18893,18894,5,10,0,0,18894,
        18895,5,47,0,0,18895,18896,5,80,0,0,18896,18897,5,798,0,0,18897,
        18899,3,2364,1182,0,18898,18893,1,0,0,0,18898,18899,1,0,0,0,18899,
        18901,1,0,0,0,18900,18881,1,0,0,0,18900,18889,1,0,0,0,18901,18902,
        1,0,0,0,18902,18903,5,2348,0,0,18903,2167,1,0,0,0,18904,18911,3,
        2170,1085,0,18905,18906,5,115,0,0,18906,18907,3,2172,1086,0,18907,
        18908,5,49,0,0,18908,18909,3,2172,1086,0,18909,18912,1,0,0,0,18910,
        18912,3,2172,1086,0,18911,18905,1,0,0,0,18911,18910,1,0,0,0,18912,
        2169,1,0,0,0,18913,18914,7,238,0,0,18914,2171,1,0,0,0,18915,18916,
        5,2083,0,0,18916,18923,5,1362,0,0,18917,18918,5,319,0,0,18918,18923,
        5,1528,0,0,18919,18920,3,2076,1038,0,18920,18921,7,239,0,0,18921,
        18923,1,0,0,0,18922,18915,1,0,0,0,18922,18917,1,0,0,0,18922,18919,
        1,0,0,0,18923,2173,1,0,0,0,18924,18934,5,2153,0,0,18925,18935,5,
        2350,0,0,18926,18931,3,2176,1088,0,18927,18928,5,2353,0,0,18928,
        18930,3,2176,1088,0,18929,18927,1,0,0,0,18930,18933,1,0,0,0,18931,
        18929,1,0,0,0,18931,18932,1,0,0,0,18932,18935,1,0,0,0,18933,18931,
        1,0,0,0,18934,18925,1,0,0,0,18934,18926,1,0,0,0,18935,2175,1,0,0,
        0,18936,18938,5,696,0,0,18937,18939,5,1247,0,0,18938,18937,1,0,0,
        0,18938,18939,1,0,0,0,18939,18942,1,0,0,0,18940,18942,5,1247,0,0,
        18941,18936,1,0,0,0,18941,18940,1,0,0,0,18941,18942,1,0,0,0,18942,
        18943,1,0,0,0,18943,18944,3,1882,941,0,18944,2177,1,0,0,0,18945,
        18946,5,1233,0,0,18946,18947,5,154,0,0,18947,18952,3,2076,1038,0,
        18948,18949,5,2353,0,0,18949,18951,3,2076,1038,0,18950,18948,1,0,
        0,0,18951,18954,1,0,0,0,18952,18950,1,0,0,0,18952,18953,1,0,0,0,
        18953,2179,1,0,0,0,18954,18952,1,0,0,0,18955,18956,5,2209,0,0,18956,
        18957,5,609,0,0,18957,18958,5,2347,0,0,18958,18959,3,1968,984,0,
        18959,18960,5,2348,0,0,18960,18963,1,0,0,0,18961,18963,3,2166,1083,
        0,18962,18955,1,0,0,0,18962,18961,1,0,0,0,18963,2181,1,0,0,0,18964,
        18965,6,1091,-1,0,18965,18973,5,2343,0,0,18966,18973,3,2110,1055,
        0,18967,18968,5,2347,0,0,18968,18969,3,2182,1091,0,18969,18970,5,
        2348,0,0,18970,18973,1,0,0,0,18971,18973,3,2364,1182,0,18972,18964,
        1,0,0,0,18972,18966,1,0,0,0,18972,18967,1,0,0,0,18972,18971,1,0,
        0,0,18973,18980,1,0,0,0,18974,18975,10,3,0,0,18975,18976,5,2368,
        0,0,18976,18977,5,2368,0,0,18977,18979,3,2182,1091,4,18978,18974,
        1,0,0,0,18979,18982,1,0,0,0,18980,18978,1,0,0,0,18980,18981,1,0,
        0,0,18981,2183,1,0,0,0,18982,18980,1,0,0,0,18983,19005,5,296,0,0,
        18984,18986,5,917,0,0,18985,18987,5,89,0,0,18986,18985,1,0,0,0,18986,
        18987,1,0,0,0,18987,19006,1,0,0,0,18988,18989,5,2347,0,0,18989,18994,
        3,2234,1117,0,18990,18991,5,2353,0,0,18991,18993,3,2234,1117,0,18992,
        18990,1,0,0,0,18993,18996,1,0,0,0,18994,18992,1,0,0,0,18994,18995,
        1,0,0,0,18995,18997,1,0,0,0,18996,18994,1,0,0,0,18997,18998,5,2348,
        0,0,18998,18999,5,2164,0,0,18999,19001,5,2347,0,0,19000,19002,3,
        2050,1025,0,19001,19000,1,0,0,0,19001,19002,1,0,0,0,19002,19003,
        1,0,0,0,19003,19004,5,2348,0,0,19004,19006,1,0,0,0,19005,18984,1,
        0,0,0,19005,18988,1,0,0,0,19006,2185,1,0,0,0,19007,19010,5,1279,
        0,0,19008,19009,5,154,0,0,19009,19011,5,2165,0,0,19010,19008,1,0,
        0,0,19010,19011,1,0,0,0,19011,19012,1,0,0,0,19012,19014,3,2052,1026,
        0,19013,19015,3,2222,1111,0,19014,19013,1,0,0,0,19014,19015,1,0,
        0,0,19015,19023,1,0,0,0,19016,19017,5,2353,0,0,19017,19019,3,2052,
        1026,0,19018,19020,3,2222,1111,0,19019,19018,1,0,0,0,19019,19020,
        1,0,0,0,19020,19022,1,0,0,0,19021,19016,1,0,0,0,19022,19025,1,0,
        0,0,19023,19021,1,0,0,0,19023,19024,1,0,0,0,19024,2187,1,0,0,0,19025,
        19023,1,0,0,0,19026,19027,5,2223,0,0,19027,19029,5,2347,0,0,19028,
        19030,7,231,0,0,19029,19028,1,0,0,0,19029,19030,1,0,0,0,19030,19032,
        1,0,0,0,19031,19033,7,240,0,0,19032,19031,1,0,0,0,19032,19033,1,
        0,0,0,19033,19034,1,0,0,0,19034,19039,3,2196,1098,0,19035,19036,
        5,2353,0,0,19036,19038,3,2196,1098,0,19037,19035,1,0,0,0,19038,19041,
        1,0,0,0,19039,19037,1,0,0,0,19039,19040,1,0,0,0,19040,19042,1,0,
        0,0,19041,19039,1,0,0,0,19042,19043,5,2348,0,0,19043,2189,1,0,0,
        0,19044,19045,5,2241,0,0,19045,19049,5,2347,0,0,19046,19047,3,2076,
        1038,0,19047,19048,3,2222,1111,0,19048,19050,1,0,0,0,19049,19046,
        1,0,0,0,19049,19050,1,0,0,0,19050,19057,1,0,0,0,19051,19052,5,2353,
        0,0,19052,19053,3,2076,1038,0,19053,19054,3,2222,1111,0,19054,19056,
        1,0,0,0,19055,19051,1,0,0,0,19056,19059,1,0,0,0,19057,19055,1,0,
        0,0,19057,19058,1,0,0,0,19058,19061,1,0,0,0,19059,19057,1,0,0,0,
        19060,19062,3,2194,1097,0,19061,19060,1,0,0,0,19061,19062,1,0,0,
        0,19062,19063,1,0,0,0,19063,19064,5,2348,0,0,19064,2191,1,0,0,0,
        19065,19076,3,2232,1116,0,19066,19067,5,580,0,0,19067,19077,5,1234,
        0,0,19068,19071,3,2334,1167,0,19069,19070,5,1290,0,0,19070,19072,
        3,2076,1038,0,19071,19069,1,0,0,0,19071,19072,1,0,0,0,19072,19074,
        1,0,0,0,19073,19075,3,2194,1097,0,19074,19073,1,0,0,0,19074,19075,
        1,0,0,0,19075,19077,1,0,0,0,19076,19066,1,0,0,0,19076,19068,1,0,
        0,0,19077,2193,1,0,0,0,19078,19079,5,368,0,0,19079,19080,3,2076,
        1038,0,19080,2195,1,0,0,0,19081,19088,3,2052,1026,0,19082,19086,
        5,67,0,0,19083,19087,3,2364,1182,0,19084,19085,5,492,0,0,19085,19087,
        3,2076,1038,0,19086,19083,1,0,0,0,19086,19084,1,0,0,0,19087,19089,
        1,0,0,0,19088,19082,1,0,0,0,19088,19089,1,0,0,0,19089,2197,1,0,0,
        0,19090,19094,5,2189,0,0,19091,19092,5,1074,0,0,19092,19095,5,2165,
        0,0,19093,19095,3,2052,1026,0,19094,19091,1,0,0,0,19094,19093,1,
        0,0,0,19095,2199,1,0,0,0,19096,19102,5,1646,0,0,19097,19103,5,2261,
        0,0,19098,19100,5,1074,0,0,19099,19101,5,2165,0,0,19100,19099,1,
        0,0,0,19100,19101,1,0,0,0,19101,19103,1,0,0,0,19102,19097,1,0,0,
        0,19102,19098,1,0,0,0,19103,2201,1,0,0,0,19104,19105,5,470,0,0,19105,
        19106,3,2076,1038,0,19106,2203,1,0,0,0,19107,19108,5,2189,0,0,19108,
        19109,3,2076,1038,0,19109,2205,1,0,0,0,19110,19111,5,1074,0,0,19111,
        19119,5,667,0,0,19112,19116,5,667,0,0,19113,19114,5,1617,0,0,19114,
        19115,5,2369,0,0,19115,19117,3,2076,1038,0,19116,19113,1,0,0,0,19116,
        19117,1,0,0,0,19117,19119,1,0,0,0,19118,19110,1,0,0,0,19118,19112,
        1,0,0,0,19119,2207,1,0,0,0,19120,19121,3,2216,1108,0,19121,2209,
        1,0,0,0,19122,19130,5,510,0,0,19123,19130,5,2376,0,0,19124,19125,
        5,1601,0,0,19125,19130,7,241,0,0,19126,19130,3,2214,1107,0,19127,
        19130,3,2218,1109,0,19128,19130,3,2212,1106,0,19129,19122,1,0,0,
        0,19129,19123,1,0,0,0,19129,19124,1,0,0,0,19129,19126,1,0,0,0,19129,
        19127,1,0,0,0,19129,19128,1,0,0,0,19130,2211,1,0,0,0,19131,19132,
        5,2377,0,0,19132,19133,3,2364,1182,0,19133,19134,5,2340,0,0,19134,
        19135,7,242,0,0,19135,2213,1,0,0,0,19136,19137,5,2203,0,0,19137,
        19153,7,243,0,0,19138,19144,5,510,0,0,19139,19145,5,1703,0,0,19140,
        19145,5,537,0,0,19141,19145,5,2199,0,0,19142,19145,3,2284,1142,0,
        19143,19145,3,2356,1178,0,19144,19139,1,0,0,0,19144,19140,1,0,0,
        0,19144,19141,1,0,0,0,19144,19142,1,0,0,0,19144,19143,1,0,0,0,19145,
        19147,1,0,0,0,19146,19148,7,244,0,0,19147,19146,1,0,0,0,19147,19148,
        1,0,0,0,19148,19154,1,0,0,0,19149,19151,5,282,0,0,19150,19152,7,
        245,0,0,19151,19150,1,0,0,0,19151,19152,1,0,0,0,19152,19154,1,0,
        0,0,19153,19138,1,0,0,0,19153,19149,1,0,0,0,19154,2215,1,0,0,0,19155,
        19156,5,1590,0,0,19156,19162,3,2370,1185,0,19157,19163,5,2343,0,
        0,19158,19163,5,1193,0,0,19159,19163,5,1178,0,0,19160,19163,3,2356,
        1178,0,19161,19163,3,2370,1185,0,19162,19157,1,0,0,0,19162,19158,
        1,0,0,0,19162,19159,1,0,0,0,19162,19160,1,0,0,0,19162,19161,1,0,
        0,0,19163,2217,1,0,0,0,19164,19174,5,2032,0,0,19165,19169,5,1654,
        0,0,19166,19168,3,2364,1182,0,19167,19166,1,0,0,0,19168,19171,1,
        0,0,0,19169,19167,1,0,0,0,19169,19170,1,0,0,0,19170,19175,1,0,0,
        0,19171,19169,1,0,0,0,19172,19175,5,1601,0,0,19173,19175,5,1677,
        0,0,19174,19165,1,0,0,0,19174,19172,1,0,0,0,19174,19173,1,0,0,0,
        19174,19175,1,0,0,0,19175,2219,1,0,0,0,19176,19178,7,246,0,0,19177,
        19179,5,580,0,0,19178,19177,1,0,0,0,19178,19179,1,0,0,0,19179,19180,
        1,0,0,0,19180,19182,5,2347,0,0,19181,19183,3,2050,1025,0,19182,19181,
        1,0,0,0,19182,19183,1,0,0,0,19183,19184,1,0,0,0,19184,19185,5,2348,
        0,0,19185,2221,1,0,0,0,19186,19188,5,67,0,0,19187,19186,1,0,0,0,
        19187,19188,1,0,0,0,19188,19191,1,0,0,0,19189,19192,3,2362,1181,
        0,19190,19192,3,2360,1180,0,19191,19189,1,0,0,0,19191,19190,1,0,
        0,0,19192,19195,1,0,0,0,19193,19195,5,67,0,0,19194,19187,1,0,0,0,
        19194,19193,1,0,0,0,19195,2223,1,0,0,0,19196,19199,3,2362,1181,0,
        19197,19199,3,2360,1180,0,19198,19196,1,0,0,0,19198,19197,1,0,0,
        0,19199,2225,1,0,0,0,19200,19206,5,2205,0,0,19201,19202,5,319,0,
        0,19202,19203,5,1180,0,0,19203,19207,3,2288,1144,0,19204,19207,3,
        2048,1024,0,19205,19207,3,2228,1114,0,19206,19201,1,0,0,0,19206,
        19204,1,0,0,0,19206,19205,1,0,0,0,19207,2227,1,0,0,0,19208,19209,
        3,2052,1026,0,19209,19210,3,2070,1035,0,19210,19211,7,247,0,0,19211,
        19212,5,2347,0,0,19212,19217,3,2052,1026,0,19213,19214,5,2353,0,
        0,19214,19216,3,2052,1026,0,19215,19213,1,0,0,0,19216,19219,1,0,
        0,0,19217,19215,1,0,0,0,19217,19218,1,0,0,0,19218,19220,1,0,0,0,
        19219,19217,1,0,0,0,19220,19221,5,2348,0,0,19221,2229,1,0,0,0,19222,
        19223,5,153,0,0,19223,19225,5,223,0,0,19224,19222,1,0,0,0,19224,
        19225,1,0,0,0,19225,19226,1,0,0,0,19226,19229,5,735,0,0,19227,19230,
        3,2344,1172,0,19228,19230,3,2342,1171,0,19229,19227,1,0,0,0,19229,
        19228,1,0,0,0,19230,19238,1,0,0,0,19231,19234,5,2353,0,0,19232,19235,
        3,2344,1172,0,19233,19235,3,2342,1171,0,19234,19232,1,0,0,0,19234,
        19233,1,0,0,0,19235,19237,1,0,0,0,19236,19231,1,0,0,0,19237,19240,
        1,0,0,0,19238,19236,1,0,0,0,19238,19239,1,0,0,0,19239,2231,1,0,0,
        0,19240,19238,1,0,0,0,19241,19244,3,2362,1181,0,19242,19244,3,2360,
        1180,0,19243,19241,1,0,0,0,19243,19242,1,0,0,0,19244,2233,1,0,0,
        0,19245,19246,3,2362,1181,0,19246,2235,1,0,0,0,19247,19248,3,2362,
        1181,0,19248,2237,1,0,0,0,19249,19250,3,2362,1181,0,19250,2239,1,
        0,0,0,19251,19252,3,2362,1181,0,19252,2241,1,0,0,0,19253,19254,3,
        2362,1181,0,19254,2243,1,0,0,0,19255,19256,3,2362,1181,0,19256,2245,
        1,0,0,0,19257,19262,3,2362,1181,0,19258,19259,5,2340,0,0,19259,19261,
        3,2364,1182,0,19260,19258,1,0,0,0,19261,19264,1,0,0,0,19262,19260,
        1,0,0,0,19262,19263,1,0,0,0,19263,19267,1,0,0,0,19264,19262,1,0,
        0,0,19265,19266,5,2355,0,0,19266,19268,3,2294,1147,0,19267,19265,
        1,0,0,0,19267,19268,1,0,0,0,19268,2247,1,0,0,0,19269,19270,3,2362,
        1181,0,19270,2249,1,0,0,0,19271,19274,3,2362,1181,0,19272,19273,
        5,2340,0,0,19273,19275,3,2364,1182,0,19274,19272,1,0,0,0,19274,19275,
        1,0,0,0,19275,2251,1,0,0,0,19276,19277,3,2362,1181,0,19277,2253,
        1,0,0,0,19278,19279,3,2362,1181,0,19279,2255,1,0,0,0,19280,19281,
        3,2362,1181,0,19281,2257,1,0,0,0,19282,19285,3,2362,1181,0,19283,
        19284,5,2340,0,0,19284,19286,3,2364,1182,0,19285,19283,1,0,0,0,19285,
        19286,1,0,0,0,19286,2259,1,0,0,0,19287,19292,3,2362,1181,0,19288,
        19289,5,2340,0,0,19289,19291,3,2364,1182,0,19290,19288,1,0,0,0,19291,
        19294,1,0,0,0,19292,19290,1,0,0,0,19292,19293,1,0,0,0,19293,2261,
        1,0,0,0,19294,19292,1,0,0,0,19295,19296,3,2362,1181,0,19296,2263,
        1,0,0,0,19297,19299,3,2364,1182,0,19298,19300,3,572,286,0,19299,
        19298,1,0,0,0,19299,19300,1,0,0,0,19300,2265,1,0,0,0,19301,19304,
        3,2364,1182,0,19302,19304,5,265,0,0,19303,19301,1,0,0,0,19303,19302,
        1,0,0,0,19304,2267,1,0,0,0,19305,19310,3,2362,1181,0,19306,19307,
        5,2340,0,0,19307,19309,3,2364,1182,0,19308,19306,1,0,0,0,19309,19312,
        1,0,0,0,19310,19308,1,0,0,0,19310,19311,1,0,0,0,19311,19315,1,0,
        0,0,19312,19310,1,0,0,0,19313,19314,5,2355,0,0,19314,19316,3,2294,
        1147,0,19315,19313,1,0,0,0,19315,19316,1,0,0,0,19316,2269,1,0,0,
        0,19317,19318,3,2364,1182,0,19318,2271,1,0,0,0,19319,19324,3,2364,
        1182,0,19320,19321,5,2340,0,0,19321,19323,3,2364,1182,0,19322,19320,
        1,0,0,0,19323,19326,1,0,0,0,19324,19322,1,0,0,0,19324,19325,1,0,
        0,0,19325,2273,1,0,0,0,19326,19324,1,0,0,0,19327,19332,3,2364,1182,
        0,19328,19329,5,2340,0,0,19329,19331,3,2364,1182,0,19330,19328,1,
        0,0,0,19331,19334,1,0,0,0,19332,19330,1,0,0,0,19332,19333,1,0,0,
        0,19333,2275,1,0,0,0,19334,19332,1,0,0,0,19335,19340,3,2362,1181,
        0,19336,19337,5,2340,0,0,19337,19339,3,2364,1182,0,19338,19336,1,
        0,0,0,19339,19342,1,0,0,0,19340,19338,1,0,0,0,19340,19341,1,0,0,
        0,19341,2277,1,0,0,0,19342,19340,1,0,0,0,19343,19346,3,2362,1181,
        0,19344,19345,5,2340,0,0,19345,19347,3,2364,1182,0,19346,19344,1,
        0,0,0,19346,19347,1,0,0,0,19347,2279,1,0,0,0,19348,19351,3,2362,
        1181,0,19349,19350,5,2340,0,0,19350,19352,3,2364,1182,0,19351,19349,
        1,0,0,0,19351,19352,1,0,0,0,19352,2281,1,0,0,0,19353,19356,3,2362,
        1181,0,19354,19355,5,2340,0,0,19355,19357,3,2364,1182,0,19356,19354,
        1,0,0,0,19356,19357,1,0,0,0,19357,2283,1,0,0,0,19358,19359,5,2372,
        0,0,19359,19361,3,2306,1153,0,19360,19358,1,0,0,0,19360,19361,1,
        0,0,0,19361,19362,1,0,0,0,19362,19365,3,2364,1182,0,19363,19364,
        5,2340,0,0,19364,19366,3,2364,1182,0,19365,19363,1,0,0,0,19365,19366,
        1,0,0,0,19366,19369,1,0,0,0,19367,19369,3,2342,1171,0,19368,19360,
        1,0,0,0,19368,19367,1,0,0,0,19369,2285,1,0,0,0,19370,19373,3,2362,
        1181,0,19371,19372,5,2340,0,0,19372,19374,3,2364,1182,0,19373,19371,
        1,0,0,0,19373,19374,1,0,0,0,19374,2287,1,0,0,0,19375,19378,3,2344,
        1172,0,19376,19378,3,2342,1171,0,19377,19375,1,0,0,0,19377,19376,
        1,0,0,0,19378,2289,1,0,0,0,19379,19382,3,2362,1181,0,19380,19382,
        3,2342,1171,0,19381,19379,1,0,0,0,19381,19380,1,0,0,0,19382,2291,
        1,0,0,0,19383,19386,3,2362,1181,0,19384,19385,5,2340,0,0,19385,19387,
        3,2364,1182,0,19386,19384,1,0,0,0,19386,19387,1,0,0,0,19387,2293,
        1,0,0,0,19388,19393,3,1416,708,0,19389,19390,5,2340,0,0,19390,19392,
        3,1414,707,0,19391,19389,1,0,0,0,19392,19395,1,0,0,0,19393,19391,
        1,0,0,0,19393,19394,1,0,0,0,19394,19398,1,0,0,0,19395,19393,1,0,
        0,0,19396,19397,5,2355,0,0,19397,19399,3,2298,1149,0,19398,19396,
        1,0,0,0,19398,19399,1,0,0,0,19399,2295,1,0,0,0,19400,19401,3,2362,
        1181,0,19401,2297,1,0,0,0,19402,19403,3,2362,1181,0,19403,2299,1,
        0,0,0,19404,19409,3,2362,1181,0,19405,19406,5,2340,0,0,19406,19408,
        3,2364,1182,0,19407,19405,1,0,0,0,19408,19411,1,0,0,0,19409,19407,
        1,0,0,0,19409,19410,1,0,0,0,19410,2301,1,0,0,0,19411,19409,1,0,0,
        0,19412,19415,3,2362,1181,0,19413,19414,5,2340,0,0,19414,19416,3,
        2364,1182,0,19415,19413,1,0,0,0,19415,19416,1,0,0,0,19416,19420,
        1,0,0,0,19417,19418,5,2355,0,0,19418,19421,3,2294,1147,0,19419,19421,
        3,2220,1110,0,19420,19417,1,0,0,0,19420,19419,1,0,0,0,19420,19421,
        1,0,0,0,19421,19427,1,0,0,0,19422,19424,3,2304,1152,0,19423,19425,
        3,2368,1184,0,19424,19423,1,0,0,0,19424,19425,1,0,0,0,19425,19427,
        1,0,0,0,19426,19412,1,0,0,0,19426,19422,1,0,0,0,19427,2303,1,0,0,
        0,19428,19429,5,2250,0,0,19429,19433,5,2347,0,0,19430,19431,3,2190,
        1095,0,19431,19432,5,2353,0,0,19432,19434,1,0,0,0,19433,19430,1,
        0,0,0,19433,19434,1,0,0,0,19434,19435,1,0,0,0,19435,19437,3,2076,
        1038,0,19436,19438,3,2186,1093,0,19437,19436,1,0,0,0,19437,19438,
        1,0,0,0,19438,19448,1,0,0,0,19439,19440,5,227,0,0,19440,19445,3,
        2192,1096,0,19441,19442,5,2353,0,0,19442,19444,3,2192,1096,0,19443,
        19441,1,0,0,0,19444,19447,1,0,0,0,19445,19443,1,0,0,0,19445,19446,
        1,0,0,0,19446,19449,1,0,0,0,19447,19445,1,0,0,0,19448,19439,1,0,
        0,0,19448,19449,1,0,0,0,19449,19450,1,0,0,0,19450,19453,5,2348,0,
        0,19451,19452,5,2340,0,0,19452,19454,3,2346,1173,0,19453,19451,1,
        0,0,0,19453,19454,1,0,0,0,19454,2305,1,0,0,0,19455,19460,3,2364,
        1182,0,19456,19457,5,2340,0,0,19457,19459,3,2364,1182,0,19458,19456,
        1,0,0,0,19459,19462,1,0,0,0,19460,19458,1,0,0,0,19460,19461,1,0,
        0,0,19461,2307,1,0,0,0,19462,19460,1,0,0,0,19463,19464,3,2362,1181,
        0,19464,2309,1,0,0,0,19465,19466,3,2364,1182,0,19466,2311,1,0,0,
        0,19467,19468,3,2364,1182,0,19468,2313,1,0,0,0,19469,19470,3,2364,
        1182,0,19470,2315,1,0,0,0,19471,19496,3,2302,1151,0,19472,19473,
        5,2144,0,0,19473,19478,3,2314,1157,0,19474,19475,5,2353,0,0,19475,
        19477,3,2314,1157,0,19476,19474,1,0,0,0,19477,19480,1,0,0,0,19478,
        19476,1,0,0,0,19478,19479,1,0,0,0,19479,19496,1,0,0,0,19480,19478,
        1,0,0,0,19481,19482,5,401,0,0,19482,19496,3,2312,1156,0,19483,19484,
        5,452,0,0,19484,19496,3,2310,1155,0,19485,19486,5,901,0,0,19486,
        19487,5,917,0,0,19487,19496,3,2310,1155,0,19488,19489,5,746,0,0,
        19489,19490,7,82,0,0,19490,19496,3,2310,1155,0,19491,19492,5,1639,
        0,0,19492,19493,5,2064,0,0,19493,19494,5,1388,0,0,19494,19496,3,
        2310,1155,0,19495,19471,1,0,0,0,19495,19472,1,0,0,0,19495,19481,
        1,0,0,0,19495,19483,1,0,0,0,19495,19485,1,0,0,0,19495,19488,1,0,
        0,0,19495,19491,1,0,0,0,19496,2317,1,0,0,0,19497,19502,3,2300,1150,
        0,19498,19499,5,2353,0,0,19499,19501,3,2300,1150,0,19500,19498,1,
        0,0,0,19501,19504,1,0,0,0,19502,19500,1,0,0,0,19502,19503,1,0,0,
        0,19503,2319,1,0,0,0,19504,19502,1,0,0,0,19505,19506,5,2347,0,0,
        19506,19507,3,2318,1159,0,19507,19508,5,2348,0,0,19508,2321,1,0,
        0,0,19509,19510,5,768,0,0,19510,19511,5,2347,0,0,19511,19512,5,2292,
        0,0,19512,19515,7,53,0,0,19513,19516,3,1900,950,0,19514,19516,3,
        1968,984,0,19515,19513,1,0,0,0,19515,19514,1,0,0,0,19516,19517,1,
        0,0,0,19517,19519,5,2348,0,0,19518,19520,3,2166,1083,0,19519,19518,
        1,0,0,0,19519,19520,1,0,0,0,19520,2323,1,0,0,0,19521,19530,5,2347,
        0,0,19522,19527,3,2332,1166,0,19523,19524,5,2353,0,0,19524,19526,
        3,2332,1166,0,19525,19523,1,0,0,0,19526,19529,1,0,0,0,19527,19525,
        1,0,0,0,19527,19528,1,0,0,0,19528,19531,1,0,0,0,19529,19527,1,0,
        0,0,19530,19522,1,0,0,0,19530,19531,1,0,0,0,19531,19532,1,0,0,0,
        19532,19534,5,2348,0,0,19533,19535,3,2322,1161,0,19534,19533,1,0,
        0,0,19534,19535,1,0,0,0,19535,2325,1,0,0,0,19536,19551,5,2347,0,
        0,19537,19539,3,2332,1166,0,19538,19540,3,2330,1165,0,19539,19538,
        1,0,0,0,19539,19540,1,0,0,0,19540,19548,1,0,0,0,19541,19542,5,2353,
        0,0,19542,19544,3,2332,1166,0,19543,19545,3,2330,1165,0,19544,19543,
        1,0,0,0,19544,19545,1,0,0,0,19545,19547,1,0,0,0,19546,19541,1,0,
        0,0,19547,19550,1,0,0,0,19548,19546,1,0,0,0,19548,19549,1,0,0,0,
        19549,19552,1,0,0,0,19550,19548,1,0,0,0,19551,19537,1,0,0,0,19551,
        19552,1,0,0,0,19552,19553,1,0,0,0,19553,19555,5,2348,0,0,19554,19556,
        3,2322,1161,0,19555,19554,1,0,0,0,19555,19556,1,0,0,0,19556,2327,
        1,0,0,0,19557,19558,5,2347,0,0,19558,19571,3,2300,1150,0,19559,19562,
        5,2353,0,0,19560,19563,3,2356,1178,0,19561,19563,5,1162,0,0,19562,
        19560,1,0,0,0,19562,19561,1,0,0,0,19563,19569,1,0,0,0,19564,19567,
        5,2353,0,0,19565,19568,3,2356,1178,0,19566,19568,5,1162,0,0,19567,
        19565,1,0,0,0,19567,19566,1,0,0,0,19568,19570,1,0,0,0,19569,19564,
        1,0,0,0,19569,19570,1,0,0,0,19570,19572,1,0,0,0,19571,19559,1,0,
        0,0,19571,19572,1,0,0,0,19572,19573,1,0,0,0,19573,19593,5,2153,0,
        0,19574,19575,3,2302,1151,0,19575,19576,5,2340,0,0,19576,19577,5,
        2350,0,0,19577,19594,1,0,0,0,19578,19594,5,2350,0,0,19579,19581,
        3,2052,1026,0,19580,19582,3,2222,1111,0,19581,19580,1,0,0,0,19581,
        19582,1,0,0,0,19582,19590,1,0,0,0,19583,19584,5,2353,0,0,19584,19586,
        3,2052,1026,0,19585,19587,3,2222,1111,0,19586,19585,1,0,0,0,19586,
        19587,1,0,0,0,19587,19589,1,0,0,0,19588,19583,1,0,0,0,19589,19592,
        1,0,0,0,19590,19588,1,0,0,0,19590,19591,1,0,0,0,19591,19594,1,0,
        0,0,19592,19590,1,0,0,0,19593,19574,1,0,0,0,19593,19578,1,0,0,0,
        19593,19579,1,0,0,0,19594,19595,1,0,0,0,19595,19597,5,2348,0,0,19596,
        19598,3,2322,1161,0,19597,19596,1,0,0,0,19597,19598,1,0,0,0,19598,
        2329,1,0,0,0,19599,19600,7,248,0,0,19600,19601,5,1163,0,0,19601,
        2331,1,0,0,0,19602,19603,3,2362,1181,0,19603,19604,5,2369,0,0,19604,
        19605,5,2364,0,0,19605,19607,1,0,0,0,19606,19602,1,0,0,0,19606,19607,
        1,0,0,0,19607,19608,1,0,0,0,19608,19609,3,2052,1026,0,19609,2333,
        1,0,0,0,19610,19619,3,2336,1168,0,19611,19613,5,1452,0,0,19612,19611,
        1,0,0,0,19612,19613,1,0,0,0,19613,19614,1,0,0,0,19614,19616,3,2272,
        1136,0,19615,19617,7,249,0,0,19616,19615,1,0,0,0,19616,19617,1,0,
        0,0,19617,19619,1,0,0,0,19618,19610,1,0,0,0,19618,19612,1,0,0,0,
        19619,2335,1,0,0,0,19620,19622,3,2340,1170,0,19621,19623,3,2338,
        1169,0,19622,19621,1,0,0,0,19622,19623,1,0,0,0,19623,19633,1,0,0,
        0,19624,19626,5,2212,0,0,19625,19627,5,821,0,0,19626,19625,1,0,0,
        0,19626,19627,1,0,0,0,19627,19628,1,0,0,0,19628,19629,5,2024,0,0,
        19629,19634,5,2264,0,0,19630,19631,5,185,0,0,19631,19632,5,1590,
        0,0,19632,19634,3,2306,1153,0,19633,19624,1,0,0,0,19633,19630,1,
        0,0,0,19633,19634,1,0,0,0,19634,19652,1,0,0,0,19635,19636,5,733,
        0,0,19636,19641,7,250,0,0,19637,19638,5,2347,0,0,19638,19639,3,2052,
        1026,0,19639,19640,5,2348,0,0,19640,19642,1,0,0,0,19641,19637,1,
        0,0,0,19641,19642,1,0,0,0,19642,19643,1,0,0,0,19643,19644,5,2052,
        0,0,19644,19649,7,251,0,0,19645,19646,5,2347,0,0,19646,19647,3,2052,
        1026,0,19647,19648,5,2348,0,0,19648,19650,1,0,0,0,19649,19645,1,
        0,0,0,19649,19650,1,0,0,0,19650,19652,1,0,0,0,19651,19620,1,0,0,
        0,19651,19635,1,0,0,0,19652,2337,1,0,0,0,19653,19656,5,2347,0,0,
        19654,19657,3,2356,1178,0,19655,19657,5,2350,0,0,19656,19654,1,0,
        0,0,19656,19655,1,0,0,0,19657,19663,1,0,0,0,19658,19661,5,2353,0,
        0,19659,19662,3,2356,1178,0,19660,19662,3,2358,1179,0,19661,19659,
        1,0,0,0,19661,19660,1,0,0,0,19662,19664,1,0,0,0,19663,19658,1,0,
        0,0,19663,19664,1,0,0,0,19664,19666,1,0,0,0,19665,19667,7,210,0,
        0,19666,19665,1,0,0,0,19666,19667,1,0,0,0,19667,19668,1,0,0,0,19668,
        19669,5,2348,0,0,19669,2339,1,0,0,0,19670,19732,5,126,0,0,19671,
        19732,5,1330,0,0,19672,19732,5,950,0,0,19673,19732,5,123,0,0,19674,
        19732,5,120,0,0,19675,19732,5,951,0,0,19676,19732,5,1346,0,0,19677,
        19732,5,1345,0,0,19678,19732,5,1610,0,0,19679,19732,5,1611,0,0,19680,
        19732,5,1169,0,0,19681,19732,5,359,0,0,19682,19732,5,726,0,0,19683,
        19732,5,734,0,0,19684,19732,5,1165,0,0,19685,19732,5,1623,0,0,19686,
        19732,5,1164,0,0,19687,19732,5,360,0,0,19688,19690,5,434,0,0,19689,
        19691,5,1363,0,0,19690,19689,1,0,0,0,19690,19691,1,0,0,0,19691,19732,
        1,0,0,0,19692,19732,5,567,0,0,19693,19732,5,1432,0,0,19694,19732,
        5,954,0,0,19695,19697,5,841,0,0,19696,19698,5,1423,0,0,19697,19696,
        1,0,0,0,19697,19698,1,0,0,0,19698,19732,1,0,0,0,19699,19732,5,186,
        0,0,19700,19732,5,185,0,0,19701,19732,5,2166,0,0,19702,19732,5,2167,
        0,0,19703,19732,5,1683,0,0,19704,19732,5,1423,0,0,19705,19732,5,
        142,0,0,19706,19732,5,344,0,0,19707,19732,5,1523,0,0,19708,19732,
        5,2121,0,0,19709,19732,5,2260,0,0,19710,19732,5,931,0,0,19711,19732,
        5,346,0,0,19712,19732,5,638,0,0,19713,19732,5,904,0,0,19714,19732,
        5,1558,0,0,19715,19732,5,2027,0,0,19716,19732,5,2028,0,0,19717,19732,
        5,2030,0,0,19718,19732,5,2026,0,0,19719,19732,5,2020,0,0,19720,19732,
        5,2022,0,0,19721,19732,5,2021,0,0,19722,19732,5,2019,0,0,19723,19732,
        5,2262,0,0,19724,19732,5,440,0,0,19725,19732,5,116,0,0,19726,19732,
        5,136,0,0,19727,19732,5,205,0,0,19728,19732,5,956,0,0,19729,19732,
        5,912,0,0,19730,19732,5,2253,0,0,19731,19670,1,0,0,0,19731,19671,
        1,0,0,0,19731,19672,1,0,0,0,19731,19673,1,0,0,0,19731,19674,1,0,
        0,0,19731,19675,1,0,0,0,19731,19676,1,0,0,0,19731,19677,1,0,0,0,
        19731,19678,1,0,0,0,19731,19679,1,0,0,0,19731,19680,1,0,0,0,19731,
        19681,1,0,0,0,19731,19682,1,0,0,0,19731,19683,1,0,0,0,19731,19684,
        1,0,0,0,19731,19685,1,0,0,0,19731,19686,1,0,0,0,19731,19687,1,0,
        0,0,19731,19688,1,0,0,0,19731,19692,1,0,0,0,19731,19693,1,0,0,0,
        19731,19694,1,0,0,0,19731,19695,1,0,0,0,19731,19699,1,0,0,0,19731,
        19700,1,0,0,0,19731,19701,1,0,0,0,19731,19702,1,0,0,0,19731,19703,
        1,0,0,0,19731,19704,1,0,0,0,19731,19705,1,0,0,0,19731,19706,1,0,
        0,0,19731,19707,1,0,0,0,19731,19708,1,0,0,0,19731,19709,1,0,0,0,
        19731,19710,1,0,0,0,19731,19711,1,0,0,0,19731,19712,1,0,0,0,19731,
        19713,1,0,0,0,19731,19714,1,0,0,0,19731,19715,1,0,0,0,19731,19716,
        1,0,0,0,19731,19717,1,0,0,0,19731,19718,1,0,0,0,19731,19719,1,0,
        0,0,19731,19720,1,0,0,0,19731,19721,1,0,0,0,19731,19722,1,0,0,0,
        19731,19723,1,0,0,0,19731,19724,1,0,0,0,19731,19725,1,0,0,0,19731,
        19726,1,0,0,0,19731,19727,1,0,0,0,19731,19728,1,0,0,0,19731,19729,
        1,0,0,0,19731,19730,1,0,0,0,19732,2341,1,0,0,0,19733,19737,5,2359,
        0,0,19734,19735,5,2366,0,0,19735,19737,5,2341,0,0,19736,19733,1,
        0,0,0,19736,19734,1,0,0,0,19737,19746,1,0,0,0,19738,19740,5,691,
        0,0,19739,19738,1,0,0,0,19739,19740,1,0,0,0,19740,19744,1,0,0,0,
        19741,19745,5,2359,0,0,19742,19743,5,2366,0,0,19743,19745,5,2341,
        0,0,19744,19741,1,0,0,0,19744,19742,1,0,0,0,19745,19747,1,0,0,0,
        19746,19739,1,0,0,0,19746,19747,1,0,0,0,19747,19752,1,0,0,0,19748,
        19749,5,2340,0,0,19749,19751,3,2346,1173,0,19750,19748,1,0,0,0,19751,
        19754,1,0,0,0,19752,19750,1,0,0,0,19752,19753,1,0,0,0,19753,2343,
        1,0,0,0,19754,19752,1,0,0,0,19755,19756,6,1172,-1,0,19756,19762,
        3,2346,1173,0,19757,19758,5,2347,0,0,19758,19759,3,2344,1172,0,19759,
        19760,5,2348,0,0,19760,19762,1,0,0,0,19761,19755,1,0,0,0,19761,19757,
        1,0,0,0,19762,19772,1,0,0,0,19763,19766,10,2,0,0,19764,19765,5,2340,
        0,0,19765,19767,3,2346,1173,0,19766,19764,1,0,0,0,19767,19768,1,
        0,0,0,19768,19766,1,0,0,0,19768,19769,1,0,0,0,19769,19771,1,0,0,
        0,19770,19763,1,0,0,0,19771,19774,1,0,0,0,19772,19770,1,0,0,0,19772,
        19773,1,0,0,0,19773,2345,1,0,0,0,19774,19772,1,0,0,0,19775,19776,
        5,2372,0,0,19776,19778,3,2306,1153,0,19777,19775,1,0,0,0,19777,19778,
        1,0,0,0,19778,19779,1,0,0,0,19779,19782,3,2364,1182,0,19780,19781,
        5,2355,0,0,19781,19783,3,2294,1147,0,19782,19780,1,0,0,0,19782,19783,
        1,0,0,0,19783,19787,1,0,0,0,19784,19786,3,2324,1162,0,19785,19784,
        1,0,0,0,19786,19789,1,0,0,0,19787,19785,1,0,0,0,19787,19788,1,0,
        0,0,19788,2347,1,0,0,0,19789,19787,1,0,0,0,19790,19791,5,2372,0,
        0,19791,19793,3,2306,1153,0,19792,19790,1,0,0,0,19792,19793,1,0,
        0,0,19793,19794,1,0,0,0,19794,19799,3,2364,1182,0,19795,19796,5,
        2340,0,0,19796,19798,3,2364,1182,0,19797,19795,1,0,0,0,19798,19801,
        1,0,0,0,19799,19797,1,0,0,0,19799,19800,1,0,0,0,19800,2349,1,0,0,
        0,19801,19799,1,0,0,0,19802,19804,5,38,0,0,19803,19805,5,1384,0,
        0,19804,19803,1,0,0,0,19804,19805,1,0,0,0,19805,19835,1,0,0,0,19806,
        19835,5,42,0,0,19807,19835,5,357,0,0,19808,19835,5,381,0,0,19809,
        19835,5,505,0,0,19810,19811,5,565,0,0,19811,19835,5,63,0,0,19812,
        19835,5,675,0,0,19813,19814,5,695,0,0,19814,19835,5,1384,0,0,19815,
        19835,5,713,0,0,19816,19817,5,768,0,0,19817,19835,5,1575,0,0,19818,
        19819,5,892,0,0,19819,19835,5,2190,0,0,19820,19821,5,1193,0,0,19821,
        19822,5,231,0,0,19822,19835,5,1453,0,0,19823,19824,5,1409,0,0,19824,
        19835,5,1513,0,0,19825,19835,5,1429,0,0,19826,19835,5,1450,0,0,19827,
        19835,5,1569,0,0,19828,19829,5,2063,0,0,19829,19835,5,1639,0,0,19830,
        19835,5,2086,0,0,19831,19835,5,2114,0,0,19832,19835,5,2148,0,0,19833,
        19835,5,2216,0,0,19834,19802,1,0,0,0,19834,19806,1,0,0,0,19834,19807,
        1,0,0,0,19834,19808,1,0,0,0,19834,19809,1,0,0,0,19834,19810,1,0,
        0,0,19834,19812,1,0,0,0,19834,19813,1,0,0,0,19834,19815,1,0,0,0,
        19834,19816,1,0,0,0,19834,19818,1,0,0,0,19834,19820,1,0,0,0,19834,
        19823,1,0,0,0,19834,19825,1,0,0,0,19834,19826,1,0,0,0,19834,19827,
        1,0,0,0,19834,19828,1,0,0,0,19834,19830,1,0,0,0,19834,19831,1,0,
        0,0,19834,19832,1,0,0,0,19834,19833,1,0,0,0,19835,2351,1,0,0,0,19836,
        19837,5,38,0,0,19837,20163,5,1384,0,0,19838,20163,5,31,0,0,19839,
        19841,5,27,0,0,19840,19842,5,54,0,0,19841,19840,1,0,0,0,19841,19842,
        1,0,0,0,19842,19843,1,0,0,0,19843,19844,5,1639,0,0,19844,19845,5,
        2073,0,0,19845,20163,5,1590,0,0,19846,19847,7,56,0,0,19847,19848,
        5,54,0,0,19848,19849,5,1639,0,0,19849,20163,5,1388,0,0,19850,19851,
        5,27,0,0,19851,19852,5,1639,0,0,19852,19853,5,853,0,0,19853,20163,
        5,1172,0,0,19854,19856,5,305,0,0,19855,19857,5,54,0,0,19856,19855,
        1,0,0,0,19856,19857,1,0,0,0,19857,19858,1,0,0,0,19858,20163,5,210,
        0,0,19859,19860,7,252,0,0,19860,19861,5,54,0,0,19861,20163,5,210,
        0,0,19862,19863,7,253,0,0,19863,19864,5,54,0,0,19864,20163,5,281,
        0,0,19865,19866,5,506,0,0,19866,19867,5,1442,0,0,19867,20163,5,1339,
        0,0,19868,19869,5,42,0,0,19869,20163,5,333,0,0,19870,19872,7,254,
        0,0,19871,19873,5,1398,0,0,19872,19871,1,0,0,0,19872,19873,1,0,0,
        0,19873,19874,1,0,0,0,19874,19875,5,333,0,0,19875,20163,5,812,0,
        0,19876,19877,5,438,0,0,19877,19878,5,1398,0,0,19878,19879,5,333,
        0,0,19879,20163,5,812,0,0,19880,19881,5,357,0,0,19881,19882,5,265,
        0,0,19882,20163,5,1586,0,0,19883,19884,5,357,0,0,19884,19885,5,54,
        0,0,19885,20163,5,1386,0,0,19886,19887,5,46,0,0,19887,19888,5,54,
        0,0,19888,20163,5,397,0,0,19889,19891,5,305,0,0,19890,19892,5,54,
        0,0,19891,19890,1,0,0,0,19891,19892,1,0,0,0,19892,19893,1,0,0,0,
        19893,20163,5,398,0,0,19894,19895,7,252,0,0,19895,19896,5,54,0,0,
        19896,20163,5,398,0,0,19897,19898,7,253,0,0,19898,19899,5,54,0,0,
        19899,20163,5,401,0,0,19900,19901,7,253,0,0,19901,19902,5,54,0,0,
        19902,20163,5,452,0,0,19903,19908,5,565,0,0,19904,19905,5,63,0,0,
        19905,19909,5,27,0,0,19906,19907,5,54,0,0,19907,19909,5,1999,0,0,
        19908,19904,1,0,0,0,19908,19906,1,0,0,0,19909,20163,1,0,0,0,19910,
        19911,7,56,0,0,19911,19912,5,54,0,0,19912,20163,5,675,0,0,19913,
        19915,5,305,0,0,19914,19916,5,54,0,0,19915,19914,1,0,0,0,19915,19916,
        1,0,0,0,19916,19917,1,0,0,0,19917,20163,5,689,0,0,19918,19919,7,
        255,0,0,19919,19920,5,54,0,0,19920,20163,5,689,0,0,19921,19923,5,
        305,0,0,19922,19924,7,256,0,0,19923,19922,1,0,0,0,19923,19924,1,
        0,0,0,19924,19925,1,0,0,0,19925,20163,5,747,0,0,19926,19927,5,505,
        0,0,19927,19928,5,54,0,0,19928,20163,7,257,0,0,19929,19930,5,852,
        0,0,19930,20163,5,1545,0,0,19931,19932,5,27,0,0,19932,19933,5,770,
        0,0,19933,20163,5,853,0,0,19934,19936,5,305,0,0,19935,19937,5,54,
        0,0,19936,19935,1,0,0,0,19936,19937,1,0,0,0,19937,19938,1,0,0,0,
        19938,20163,5,801,0,0,19939,19940,7,255,0,0,19940,19941,5,54,0,0,
        19941,20163,5,801,0,0,19942,20163,5,837,0,0,19943,19945,5,305,0,
        0,19944,19946,5,54,0,0,19945,19944,1,0,0,0,19945,19946,1,0,0,0,19946,
        19947,1,0,0,0,19947,19948,5,865,0,0,19948,20163,5,2190,0,0,19949,
        19950,7,252,0,0,19950,19951,5,54,0,0,19951,19952,5,865,0,0,19952,
        20163,5,2190,0,0,19953,19955,5,602,0,0,19954,19953,1,0,0,0,19954,
        19955,1,0,0,0,19955,19956,1,0,0,0,19956,19957,5,1409,0,0,19957,20163,
        5,1513,0,0,19958,19959,5,1193,0,0,19959,19960,5,231,0,0,19960,20163,
        5,1453,0,0,19961,19963,5,305,0,0,19962,19964,5,54,0,0,19963,19962,
        1,0,0,0,19963,19964,1,0,0,0,19964,19965,1,0,0,0,19965,19966,5,901,
        0,0,19966,20163,5,917,0,0,19967,19968,7,258,0,0,19968,19969,5,54,
        0,0,19969,19970,5,901,0,0,19970,20163,5,917,0,0,19971,19973,5,305,
        0,0,19972,19974,5,54,0,0,19973,19972,1,0,0,0,19973,19974,1,0,0,0,
        19974,19975,1,0,0,0,19975,20163,5,315,0,0,19976,19977,7,259,0,0,
        19977,19978,5,54,0,0,19978,20163,5,315,0,0,19979,19981,5,305,0,0,
        19980,19982,5,54,0,0,19981,19980,1,0,0,0,19981,19982,1,0,0,0,19982,
        19983,1,0,0,0,19983,19984,5,879,0,0,19984,20163,5,572,0,0,19985,
        19986,7,260,0,0,19986,19987,5,54,0,0,19987,19988,5,879,0,0,19988,
        20163,5,572,0,0,19989,19991,5,305,0,0,19990,19992,5,54,0,0,19991,
        19990,1,0,0,0,19991,19992,1,0,0,0,19992,19993,1,0,0,0,19993,19994,
        5,315,0,0,19994,20163,5,398,0,0,19995,19996,7,261,0,0,19996,19997,
        5,54,0,0,19997,19998,5,315,0,0,19998,20163,5,398,0,0,19999,20001,
        5,305,0,0,20000,20002,5,54,0,0,20001,20000,1,0,0,0,20001,20002,1,
        0,0,0,20002,20003,1,0,0,0,20003,20004,5,315,0,0,20004,20005,5,152,
        0,0,20005,20163,5,1387,0,0,20006,20007,7,262,0,0,20007,20008,5,54,
        0,0,20008,20009,5,315,0,0,20009,20010,5,152,0,0,20010,20163,5,1387,
        0,0,20011,20013,5,305,0,0,20012,20014,5,54,0,0,20013,20012,1,0,0,
        0,20013,20014,1,0,0,0,20014,20015,1,0,0,0,20015,20163,5,1200,0,0,
        20016,20017,7,255,0,0,20017,20018,5,54,0,0,20018,20163,5,1200,0,
        0,20019,20020,7,56,0,0,20020,20021,5,54,0,0,20021,20163,5,1245,0,
        0,20022,20023,5,305,0,0,20023,20024,5,1336,0,0,20024,20163,5,333,
        0,0,20025,20026,5,1590,0,0,20026,20163,5,274,0,0,20027,20029,5,305,
        0,0,20028,20030,5,54,0,0,20029,20028,1,0,0,0,20029,20030,1,0,0,0,
        20030,20031,1,0,0,0,20031,20163,5,1386,0,0,20032,20033,7,255,0,0,
        20033,20034,5,54,0,0,20034,20163,5,1386,0,0,20035,20036,7,56,0,0,
        20036,20163,5,1388,0,0,20037,20038,5,305,0,0,20038,20163,5,1515,
        0,0,20039,20040,7,263,0,0,20040,20041,5,54,0,0,20041,20163,5,1515,
        0,0,20042,20043,7,56,0,0,20043,20044,5,1518,0,0,20044,20163,5,1567,
        0,0,20045,20047,5,305,0,0,20046,20048,5,54,0,0,20047,20046,1,0,0,
        0,20047,20048,1,0,0,0,20048,20049,1,0,0,0,20049,20163,5,1575,0,0,
        20050,20051,7,264,0,0,20051,20052,5,54,0,0,20052,20163,5,1575,0,
        0,20053,20054,7,265,0,0,20054,20163,5,1586,0,0,20055,20056,5,42,
        0,0,20056,20057,5,1492,0,0,20057,20163,5,296,0,0,20058,20060,5,305,
        0,0,20059,20061,5,54,0,0,20060,20059,1,0,0,0,20060,20061,1,0,0,0,
        20061,20062,1,0,0,0,20062,20063,5,1639,0,0,20063,20064,5,2064,0,
        0,20064,20163,5,1388,0,0,20065,20066,7,266,0,0,20066,20067,5,54,
        0,0,20067,20068,5,1639,0,0,20068,20069,5,2064,0,0,20069,20163,5,
        1388,0,0,20070,20071,5,2063,0,0,20071,20072,5,54,0,0,20072,20163,
        5,1639,0,0,20073,20075,5,305,0,0,20074,20076,5,54,0,0,20075,20074,
        1,0,0,0,20075,20076,1,0,0,0,20076,20077,1,0,0,0,20077,20163,5,1712,
        0,0,20078,20079,5,438,0,0,20079,20080,5,54,0,0,20080,20163,5,1712,
        0,0,20081,20082,7,253,0,0,20082,20083,5,1398,0,0,20083,20163,5,1712,
        0,0,20084,20086,5,305,0,0,20085,20087,5,54,0,0,20086,20085,1,0,0,
        0,20086,20087,1,0,0,0,20087,20088,1,0,0,0,20088,20163,5,1999,0,0,
        20089,20090,7,267,0,0,20090,20091,5,54,0,0,20091,20163,5,1999,0,
        0,20092,20093,7,268,0,0,20093,20163,5,1996,0,0,20094,20096,5,305,
        0,0,20095,20097,5,54,0,0,20096,20095,1,0,0,0,20096,20097,1,0,0,0,
        20097,20098,1,0,0,0,20098,20163,5,2067,0,0,20099,20100,7,252,0,0,
        20100,20101,5,54,0,0,20101,20163,5,2067,0,0,20102,20103,5,27,0,0,
        20103,20104,5,333,0,0,20104,20163,5,2067,0,0,20105,20107,5,305,0,
        0,20106,20108,5,54,0,0,20107,20106,1,0,0,0,20107,20108,1,0,0,0,20108,
        20109,1,0,0,0,20109,20163,5,2076,0,0,20110,20111,7,269,0,0,20111,
        20112,5,54,0,0,20112,20163,5,2076,0,0,20113,20114,7,56,0,0,20114,
        20163,5,2144,0,0,20115,20117,5,305,0,0,20116,20118,5,54,0,0,20117,
        20116,1,0,0,0,20117,20118,1,0,0,0,20118,20119,1,0,0,0,20119,20163,
        5,2190,0,0,20120,20121,7,270,0,0,20121,20122,5,54,0,0,20122,20163,
        5,2190,0,0,20123,20124,7,271,0,0,20124,20163,5,54,0,0,20125,20126,
        5,108,0,0,20126,20163,5,2144,0,0,20127,20128,5,182,0,0,20128,20163,
        5,1137,0,0,20129,20130,5,506,0,0,20130,20131,5,4,0,0,20131,20163,
        5,1339,0,0,20132,20134,5,576,0,0,20133,20135,5,54,0,0,20134,20133,
        1,0,0,0,20134,20135,1,0,0,0,20135,20136,1,0,0,0,20136,20163,5,2058,
        0,0,20137,20138,5,607,0,0,20138,20140,5,54,0,0,20139,20141,5,1172,
        0,0,20140,20139,1,0,0,0,20140,20141,1,0,0,0,20141,20142,1,0,0,0,
        20142,20163,5,1383,0,0,20143,20144,5,695,0,0,20144,20145,5,54,0,
        0,20145,20163,5,1384,0,0,20146,20147,5,768,0,0,20147,20148,5,344,
        0,0,20148,20163,5,2024,0,0,20149,20150,5,768,0,0,20150,20163,5,1748,
        0,0,20151,20152,5,1400,0,0,20152,20163,5,349,0,0,20153,20163,5,1503,
        0,0,20154,20155,5,1569,0,0,20155,20156,5,54,0,0,20156,20163,7,272,
        0,0,20157,20163,5,1717,0,0,20158,20163,5,1723,0,0,20159,20163,5,
        1725,0,0,20160,20163,5,1749,0,0,20161,20163,5,1784,0,0,20162,19836,
        1,0,0,0,20162,19838,1,0,0,0,20162,19839,1,0,0,0,20162,19846,1,0,
        0,0,20162,19850,1,0,0,0,20162,19854,1,0,0,0,20162,19859,1,0,0,0,
        20162,19862,1,0,0,0,20162,19865,1,0,0,0,20162,19868,1,0,0,0,20162,
        19870,1,0,0,0,20162,19876,1,0,0,0,20162,19880,1,0,0,0,20162,19883,
        1,0,0,0,20162,19886,1,0,0,0,20162,19889,1,0,0,0,20162,19894,1,0,
        0,0,20162,19897,1,0,0,0,20162,19900,1,0,0,0,20162,19903,1,0,0,0,
        20162,19910,1,0,0,0,20162,19913,1,0,0,0,20162,19918,1,0,0,0,20162,
        19921,1,0,0,0,20162,19926,1,0,0,0,20162,19929,1,0,0,0,20162,19931,
        1,0,0,0,20162,19934,1,0,0,0,20162,19939,1,0,0,0,20162,19942,1,0,
        0,0,20162,19943,1,0,0,0,20162,19949,1,0,0,0,20162,19954,1,0,0,0,
        20162,19958,1,0,0,0,20162,19961,1,0,0,0,20162,19967,1,0,0,0,20162,
        19971,1,0,0,0,20162,19976,1,0,0,0,20162,19979,1,0,0,0,20162,19985,
        1,0,0,0,20162,19989,1,0,0,0,20162,19995,1,0,0,0,20162,19999,1,0,
        0,0,20162,20006,1,0,0,0,20162,20011,1,0,0,0,20162,20016,1,0,0,0,
        20162,20019,1,0,0,0,20162,20022,1,0,0,0,20162,20025,1,0,0,0,20162,
        20027,1,0,0,0,20162,20032,1,0,0,0,20162,20035,1,0,0,0,20162,20037,
        1,0,0,0,20162,20039,1,0,0,0,20162,20042,1,0,0,0,20162,20045,1,0,
        0,0,20162,20050,1,0,0,0,20162,20053,1,0,0,0,20162,20055,1,0,0,0,
        20162,20058,1,0,0,0,20162,20065,1,0,0,0,20162,20070,1,0,0,0,20162,
        20073,1,0,0,0,20162,20078,1,0,0,0,20162,20081,1,0,0,0,20162,20084,
        1,0,0,0,20162,20089,1,0,0,0,20162,20092,1,0,0,0,20162,20094,1,0,
        0,0,20162,20099,1,0,0,0,20162,20102,1,0,0,0,20162,20105,1,0,0,0,
        20162,20110,1,0,0,0,20162,20113,1,0,0,0,20162,20115,1,0,0,0,20162,
        20120,1,0,0,0,20162,20123,1,0,0,0,20162,20125,1,0,0,0,20162,20127,
        1,0,0,0,20162,20129,1,0,0,0,20162,20132,1,0,0,0,20162,20137,1,0,
        0,0,20162,20143,1,0,0,0,20162,20146,1,0,0,0,20162,20149,1,0,0,0,
        20162,20151,1,0,0,0,20162,20153,1,0,0,0,20162,20154,1,0,0,0,20162,
        20157,1,0,0,0,20162,20158,1,0,0,0,20162,20159,1,0,0,0,20162,20160,
        1,0,0,0,20162,20161,1,0,0,0,20163,2353,1,0,0,0,20164,20167,5,2020,
        0,0,20165,20168,3,2360,1180,0,20166,20168,3,2342,1171,0,20167,20165,
        1,0,0,0,20167,20166,1,0,0,0,20168,20173,1,0,0,0,20169,20170,5,80,
        0,0,20170,20171,5,2024,0,0,20171,20172,5,2264,0,0,20172,20174,3,
        2360,1180,0,20173,20169,1,0,0,0,20173,20174,1,0,0,0,20174,20227,
        1,0,0,0,20175,20179,5,733,0,0,20176,20180,3,2360,1180,0,20177,20180,
        3,2342,1171,0,20178,20180,3,2346,1173,0,20179,20176,1,0,0,0,20179,
        20177,1,0,0,0,20179,20178,1,0,0,0,20180,20181,1,0,0,0,20181,20195,
        7,273,0,0,20182,20185,5,2347,0,0,20183,20186,5,2341,0,0,20184,20186,
        3,2342,1171,0,20185,20183,1,0,0,0,20185,20184,1,0,0,0,20186,20192,
        1,0,0,0,20187,20190,5,2353,0,0,20188,20191,5,2341,0,0,20189,20191,
        3,2342,1171,0,20190,20188,1,0,0,0,20190,20189,1,0,0,0,20191,20193,
        1,0,0,0,20192,20187,1,0,0,0,20192,20193,1,0,0,0,20193,20194,1,0,
        0,0,20194,20196,5,2348,0,0,20195,20182,1,0,0,0,20195,20196,1,0,0,
        0,20196,20212,1,0,0,0,20197,20210,5,2052,0,0,20198,20211,5,346,0,
        0,20199,20211,5,638,0,0,20200,20211,5,904,0,0,20201,20208,5,1558,
        0,0,20202,20205,5,2347,0,0,20203,20206,5,2341,0,0,20204,20206,3,
        2342,1171,0,20205,20203,1,0,0,0,20205,20204,1,0,0,0,20206,20207,
        1,0,0,0,20207,20209,5,2348,0,0,20208,20202,1,0,0,0,20208,20209,1,
        0,0,0,20209,20211,1,0,0,0,20210,20198,1,0,0,0,20210,20199,1,0,0,
        0,20210,20200,1,0,0,0,20210,20201,1,0,0,0,20211,20213,1,0,0,0,20212,
        20197,1,0,0,0,20212,20213,1,0,0,0,20213,20227,1,0,0,0,20214,20227,
        3,2356,1178,0,20215,20216,5,344,0,0,20216,20227,3,2360,1180,0,20217,
        20227,3,2360,1180,0,20218,20227,5,1162,0,0,20219,20227,5,2068,0,
        0,20220,20227,5,538,0,0,20221,20227,5,352,0,0,20222,20227,5,1588,
        0,0,20223,20227,5,906,0,0,20224,20227,5,878,0,0,20225,20227,5,368,
        0,0,20226,20164,1,0,0,0,20226,20175,1,0,0,0,20226,20214,1,0,0,0,
        20226,20215,1,0,0,0,20226,20217,1,0,0,0,20226,20218,1,0,0,0,20226,
        20219,1,0,0,0,20226,20220,1,0,0,0,20226,20221,1,0,0,0,20226,20222,
        1,0,0,0,20226,20223,1,0,0,0,20226,20224,1,0,0,0,20226,20225,1,0,
        0,0,20227,2355,1,0,0,0,20228,20230,5,2341,0,0,20229,20231,5,2340,
        0,0,20230,20229,1,0,0,0,20230,20231,1,0,0,0,20231,20234,1,0,0,0,
        20232,20234,5,2342,0,0,20233,20228,1,0,0,0,20233,20232,1,0,0,0,20234,
        2357,1,0,0,0,20235,20236,5,2352,0,0,20236,20237,3,2356,1178,0,20237,
        2359,1,0,0,0,20238,20239,7,274,0,0,20239,2361,1,0,0,0,20240,20241,
        5,2372,0,0,20241,20243,3,2306,1153,0,20242,20240,1,0,0,0,20242,20243,
        1,0,0,0,20243,20244,1,0,0,0,20244,20245,3,2364,1182,0,20245,2363,
        1,0,0,0,20246,20249,3,2370,1185,0,20247,20249,5,2344,0,0,20248,20246,
        1,0,0,0,20248,20247,1,0,0,0,20249,2365,1,0,0,0,20250,20251,5,2379,
        0,0,20251,2367,1,0,0,0,20252,20253,5,2347,0,0,20253,20254,5,2351,
        0,0,20254,20255,5,2348,0,0,20255,2369,1,0,0,0,20256,20368,3,2376,
        1188,0,20257,20368,3,2374,1187,0,20258,20368,3,2372,1186,0,20259,
        20368,5,2378,0,0,20260,20368,5,3,0,0,20261,20368,5,36,0,0,20262,
        20368,5,34,0,0,20263,20368,5,35,0,0,20264,20368,5,46,0,0,20265,20368,
        5,94,0,0,20266,20368,5,99,0,0,20267,20368,5,105,0,0,20268,20368,
        5,126,0,0,20269,20368,5,142,0,0,20270,20368,5,203,0,0,20271,20368,
        5,186,0,0,20272,20368,5,2326,0,0,20273,20368,5,2327,0,0,20274,20368,
        5,210,0,0,20275,20368,5,273,0,0,20276,20368,5,329,0,0,20277,20368,
        5,174,0,0,20278,20368,5,360,0,0,20279,20368,5,381,0,0,20280,20368,
        5,386,0,0,20281,20368,5,396,0,0,20282,20368,5,440,0,0,20283,20368,
        5,2328,0,0,20284,20368,5,449,0,0,20285,20368,5,487,0,0,20286,20368,
        5,488,0,0,20287,20368,5,449,0,0,20288,20368,5,482,0,0,20289,20368,
        5,498,0,0,20290,20368,5,499,0,0,20291,20368,5,500,0,0,20292,20368,
        5,508,0,0,20293,20368,5,510,0,0,20294,20368,5,2329,0,0,20295,20368,
        5,553,0,0,20296,20368,5,567,0,0,20297,20368,5,575,0,0,20298,20368,
        5,595,0,0,20299,20368,5,692,0,0,20300,20368,5,708,0,0,20301,20368,
        5,726,0,0,20302,20368,5,764,0,0,20303,20368,5,766,0,0,20304,20368,
        5,777,0,0,20305,20368,5,841,0,0,20306,20368,5,842,0,0,20307,20368,
        5,2330,0,0,20308,20368,5,936,0,0,20309,20368,5,848,0,0,20310,20368,
        5,910,0,0,20311,20368,5,911,0,0,20312,20368,5,1164,0,0,20313,20368,
        5,1212,0,0,20314,20368,5,1239,0,0,20315,20368,5,1247,0,0,20316,20368,
        5,1252,0,0,20317,20368,5,1256,0,0,20318,20368,5,1259,0,0,20319,20368,
        5,1321,0,0,20320,20368,5,1330,0,0,20321,20368,5,1337,0,0,20322,20368,
        5,1346,0,0,20323,20368,5,1345,0,0,20324,20368,5,1359,0,0,20325,20368,
        5,1398,0,0,20326,20368,5,1417,0,0,20327,20368,5,1423,0,0,20328,20368,
        5,1435,0,0,20329,20368,5,1452,0,0,20330,20368,5,1481,0,0,20331,20368,
        5,1499,0,0,20332,20368,5,1502,0,0,20333,20368,5,1555,0,0,20334,20368,
        5,1570,0,0,20335,20368,5,1579,0,0,20336,20368,5,1590,0,0,20337,20368,
        5,1577,0,0,20338,20368,5,1595,0,0,20339,20368,5,1610,0,0,20340,20368,
        5,1611,0,0,20341,20368,5,1623,0,0,20342,20368,5,2333,0,0,20343,20368,
        5,1636,0,0,20344,20368,5,1637,0,0,20345,20368,5,1701,0,0,20346,20368,
        5,1993,0,0,20347,20368,5,2334,0,0,20348,20368,5,2019,0,0,20349,20368,
        5,2021,0,0,20350,20368,5,2022,0,0,20351,20368,5,2025,0,0,20352,20368,
        5,2067,0,0,20353,20368,5,2167,0,0,20354,20368,5,2166,0,0,20355,20368,
        5,2168,0,0,20356,20368,5,2199,0,0,20357,20368,5,2206,0,0,20358,20368,
        5,2335,0,0,20359,20368,5,2222,0,0,20360,20368,5,2262,0,0,20361,20368,
        5,2313,0,0,20362,20368,5,2321,0,0,20363,20368,5,2165,0,0,20364,20368,
        5,2300,0,0,20365,20368,5,487,0,0,20366,20368,5,488,0,0,20367,20256,
        1,0,0,0,20367,20257,1,0,0,0,20367,20258,1,0,0,0,20367,20259,1,0,
        0,0,20367,20260,1,0,0,0,20367,20261,1,0,0,0,20367,20262,1,0,0,0,
        20367,20263,1,0,0,0,20367,20264,1,0,0,0,20367,20265,1,0,0,0,20367,
        20266,1,0,0,0,20367,20267,1,0,0,0,20367,20268,1,0,0,0,20367,20269,
        1,0,0,0,20367,20270,1,0,0,0,20367,20271,1,0,0,0,20367,20272,1,0,
        0,0,20367,20273,1,0,0,0,20367,20274,1,0,0,0,20367,20275,1,0,0,0,
        20367,20276,1,0,0,0,20367,20277,1,0,0,0,20367,20278,1,0,0,0,20367,
        20279,1,0,0,0,20367,20280,1,0,0,0,20367,20281,1,0,0,0,20367,20282,
        1,0,0,0,20367,20283,1,0,0,0,20367,20284,1,0,0,0,20367,20285,1,0,
        0,0,20367,20286,1,0,0,0,20367,20287,1,0,0,0,20367,20288,1,0,0,0,
        20367,20289,1,0,0,0,20367,20290,1,0,0,0,20367,20291,1,0,0,0,20367,
        20292,1,0,0,0,20367,20293,1,0,0,0,20367,20294,1,0,0,0,20367,20295,
        1,0,0,0,20367,20296,1,0,0,0,20367,20297,1,0,0,0,20367,20298,1,0,
        0,0,20367,20299,1,0,0,0,20367,20300,1,0,0,0,20367,20301,1,0,0,0,
        20367,20302,1,0,0,0,20367,20303,1,0,0,0,20367,20304,1,0,0,0,20367,
        20305,1,0,0,0,20367,20306,1,0,0,0,20367,20307,1,0,0,0,20367,20308,
        1,0,0,0,20367,20309,1,0,0,0,20367,20310,1,0,0,0,20367,20311,1,0,
        0,0,20367,20312,1,0,0,0,20367,20313,1,0,0,0,20367,20314,1,0,0,0,
        20367,20315,1,0,0,0,20367,20316,1,0,0,0,20367,20317,1,0,0,0,20367,
        20318,1,0,0,0,20367,20319,1,0,0,0,20367,20320,1,0,0,0,20367,20321,
        1,0,0,0,20367,20322,1,0,0,0,20367,20323,1,0,0,0,20367,20324,1,0,
        0,0,20367,20325,1,0,0,0,20367,20326,1,0,0,0,20367,20327,1,0,0,0,
        20367,20328,1,0,0,0,20367,20329,1,0,0,0,20367,20330,1,0,0,0,20367,
        20331,1,0,0,0,20367,20332,1,0,0,0,20367,20333,1,0,0,0,20367,20334,
        1,0,0,0,20367,20335,1,0,0,0,20367,20336,1,0,0,0,20367,20337,1,0,
        0,0,20367,20338,1,0,0,0,20367,20339,1,0,0,0,20367,20340,1,0,0,0,
        20367,20341,1,0,0,0,20367,20342,1,0,0,0,20367,20343,1,0,0,0,20367,
        20344,1,0,0,0,20367,20345,1,0,0,0,20367,20346,1,0,0,0,20367,20347,
        1,0,0,0,20367,20348,1,0,0,0,20367,20349,1,0,0,0,20367,20350,1,0,
        0,0,20367,20351,1,0,0,0,20367,20352,1,0,0,0,20367,20353,1,0,0,0,
        20367,20354,1,0,0,0,20367,20355,1,0,0,0,20367,20356,1,0,0,0,20367,
        20357,1,0,0,0,20367,20358,1,0,0,0,20367,20359,1,0,0,0,20367,20360,
        1,0,0,0,20367,20361,1,0,0,0,20367,20362,1,0,0,0,20367,20363,1,0,
        0,0,20367,20364,1,0,0,0,20367,20365,1,0,0,0,20367,20366,1,0,0,0,
        20368,2371,1,0,0,0,20369,20370,7,275,0,0,20370,2373,1,0,0,0,20371,
        20372,7,276,0,0,20372,2375,1,0,0,0,20373,20374,7,277,0,0,20374,2377,
        1,0,0,0,20375,20376,7,278,0,0,20376,2379,1,0,0,0,20377,20378,7,279,
        0,0,20378,2381,1,0,0,0,2840,2383,2387,2391,2395,2399,2403,2406,2549,
        2556,2558,2561,2564,2586,2588,2595,2599,2604,2606,2611,2614,2618,
        2626,2631,2635,2640,2645,2649,2655,2660,2665,2669,2672,2678,2686,
        2693,2697,2702,2705,2721,2726,2730,2738,2744,2752,2755,2757,2760,
        2764,2767,2771,2779,2785,2793,2796,2799,2811,2813,2819,2824,2826,
        2832,2835,2847,2857,2860,2865,2868,2885,2892,2897,2901,2916,2919,
        2934,2944,2958,2961,2974,2982,2988,2992,2999,3003,3027,3039,3057,
        3070,3076,3085,3095,3099,3112,3115,3124,3132,3136,3146,3160,3170,
        3178,3181,3185,3188,3191,3194,3204,3223,3233,3241,3246,3252,3273,
        3282,3285,3289,3291,3300,3304,3320,3334,3336,3339,3343,3350,3357,
        3366,3371,3376,3378,3386,3394,3398,3404,3408,3413,3420,3423,3433,
        3438,3445,3454,3456,3461,3464,3468,3473,3485,3494,3497,3503,3509,
        3519,3535,3550,3563,3569,3581,3590,3595,3611,3613,3629,3631,3652,
        3654,3674,3676,3691,3700,3702,3713,3720,3733,3738,3747,3750,3755,
        3760,3765,3768,3774,3778,3784,3789,3794,3797,3804,3811,3820,3822,
        3824,3828,3838,3848,3853,3857,3859,3872,3877,3886,3888,3904,3916,
        3920,3923,3926,3933,3937,3940,3951,3956,3961,3971,3976,3986,3988,
        3993,3996,4000,4005,4017,4022,4026,4028,4033,4036,4041,4048,4058,
        4063,4066,4069,4073,4076,4081,4090,4106,4108,4118,4136,4143,4148,
        4154,4162,4164,4180,4185,4190,4192,4197,4204,4207,4210,4213,4223,
        4235,4239,4242,4251,4259,4267,4270,4276,4280,4285,4290,4294,4332,
        4360,4367,4372,4379,4389,4394,4403,4407,4418,4421,4425,4428,4433,
        4438,4442,4452,4462,4468,4479,4484,4488,4496,4504,4509,4512,4514,
        4517,4526,4531,4536,4539,4542,4545,4549,4552,4560,4565,4570,4577,
        4587,4603,4610,4620,4630,4637,4640,4645,4655,4660,4667,4670,4675,
        4678,4681,4698,4703,4712,4715,4720,4723,4730,4733,4740,4745,4749,
        4754,4759,4773,4778,4785,4788,4792,4795,4798,4801,4811,4817,4827,
        4832,4839,4845,4849,4852,4855,4872,4877,4885,4899,4906,4921,4941,
        4948,4950,4954,4962,4973,4984,4986,4993,4995,5014,5023,5026,5034,
        5039,5043,5046,5049,5052,5055,5058,5061,5064,5068,5071,5074,5079,
        5083,5086,5091,5093,5105,5109,5113,5119,5123,5126,5129,5139,5148,
        5156,5163,5168,5176,5179,5183,5193,5202,5210,5214,5217,5222,5226,
        5229,5232,5241,5249,5254,5280,5292,5301,5304,5313,5323,5328,5339,
        5342,5344,5350,5355,5360,5363,5369,5374,5377,5384,5390,5395,5401,
        5408,5411,5419,5425,5431,5435,5438,5441,5454,5460,5467,5478,5486,
        5490,5493,5498,5508,5513,5518,5523,5528,5533,5538,5543,5548,5553,
        5556,5565,5570,5580,5585,5592,5596,5605,5612,5616,5623,5626,5629,
        5637,5641,5644,5652,5658,5660,5668,5677,5682,5689,5694,5697,5701,
        5703,5714,5725,5739,5744,5754,5760,5763,5768,5777,5780,5785,5789,
        5813,5815,5819,5822,5827,5830,5835,5844,5855,5858,5861,5864,5868,
        5876,5881,5893,5896,5901,5905,5908,5917,5923,5929,5932,5936,5951,
        5954,5957,5963,5969,5974,5980,5986,5994,5998,6012,6019,6026,6032,
        6035,6039,6044,6049,6055,6060,6065,6069,6074,6080,6084,6089,6093,
        6097,6110,6115,6118,6122,6127,6129,6135,6137,6141,6144,6151,6162,
        6172,6176,6181,6185,6189,6192,6203,6208,6220,6230,6242,6248,6250,
        6254,6263,6270,6280,6283,6290,6298,6309,6316,6320,6322,6326,6336,
        6347,6352,6356,6360,6363,6366,6376,6381,6389,6396,6400,6402,6407,
        6417,6428,6433,6437,6441,6444,6447,6454,6463,6471,6473,6496,6509,
        6523,6525,6536,6544,6550,6553,6558,6562,6565,6568,6573,6581,6593,
        6600,6607,6626,6637,6640,6646,6648,6655,6658,6660,6668,6683,6691,
        6705,6716,6718,6734,6736,6743,6748,6755,6758,6763,6773,6782,6795,
        6805,6810,6813,6819,6837,6840,6843,6851,6864,6866,6870,6878,6880,
        6882,6884,6892,6903,6914,6916,6925,6936,6942,6949,6959,6963,6972,
        6975,6981,6984,6989,6995,7003,7009,7015,7027,7035,7038,7049,7053,
        7064,7068,7079,7083,7089,7092,7095,7098,7101,7105,7108,7112,7118,
        7121,7124,7127,7130,7134,7137,7145,7150,7153,7157,7165,7169,7173,
        7182,7193,7200,7202,7206,7215,7219,7223,7230,7236,7240,7247,7256,
        7268,7282,7286,7288,7291,7298,7312,7321,7324,7327,7330,7338,7342,
        7351,7355,7370,7378,7390,7407,7410,7415,7422,7426,7429,7443,7448,
        7462,7467,7469,7478,7486,7489,7492,7495,7498,7500,7504,7508,7515,
        7520,7525,7530,7534,7537,7542,7550,7555,7558,7564,7569,7574,7581,
        7584,7597,7608,7617,7626,7635,7644,7647,7653,7658,7660,7667,7709,
        7712,7716,7719,7730,7739,7742,7744,7754,7759,7763,7767,7770,7773,
        7787,7789,7795,7797,7801,7807,7813,7817,7820,7828,7838,7842,7861,
        7866,7873,7880,7954,7961,7970,7979,7987,7994,8001,8006,8013,8020,
        8025,8032,8039,8044,8051,8058,8063,8070,8077,8082,8085,8088,8095,
        8099,8108,8119,8128,8132,8139,8141,8148,8156,8161,8165,8170,8177,
        8179,8183,8186,8189,8198,8204,8206,8210,8214,8219,8224,8228,8234,
        8239,8244,8247,8256,8259,8262,8268,8275,8280,8284,8290,8292,8298,
        8300,8304,8313,8319,8328,8340,8348,8357,8360,8367,8371,8379,8386,
        8396,8401,8403,8408,8415,8431,8438,8448,8457,8466,8475,8480,8485,
        8488,8496,8507,8511,8514,8522,8528,8530,8535,8538,8545,8549,8554,
        8557,8570,8574,8579,8582,8592,8596,8600,8605,8621,8626,8638,8642,
        8648,8663,8666,8668,8670,8674,8677,8697,8702,8707,8718,8721,8733,
        8742,8753,8762,8767,8791,8796,8802,8804,8812,8815,8818,8821,8827,
        8833,8839,8843,8845,8848,8853,8857,8862,8865,8870,8873,8878,8882,
        8888,8892,8896,8904,8917,8921,8927,8930,8934,8939,8943,8949,8954,
        8957,8965,8968,8977,8981,8983,9002,9008,9013,9018,9020,9024,9033,
        9046,9057,9060,9063,9072,9074,9079,9091,9096,9100,9108,9115,9120,
        9125,9136,9139,9151,9166,9171,9177,9181,9187,9191,9200,9209,9214,
        9218,9222,9228,9235,9241,9250,9255,9262,9265,9282,9284,9299,9301,
        9314,9317,9320,9323,9331,9334,9337,9340,9352,9363,9366,9371,9375,
        9383,9396,9400,9404,9408,9411,9414,9417,9420,9430,9433,9442,9446,
        9454,9467,9470,9472,9476,9480,9486,9491,9495,9498,9501,9510,9515,
        9519,9523,9526,9533,9536,9538,9543,9551,9553,9567,9575,9584,9587,
        9592,9595,9604,9624,9630,9635,9637,9647,9656,9668,9671,9674,9684,
        9693,9701,9706,9714,9719,9722,9743,9745,9747,9750,9754,9764,9768,
        9773,9778,9782,9784,9787,9791,9801,9811,9814,9817,9821,9825,9838,
        9847,9858,9860,9871,9873,9878,9883,9890,9908,9914,9919,9929,9935,
        9943,9949,9953,9956,9968,9975,9985,10000,10005,10018,10023,10031,
        10036,10041,10045,10050,10058,10061,10064,10067,10070,10072,10079,
        10081,10085,10091,10094,10098,10103,10117,10123,10127,10138,10144,
        10149,10154,10159,10164,10166,10168,10176,10181,10189,10196,10207,
        10213,10217,10229,10236,10238,10240,10244,10247,10250,10254,10261,
        10263,10266,10274,10276,10282,10288,10293,10295,10303,10314,10317,
        10321,10325,10328,10333,10337,10341,10350,10356,10362,10368,10371,
        10379,10383,10389,10395,10401,10405,10407,10412,10415,10419,10423,
        10431,10435,10438,10441,10447,10450,10453,10456,10477,10484,10488,
        10491,10498,10503,10510,10516,10518,10524,10528,10535,10540,10546,
        10550,10558,10563,10569,10572,10575,10578,10586,10592,10594,10605,
        10609,10613,10620,10624,10629,10632,10645,10650,10654,10659,10665,
        10671,10674,10679,10682,10691,10696,10704,10706,10719,10724,10732,
        10734,10745,10748,10751,10754,10757,10760,10763,10766,10769,10772,
        10777,10781,10784,10787,10790,10794,10805,10808,10818,10822,10826,
        10829,10834,10837,10842,10850,10857,10869,10881,10886,10894,10908,
        10913,10924,10927,10929,10939,10949,10960,10976,10981,10983,10988,
        10995,11002,11016,11023,11030,11044,11050,11055,11058,11063,11066,
        11070,11085,11090,11094,11105,11110,11123,11139,11144,11146,11151,
        11159,11173,11181,11194,11200,11204,11218,11223,11227,11241,11244,
        11248,11251,11260,11268,11276,11279,11284,11286,11290,11293,11302,
        11310,11318,11321,11326,11328,11338,11346,11354,11357,11362,11375,
        11380,11389,11400,11414,11419,11422,11428,11432,11436,11440,11444,
        11447,11459,11464,11478,11488,11491,11500,11510,11514,11519,11522,
        11526,11530,11532,11537,11539,11547,11557,11562,11564,11573,11581,
        11588,11593,11597,11602,11607,11610,11613,11616,11618,11622,11625,
        11629,11637,11639,11641,11644,11649,11653,11657,11662,11665,11669,
        11672,11675,11679,11682,11686,11689,11696,11698,11702,11714,11716,
        11724,11726,11730,11734,11738,11742,11760,11762,11784,11793,11795,
        11807,11810,11814,11816,11819,11823,11826,11829,11832,11837,11842,
        11847,11855,11857,11867,11872,11884,11889,11901,11910,11916,11920,
        11925,11928,11936,11940,11947,11954,11957,11965,11968,11971,11976,
        11984,11986,11989,11996,12010,12012,12026,12031,12036,12044,12049,
        12058,12065,12069,12078,12086,12090,12093,12101,12107,12111,12116,
        12121,12129,12133,12147,12149,12152,12158,12163,12166,12169,12175,
        12186,12193,12196,12203,12207,12209,12212,12219,12225,12229,12236,
        12240,12255,12261,12269,12278,12283,12288,12294,12301,12308,12311,
        12313,12317,12323,12327,12333,12339,12343,12346,12373,12382,12391,
        12401,12409,12414,12423,12433,12443,12454,12461,12468,12471,12474,
        12477,12481,12483,12486,12489,12492,12495,12499,12501,12509,12511,
        12522,12524,12527,12535,12545,12566,12568,12582,12586,12589,12595,
        12602,12625,12628,12632,12637,12642,12645,12648,12653,12664,12670,
        12674,12680,12687,12689,12691,12695,12698,12701,12711,12719,12721,
        12723,12731,12740,12742,12746,12756,12765,12767,12770,12775,12789,
        12798,12800,12804,12812,12814,12825,12835,12841,12846,12850,12855,
        12860,12865,12869,12876,12883,12888,12893,12897,12908,12914,12919,
        12923,12928,12931,12934,12938,12941,12944,12956,12965,12973,12981,
        12986,12992,12996,13003,13008,13013,13018,13022,13031,13034,13038,
        13044,13052,13061,13064,13079,13096,13102,13106,13113,13120,13123,
        13125,13131,13133,13136,13145,13148,13152,13158,13170,13180,13184,
        13187,13190,13195,13199,13203,13206,13213,13216,13223,13229,13257,
        13267,13277,13279,13287,13318,13323,13337,13361,13364,13376,13379,
        13385,13407,13420,13431,13435,13437,13445,13454,13458,13466,13474,
        13480,13487,13491,13495,13497,13500,13510,13516,13521,13527,13529,
        13540,13543,13546,13556,13565,13568,13571,13574,13585,13588,13594,
        13597,13601,13604,13617,13619,13622,13624,13629,13633,13656,13672,
        13677,13681,13685,13689,13692,13697,13699,13713,13718,13725,13736,
        13742,13744,13746,13754,13763,13771,13773,13775,13777,13780,13797,
        13808,13815,13819,13822,13825,13827,13832,13836,13838,13854,13858,
        13861,13866,13869,13872,13883,13894,13906,13914,13917,13921,13925,
        13930,13934,13937,13940,13943,13947,13949,13959,13963,13968,13973,
        13980,13990,13999,14006,14013,14017,14019,14025,14033,14040,14047,
        14051,14053,14073,14075,14078,14084,14090,14098,14100,14102,14107,
        14112,14117,14121,14125,14129,14141,14147,14154,14159,14165,14170,
        14174,14180,14185,14194,14203,14206,14209,14212,14216,14226,14233,
        14240,14242,14252,14255,14258,14261,14265,14267,14271,14277,14279,
        14282,14285,14290,14295,14299,14303,14309,14335,14337,14349,14354,
        14359,14361,14373,14378,14383,14385,14390,14397,14401,14410,14421,
        14429,14433,14437,14442,14447,14451,14459,14466,14472,14477,14481,
        14488,14490,14493,14505,14509,14514,14518,14525,14532,14538,14541,
        14550,14561,14565,14567,14580,14584,14586,14588,14615,14618,14623,
        14625,14647,14650,14652,14654,14661,14663,14671,14675,14680,14683,
        14686,14689,14696,14701,14709,14717,14722,14725,14727,14743,14745,
        14758,14760,14762,14774,14783,14787,14789,14792,14795,14800,14804,
        14808,14813,14816,14826,14828,14833,14838,14844,14848,14855,14873,
        14880,14883,14886,14889,14892,14900,14902,14911,14913,14918,14927,
        14929,14936,14938,14942,14950,14959,14962,14965,14977,14979,14983,
        14987,14990,14995,15000,15007,15013,15017,15023,15038,15042,15049,
        15063,15068,15072,15083,15085,15101,15108,15111,15115,15118,15123,
        15129,15134,15140,15147,15166,15171,15178,15180,15187,15192,15198,
        15202,15210,15212,15221,15231,15242,15244,15247,15251,15254,15269,
        15278,15282,15285,15289,15292,15294,15298,15305,15311,15315,15318,
        15326,15339,15343,15347,15350,15353,15366,15370,15382,15387,15391,
        15395,15401,15404,15407,15434,15440,15449,15453,15464,15471,15475,
        15478,15484,15493,15502,15505,15509,15516,15519,15528,15533,15541,
        15543,15567,15572,15576,15583,15587,15591,15595,15607,15611,15625,
        15631,15638,15643,15654,15657,15663,15665,15673,15685,15690,15705,
        15709,15712,15716,15721,15725,15730,15746,15751,15760,15769,15771,
        15779,15781,15785,15793,15803,15806,15813,15822,15825,15834,15841,
        15845,15848,15860,15866,15875,15878,15888,15899,15905,15907,15909,
        15913,15920,15923,15930,15941,15947,15951,15961,15964,15970,15973,
        15978,15984,15989,15991,15995,15998,16002,16006,16011,16025,16030,
        16037,16039,16047,16051,16059,16062,16071,16073,16079,16081,16089,
        16095,16097,16104,16107,16109,16113,16117,16123,16127,16130,16138,
        16141,16145,16149,16154,16157,16161,16165,16169,16195,16198,16201,
        16210,16223,16230,16243,16258,16266,16270,16274,16280,16284,16287,
        16290,16294,16296,16300,16303,16306,16309,16317,16320,16331,16333,
        16340,16347,16352,16358,16362,16367,16374,16380,16387,16390,16393,
        16397,16402,16406,16408,16414,16424,16431,16435,16445,16460,16462,
        16466,16474,16487,16490,16495,16505,16513,16516,16522,16527,16530,
        16535,16540,16553,16560,16570,16575,16577,16582,16586,16592,16596,
        16609,16613,16623,16626,16628,16633,16642,16655,16663,16667,16676,
        16680,16685,16696,16698,16714,16719,16725,16731,16749,16756,16759,
        16762,16770,16773,16781,16783,16787,16790,16795,16797,16801,16813,
        16822,16830,16835,16839,16849,16851,16857,16862,16865,16875,16881,
        16884,16887,16895,16905,16915,16919,16923,16926,16929,16934,16939,
        16942,16945,16951,16954,16960,16963,16966,16971,16974,16982,16988,
        16993,17002,17008,17018,17022,17024,17027,17039,17043,17046,17061,
        17065,17072,17075,17084,17091,17096,17100,17108,17114,17122,17125,
        17134,17137,17140,17149,17155,17161,17164,17169,17175,17179,17190,
        17192,17201,17203,17207,17213,17217,17230,17237,17242,17258,17260,
        17264,17268,17272,17285,17289,17296,17304,17307,17312,17314,17320,
        17323,17329,17334,17346,17351,17361,17363,17365,17375,17379,17381,
        17393,17401,17414,17417,17422,17440,17442,17450,17458,17465,17472,
        17479,17483,17488,17492,17500,17504,17511,17516,17525,17534,17537,
        17559,17569,17573,17591,17593,17603,17608,17611,17618,17621,17625,
        17628,17635,17638,17644,17647,17651,17654,17661,17666,17673,17681,
        17688,17701,17706,17715,17724,17728,17732,17758,17761,17764,17774,
        17782,17788,17790,17794,17800,17809,17813,17816,17819,17828,17831,
        17834,17837,17840,17852,17860,17867,17870,17874,17876,17879,17884,
        17893,17899,17902,17905,17914,17917,17920,17923,17929,17933,17945,
        17955,17959,17962,17968,17972,17978,17982,17985,17988,17990,17997,
        18001,18004,18007,18010,18015,18018,18022,18031,18035,18042,18046,
        18051,18056,18059,18068,18072,18083,18086,18090,18095,18099,18108,
        18111,18115,18124,18127,18131,18136,18145,18148,18152,18160,18165,
        18170,18173,18177,18179,18188,18195,18198,18205,18207,18210,18213,
        18217,18220,18225,18232,18238,18246,18250,18253,18256,18262,18265,
        18269,18273,18278,18281,18284,18293,18305,18312,18315,18321,18324,
        18327,18336,18339,18344,18351,18353,18366,18372,18377,18382,18391,
        18394,18396,18400,18407,18414,18422,18437,18443,18447,18452,18457,
        18463,18466,18470,18480,18490,18496,18498,18508,18510,18517,18521,
        18530,18535,18540,18543,18552,18555,18564,18578,18585,18593,18596,
        18609,18615,18617,18630,18639,18645,18655,18663,18669,18672,18675,
        18689,18691,18699,18706,18716,18724,18730,18733,18738,18743,18747,
        18755,18762,18771,18778,18787,18791,18798,18805,18812,18819,18827,
        18831,18838,18847,18850,18853,18856,18860,18865,18870,18881,18885,
        18887,18898,18900,18911,18922,18931,18934,18938,18941,18952,18962,
        18972,18980,18986,18994,19001,19005,19010,19014,19019,19023,19029,
        19032,19039,19049,19057,19061,19071,19074,19076,19086,19088,19094,
        19100,19102,19116,19118,19129,19144,19147,19151,19153,19162,19169,
        19174,19178,19182,19187,19191,19194,19198,19206,19217,19224,19229,
        19234,19238,19243,19262,19267,19274,19285,19292,19299,19303,19310,
        19315,19324,19332,19340,19346,19351,19356,19360,19365,19368,19373,
        19377,19381,19386,19393,19398,19409,19415,19420,19424,19426,19433,
        19437,19445,19448,19453,19460,19478,19495,19502,19515,19519,19527,
        19530,19534,19539,19544,19548,19551,19555,19562,19567,19569,19571,
        19581,19586,19590,19593,19597,19606,19612,19616,19618,19622,19626,
        19633,19641,19649,19651,19656,19661,19663,19666,19690,19697,19731,
        19736,19739,19744,19746,19752,19761,19768,19772,19777,19782,19787,
        19792,19799,19804,19834,19841,19856,19872,19891,19908,19915,19923,
        19936,19945,19954,19963,19973,19981,19991,20001,20013,20029,20047,
        20060,20075,20086,20096,20107,20117,20134,20140,20162,20167,20173,
        20179,20185,20190,20192,20195,20205,20208,20210,20212,20226,20230,
        20233,20242,20248,20367
    ]

class PlSqlParser ( PlSqlParserBase ):

    grammarFileName = "PlSqlParser.g4"

    atn = ATNDeserializer().deserialize(serializedATN())

    decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ]

    sharedContextCache = PredictionContextCache()

    literalNames = [ "<INVALID>", "'ABORT'", "'ABS'", "'ABSENT'", "'ACCESS'", 
                     "'ACCESSED'", "'ACCESSIBLE'", "'ACCOUNT'", "'ACL'", 
                     "'ACOS'", "'ACROSS'", "'ACTION'", "'ACTIONS'", "'ACTIVATE'", 
                     "'ACTIVE'", "'ACTIVE_COMPONENT'", "'ACTIVE_DATA'", 
                     "'ACTIVE_FUNCTION'", "'ACTIVE_TAG'", "'ACTIVITY'", 
                     "'ADAPTIVE_PLAN'", "'ADD'", "'ADD_COLUMN'", "'ADD_GROUP'", 
                     "'ADD_MONTHS'", "'ADJ_DATE'", "'ADMIN'", "'ADMINISTER'", 
                     "'ADMINISTRATOR'", "'ADVANCED'", "'ADVISE'", "'ADVISOR'", 
                     "'AFD_DISKSTRING'", "'AFTER'", "'AGENT'", "'AGGREGATE'", 
                     "'A'", "'ALIAS'", "'ALL'", "'ALLOCATE'", "'ALLOW'", 
                     "'ALL_ROWS'", "'ALTER'", "'ALTERNATE'", "'ALWAYS'", 
                     "'ANALYTIC'", "'ANALYZE'", "'ANCESTOR'", "'ANCILLARY'", 
                     "'AND'", "'AND_EQUAL'", "'ANOMALY'", "'ANSI_REARCH'", 
                     "'ANTIJOIN'", "'ANY'", "'ANYSCHEMA'", "'APPEND'", "'APPENDCHILDXML'", 
                     "'APPEND_VALUES'", "'APPLICATION'", "'APPLY'", "'APPROX_COUNT_DISTINCT'", 
                     "'ARCHIVAL'", "'ARCHIVE'", "'ARCHIVED'", "'ARCHIVELOG'", 
                     "'ARRAY'", "'AS'", "'ASC'", "'ASCII'", "'ASCIISTR'", 
                     "'ASIN'", "'ASIS'", "'ASSEMBLY'", "'ASSIGN'", "'ASSOCIATE'", 
                     "'ASYNC'", "'ASYNCHRONOUS'", "'ATAN2'", "'ATAN'", "'AT'", 
                     "'ATTRIBUTE'", "'ATTRIBUTES'", "'AUDIT'", "'AUTHENTICATED'", 
                     "'AUTHENTICATION'", "'AUTHID'", "'AUTHORIZATION'", 
                     "'AUTOALLOCATE'", "'AUTO'", "'AUTOBACKUP'", "'AUTOEXTEND'", 
                     "'AUTO_LOGIN'", "'AUTOMATIC'", "'AUTONOMOUS_TRANSACTION'", 
                     "'AUTO_REOPTIMIZE'", "'AVAILABILITY'", "'AVRO'", "'BACKGROUND'", 
                     "'BACKINGFILE'", "'BACKUP'", "'BACKUPS'", "'BACKUPSET'", 
                     "'BASIC'", "'BASICFILE'", "'BATCH'", "'BATCHSIZE'", 
                     "'BATCH_TABLE_ACCESS_BY_ROWID'", "'BECOME'", "'BEFORE'", 
                     "'BEGIN'", "'BEGINNING'", "'BEGIN_OUTLINE_DATA'", "'BEHALF'", 
                     "'BEQUEATH'", "'BETWEEN'", "'BFILE'", "'BFILENAME'", 
                     "'BIGFILE'", "'BINARY'", "'BINARY_DOUBLE'", "'BINARY_DOUBLE_INFINITY'", 
                     "'BINARY_DOUBLE_NAN'", "'BINARY_FLOAT'", "'BINARY_FLOAT_INFINITY'", 
                     "'BINARY_FLOAT_NAN'", "'BINARY_INTEGER'", "'BIND_AWARE'", 
                     "'BINDING'", "'BIN_TO_NUM'", "'BITAND'", "'BITMAP_AND'", 
                     "'BITMAP'", "'BITMAPS'", "'BITMAP_TREE'", "'BITS'", 
                     "'BLOB'", "'BLOCK'", "'BLOCK_RANGE'", "'BLOCKS'", "'BLOCKSIZE'", 
                     "'BODY'", "'BOOLEAN'", "'BOTH'", "'BOUND'", "'BRANCH'", 
                     "'BREADTH'", "'BROADCAST'", "'BSON'", "'BUFFER'", "'BUFFER_CACHE'", 
                     "'BUFFER_POOL'", "'BUILD'", "'BULK'", "'BY'", "'BYPASS_RECURSIVE_CHECK'", 
                     "'BYPASS_UJVC'", "'BYTE'", "'CACHE'", "'CACHE_CB'", 
                     "'CACHE_INSTANCES'", "'CACHE_TEMP_TABLE'", "'CACHING'", 
                     "'CALCULATED'", "'CALLBACK'", "'CALL'", "'CANCEL'", 
                     "'CANONICAL'", "'CAPACITY'", "'CAPTION'", "'CARDINALITY'", 
                     "'CASCADE'", "'CASE'", "'CAST'", "'CASE-SENSITIVE'", 
                     "'CATEGORY'", "'CDB$DEFAULT'", "'CEIL'", "'CELL_FLASH_CACHE'", 
                     "'CERTIFICATE'", "'CFILE'", "'CHAINED'", "'CHANGE'", 
                     "'CHANGETRACKING'", "'CHANGE_DUPKEY_ERROR_INDEX'", 
                     "'CHARACTER'", "'CHAR'", "'CHAR_CS'", "'CHARTOROWID'", 
                     "'CHECK_ACL_REWRITE'", "'CHECK'", "'CHECKPOINT'", "'CHILD'", 
                     "'CHOOSE'", "'CHR'", "'CHUNK'", "'CLASS'", "'CLASSIFICATION'", 
                     "'CLASSIFIER'", "'CLAUSE'", "'CLEAN'", "'CLEANUP'", 
                     "'CLEAR'", "'C'", "'CLIENT'", "'CLOB'", "'CLONE'", 
                     "'CLOSE_CACHED_OPEN_CURSORS'", "'CLOSE'", "'CLUSTER_BY_ROWID'", 
                     "'CLUSTER'", "'CLUSTER_DETAILS'", "'CLUSTER_DISTANCE'", 
                     "'CLUSTER_ID'", "'CLUSTERING'", "'CLUSTERING_FACTOR'", 
                     "'CLUSTER_PROBABILITY'", "'CLUSTER_SET'", "'COALESCE'", 
                     "'COALESCE_SQ'", "'COARSE'", "'CO_AUTH_IND'", "'COLD'", 
                     "'COLLECT'", "'COLUMNAR'", "'COLUMN_AUTH_INDICATOR'", 
                     "'COLUMN'", "'COLUMNS'", "'COLUMN_STATS'", "'COLUMN_VALUE'", 
                     "'COMMENT'", "'COMMIT'", "'COMMITTED'", "'COMMON'", 
                     "'COMMON_DATA'", "'COMPACT'", "'COMPATIBILITY'", "'COMPILE'", 
                     "'COMPLETE'", "'COMPLIANCE'", "'COMPONENT'", "'COMPONENTS'", 
                     "'COMPOSE'", "'COMPOSITE'", "'COMPOSITE_LIMIT'", "'COMPOUND'", 
                     "'COMPRESS'", "'COMPUTE'", "'CONCAT'", "'CON_DBID_TO_ID'", 
                     "'CONDITIONAL'", "'CONDITION'", "'CONFIRM'", "'CONFORMING'", 
                     "'CON_GUID_TO_ID'", "'CON_ID'", "'CON_NAME_TO_ID'", 
                     "'CONNECT_BY_CB_WHR_ONLY'", "'CONNECT_BY_COMBINE_SW'", 
                     "'CONNECT_BY_COST_BASED'", "'CONNECT_BY_ELIM_DUPS'", 
                     "'CONNECT_BY_FILTERING'", "'CONNECT_BY_ISCYCLE'", "'CONNECT_BY_ISLEAF'", 
                     "'CONNECT_BY_ROOT'", "'CONNECT'", "'CONNECT_TIME'", 
                     "'CONSIDER'", "'CONSISTENT'", "'CONSTANT'", "'CONST'", 
                     "'CONSTRAINT'", "'CONSTRAINTS'", "'CONSTRUCTOR'", "'CONTAINER'", 
                     "'CONTAINERS'", "'CONTAINERS_DEFAULT'", "'CONTAINER_DATA'", 
                     "'CONTAINER_MAP'", "'CONTENT'", "'CONTENTS'", "'CONTEXT'", 
                     "'CONTINUE'", "'CONTROLFILE'", "'CON_UID_TO_ID'", "'CONVERT'", 
                     "'CONVERSION'", "'COOKIE'", "'COPY'", "'CORR_K'", "'CORR_S'", 
                     "'CORRUPTION'", "'CORRUPT_XID_ALL'", "'CORRUPT_XID'", 
                     "'COS'", "'COSH'", "'COST'", "'COST_XML_QUERY_REWRITE'", 
                     "'COUNT'", "'COVAR_POP'", "'COVAR_SAMP'", "'CPU_COSTING'", 
                     "'CPU_PER_CALL'", "'CPU_PER_SESSION'", "'CRASH'", "'CREATE'", 
                     "'CREATE_FILE_DEST'", "'CREATE_STORED_OUTLINES'", "'CREATION'", 
                     "'CREDENTIAL'", "'CRITICAL'", "'CROSS'", "'CROSSEDITION'", 
                     "'CSCONVERT'", "'CUBE_AJ'", "'CUBE'", "'CUBE_GB'", 
                     "'CUBE_SJ'", "'CUME_DISTM'", "'CURRENT'", "'CURRENT_DATE'", 
                     "'CURRENT_SCHEMA'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", 
                     "'CURRENT_USER'", "'CURRENTV'", "'CURSOR'", "'CURSOR_SHARING_EXACT'", 
                     "'CURSOR_SPECIFIC_SEGMENT'", "'CUSTOMDATUM'", "'CV'", 
                     "'CYCLE'", "'DANGLING'", "'DATABASE'", "'DATA'", "'DATAFILE'", 
                     "'DATAFILES'", "'DATAGUARDCONFIG'", "'DATAMOVEMENT'", 
                     "'DATAOBJNO'", "'DATAOBJ_TO_MAT_PARTITION'", "'DATAOBJ_TO_PARTITION'", 
                     "'DATAPUMP'", "'DATA_SECURITY_REWRITE_LIMIT'", "'DATE'", 
                     "'DATE_MODE'", "'DAY'", "'DAYS'", "'DBA'", "'DBA_RECYCLEBIN'", 
                     "'DBMS_STATS'", "'DB_ROLE_CHANGE'", "'DBTIMEZONE'", 
                     "'DB_UNIQUE_NAME'", "'DB_VERSION'", "'DDL'", "'DEALLOCATE'", 
                     "'DEBUG'", "'DEBUGGER'", "'DEC'", "'DECIMAL'", "'DECLARE'", 
                     "'DECOMPOSE'", "'DECORRELATE'", "'DECR'", "'DECREMENT'", 
                     "'DECRYPT'", "'DEDUPLICATE'", "'DEFAULT'", "'DEFAULTS'", 
                     "'DEFAULT_COLLATION'", "'DEFAULT_CREDENTIAL'", "'DEFERRABLE'", 
                     "'DEFERRED'", "'DEFINED'", "'DEFINE'", "'DEFINER'", 
                     "'DEGREE'", "'DELAY'", "'DELEGATE'", "'DELETE_ALL'", 
                     "'DELETE'", "'DELETEXML'", "'DEMAND'", "'DENSE_RANKM'", 
                     "'DEPENDENT'", "'DEPRECATE'", "'DEPTH'", "'DEQUEUE'", 
                     "'DEREF'", "'DEREF_NO_REWRITE'", "'DESC'", "'DESCRIPTION'", 
                     "'DESTROY'", "'DETACHED'", "'DETERMINES'", "'DETERMINISTIC'", 
                     "'DICTIONARY'", "'DIMENSION'", "'DIMENSIONS'", "'DIRECT_LOAD'", 
                     "'DIRECTORY'", "'DIRECT_PATH'", "'DISABLE_ALL'", "'DISABLE'", 
                     "'DISABLE_PARALLEL_DML'", "'DISABLE_PRESET'", "'DISABLE_RPKE'", 
                     "'DISALLOW'", "'DISASSOCIATE'", "'DISCARD'", "'DISCONNECT'", 
                     "'DISK'", "'DISKGROUP'", "''+ DISKGROUP'", "'DISKS'", 
                     "'DISMOUNT'", "'DISTINCT'", "'DISTINGUISHED'", "'DISTRIBUTED'", 
                     "'DISTRIBUTE'", "'DML'", "'DML_UPDATE'", "'DOCFIDELITY'", 
                     "'DOCUMENT'", "'$ELSE'", "'$ELSIF'", "'$END'", "'$ERROR'", 
                     "'$IF'", "'$THEN'", "'DOMAIN_INDEX_FILTER'", "'DOMAIN_INDEX_NO_SORT'", 
                     "'DOMAIN_INDEX_SORT'", "'DOUBLE'", "'DOWNGRADE'", "'DRIVING_SITE'", 
                     "'DROP_COLUMN'", "'DROP'", "'DROP_GROUP'", "'DSINTERVAL_UNCONSTRAINED'", 
                     "'DST_UPGRADE_INSERT_CONV'", "'DUMP'", "'DUMPSET'", 
                     "'DUPLICATE'", "'DV'", "'DYNAMIC'", "'DYNAMIC_SAMPLING'", 
                     "'DYNAMIC_SAMPLING_EST_CDN'", "'E'", "'EACH'", "'EDITIONABLE'", 
                     "'EDITION'", "'EDITIONING'", "'EDITIONS'", "'ELEMENT'", 
                     "'ELIM_GROUPBY'", "'ELIMINATE_JOIN'", "'ELIMINATE_OBY'", 
                     "'ELIMINATE_OUTER_JOIN'", "'ELSE'", "'ELSIF'", "'EM'", 
                     "'EMPTY_BLOB'", "'EMPTY_CLOB'", "'EMPTY'", "'ENABLE_ALL'", 
                     "'ENABLE'", "'ENABLE_PARALLEL_DML'", "'ENABLE_PRESET'", 
                     "'ENCODING'", "'ENCRYPT'", "'ENCRYPTION'", "'END'", 
                     "'END_OUTLINE_DATA'", "'ENFORCED'", "'ENFORCE'", "'ENQUEUE'", 
                     "'ENTERPRISE'", "'ENTITYESCAPING'", "'ENTRY'", "'EQUIPART'", 
                     "'ERR'", "'ERROR_ARGUMENT'", "'ERROR'", "'ERROR_ON_OVERLAP_TIME'", 
                     "'ERRORS'", "'ERROR_INDEX'", "'ERROR_CODE'", "'ESCAPE'", 
                     "'ESTIMATE'", "'EVAL'", "'EVALNAME'", "'EVALUATE'", 
                     "'EVALUATION'", "'EVENTS'", "'EVERY'", "'EXCEPT'", 
                     "'EXCEPTION'", "'EXCEPTION_INIT'", "'EXCEPTIONS'", 
                     "'EXCHANGE'", "'EXCLUDE'", "'EXCLUDING'", "'EXCLUSIVE'", 
                     "'EXECUTE'", "'EXEMPT'", "'EXISTING'", "'EXISTS'", 
                     "'EXISTSNODE'", "'EXIT'", "'EXPAND_GSET_TO_UNION'", 
                     "'EXPAND_TABLE'", "'EXP'", "'EXPIRE'", "'EXPLAIN'", 
                     "'EXPLOSION'", "'EXPORT'", "'EXPR_CORR_CHECK'", "'EXPRESS'", 
                     "'EXTENDS'", "'EXTENT'", "'EXTENTS'", "'EXTERNAL'", 
                     "'EXTERNALLY'", "'EXTRACTCLOBXML'", "'EXTRACT'", "'EXTRACTVALUE'", 
                     "'EXTRA'", "'FACILITY'", "'FACT'", "'FACTOR'", "'FACTORIZE_JOIN'", 
                     "'FAILED'", "'FAILED_LOGIN_ATTEMPTS'", "'FAILGROUP'", 
                     "'FAILOVER'", "'FAILURE'", "'FALSE'", "'FAMILY'", "'FAR'", 
                     "'FAST'", "'FASTSTART'", "'FBTSCAN'", "'FEATURE'", 
                     "'FEATURE_DETAILS'", "'FEATURE_ID'", "'FEATURE_SET'", 
                     "'FEATURE_VALUE'", "'FETCH'", "'FILE'", "'FILE_NAME_CONVERT'", 
                     "'FILEGROUP'", "'FILESTORE'", "'FILESYSTEM_LIKE_LOGGING'", 
                     "'FILTER'", "'FINAL'", "'FINE'", "'FINISH'", "'FIRST'", 
                     "'FIRSTM'", "'FIRST_ROWS'", "'FIRST_VALUE'", "'FIXED_VIEW_DATA'", 
                     "'FLAGGER'", "'FLASHBACK'", "'FLASH_CACHE'", "'FLOAT'", 
                     "'FLOB'", "'FLEX'", "'FLOOR'", "'FLUSH'", "'FOLDER'", 
                     "'FOLLOWING'", "'FOLLOWS'", "'FORALL'", "'FORCE'", 
                     "'FORCE_XML_QUERY_REWRITE'", "'FOREIGN'", "'FOREVER'", 
                     "'FOR'", "'FORMAT'", "'FORWARD'", "'FRAGMENT_NUMBER'", 
                     "'FREELIST'", "'FREELISTS'", "'FREEPOOLS'", "'FRESH'", 
                     "'FROM'", "'FROM_TZ'", "'FULL'", "'FULL_OUTER_JOIN_TO_OUTER'", 
                     "'FUNCTION'", "'FUNCTIONS'", "'FTP'", "'G'", "'GATHER_OPTIMIZER_STATISTICS'", 
                     "'GATHER_PLAN_STATISTICS'", "'GBY_CONC_ROLLUP'", "'GBY_PUSHDOWN'", 
                     "'GENERATED'", "'GET'", "'GLOBAL'", "'GLOBALLY'", "'GLOBAL_NAME'", 
                     "'GLOBAL_TOPIC_ENABLED'", "'GOTO'", "'GRANT'", "'GROUP_BY'", 
                     "'GROUP'", "'GROUP_ID'", "'GROUPING'", "'GROUPING_ID'", 
                     "'GROUPS'", "'GUARANTEED'", "'GUARANTEE'", "'GUARD'", 
                     "'HALF_YEARS'", "'HASH_AJ'", "'HASH'", "'HASHKEYS'", 
                     "'HASH_SJ'", "'HAVING'", "'HEADER'", "'HEAP'", "'HELP'", 
                     "'HEXTORAW'", "'HEXTOREF'", "'HIDDEN'", "'HIDE'", "'HIER_ORDER'", 
                     "'HIERARCHICAL'", "'HIERARCHIES'", "'HIERARCHY'", "'HIGH'", 
                     "'HINTSET_BEGIN'", "'HINTSET_END'", "'HOT'", "'HOUR'", 
                     "'HOURS'", "'HTTP'", "'HWM_BROKERED'", "'HYBRID'", 
                     "'H'", "'IDENTIFIED'", "'IDENTIFIER'", "'IDENTITY'", 
                     "'IDGENERATORS'", "'ID'", "'IDLE_TIME'", "'IF'", "'IGNORE'", 
                     "'IGNORE_OPTIM_EMBEDDED_HINTS'", "'IGNORE_ROW_ON_DUPKEY_INDEX'", 
                     "'IGNORE_WHERE_CLAUSE'", "'ILM'", "'IMMEDIATE'", "'IMPACT'", 
                     "'IMPORT'", "'INACTIVE'", "'INACTIVE_ACCOUNT_TIME'", 
                     "'INCLUDE'", "'INCLUDE_VERSION'", "'INCLUDING'", "'INCREMENTAL'", 
                     "'INCREMENT'", "'INCR'", "'INDENT'", "'INDEX_ASC'", 
                     "'INDEX_COMBINE'", "'INDEX_DESC'", "'INDEXED'", "'INDEXES'", 
                     "'INDEX_FFS'", "'INDEX_FILTER'", "'INDEX'", "'INDEXING'", 
                     "'INDEX_JOIN'", "'INDEX_ROWS'", "'INDEX_RRS'", "'INDEX_RS_ASC'", 
                     "'INDEX_RS_DESC'", "'INDEX_RS'", "'INDEX_SCAN'", "'INDEX_SKIP_SCAN'", 
                     "'INDEX_SS_ASC'", "'INDEX_SS_DESC'", "'INDEX_SS'", 
                     "'INDEX_STATS'", "'INDEXTYPE'", "'INDEXTYPES'", "'INDICATOR'", 
                     "'INDICES'", "'INFINITE'", "'INFORMATIONAL'", "'INHERIT'", 
                     "'IN'", "'INITCAP'", "'INITIAL'", "'INITIALIZED'", 
                     "'INITIALLY'", "'INITRANS'", "'INLINE'", "'INLINE_XMLTYPE_NT'", 
                     "'INMEMORY'", "'IN_MEMORY_METADATA'", "'INMEMORY_PRUNING'", 
                     "'INNER'", "'INOUT'", "'INPLACE'", "'INSERTCHILDXMLAFTER'", 
                     "'INSERTCHILDXMLBEFORE'", "'INSERTCHILDXML'", "'INSERT'", 
                     "'INSERTXMLAFTER'", "'INSERTXMLBEFORE'", "'INSTANCE'", 
                     "'INSTANCES'", "'INSTANTIABLE'", "'INSTANTLY'", "'INSTEAD'", 
                     "'INSTR2'", "'INSTR4'", "'INSTRB'", "'INSTRC'", "'INSTR'", 
                     "'INTEGER'", "'INTERLEAVED'", "'INTERMEDIATE'", "'INTERNAL_CONVERT'", 
                     "'INTERNAL_USE'", "'INTERPRETED'", "'INTERSECT'", "'INTERVAL'", 
                     "'INT'", "'INTO'", "'INVALIDATE'", "'INVALIDATION'", 
                     "'INVISIBLE'", "'IN_XQUERY'", "'IS'", "'IS_LEAF'", 
                     "'ISOLATION'", "'ISOLATION_LEVEL'", "'ITERATE'", "'ITERATION_NUMBER'", 
                     "'JAVA'", "'JOB'", "'JOIN'", "'JSON_ARRAYAGG'", "'JSON_ARRAY'", 
                     "'JSON_EQUAL'", "'JSON_EXISTS2'", "'JSON_EXISTS'", 
                     "'JSONGET'", "'JSON'", "'JSON_OBJECTAGG'", "'JSON_OBJECT'", 
                     "'JSONPARSE'", "'JSON_QUERY'", "'JSON_SERIALIZE'", 
                     "'JSON_TABLE'", "'JSON_TEXTCONTAINS2'", "'JSON_TEXTCONTAINS'", 
                     "'JSON_TRANSFORM'", "'JSON_VALUE'", "'K'", "'KEEP_DUPLICATES'", 
                     "'KEEP'", "'KERBEROS'", "'KEY'", "'KEY_LENGTH'", "'KEYSIZE'", 
                     "'KEYS'", "'KEYSTORE'", "'KILL'", "'LABEL'", "'LANGUAGE'", 
                     "'LAST_DAY'", "'LAST'", "'LAST_VALUE'", "'LATERAL'", 
                     "'LAX'", "'LAYER'", "'LDAP_REGISTRATION_ENABLED'", 
                     "'LDAP_REGISTRATION'", "'LDAP_REG_SYNC_INTERVAL'", 
                     "'LEAF'", "'LEAD_CDB'", "'LEAD_CDB_URI'", "'LEADING'", 
                     "'LEFT'", "'LENGTH2'", "'LENGTH4'", "'LENGTHB'", "'LENGTHC'", 
                     "'LENGTH'", "'LESS'", "'LEVEL'", "'LEVEL_NAME'", "'LEVELS'", 
                     "'LIBRARY'", "'LIFECYCLE'", "'LIFE'", "'LIFETIME'", 
                     "'LIKE2'", "'LIKE4'", "'LIKEC'", "'LIKE_EXPAND'", "'LIKE'", 
                     "'LIMIT'", "'LINEAR'", "'LINK'", "'LIST'", "'LN'", 
                     "'LNNVL'", "'LOAD'", "'LOB'", "'LOBNVL'", "'LOBS'", 
                     "'LOCAL_INDEXES'", "'LOCAL'", "'LOCALTIME'", "'LOCALTIMESTAMP'", 
                     "'LOCATION'", "'LOCATOR'", "'LOCKDOWN'", "'LOCKED'", 
                     "'LOCKING'", "'LOCK'", "'LOGFILE'", "'LOGFILES'", "'LOGGING'", 
                     "'LOGICAL'", "'LOGICAL_READS_PER_CALL'", "'LOGICAL_READS_PER_SESSION'", 
                     "'LOG'", "'LOGMINING'", "'LOGOFF'", "'LOGON'", "'LOG_READ_ONLY_VIOLATIONS'", 
                     "'LONG'", "'LOOP'", "'LOST'", "'LOWER'", "'LOW'", "'LPAD'", 
                     "'LTRIM'", "'M'", "'MAIN'", "'MAKE_REF'", "'MANAGED'", 
                     "'MANAGE'", "'MANAGEMENT'", "'MANAGER'", "'MANDATORY'", 
                     "'MANUAL'", "'MAP'", "'MAPPING'", "'MASTER'", "'MATCHED'", 
                     "'MATCHES'", "'MATCH'", "'MATCH_NUMBER'", "'MATCH_RECOGNIZE'", 
                     "'MATERIALIZED'", "'MATERIALIZE'", "'MAXARCHLOGS'", 
                     "'MAXDATAFILES'", "'MAXEXTENTS'", "'MAXIMIZE'", "'MAXINSTANCES'", 
                     "'MAXLOGFILES'", "'MAXLOGHISTORY'", "'MAXLOGMEMBERS'", 
                     "'MAX_SHARED_TEMP_SIZE'", "'MAXSIZE'", "'MAXTRANS'", 
                     "'MAXVALUE'", "'MEASURE'", "'MEASURES'", "'MEDIUM'", 
                     "'MEMBER'", "'MEMBER_CAPTION'", "'MEMBER_DESCRIPTION'", 
                     "'MEMBER_NAME'", "'MEMBER_UNIQUE_NAME'", "'MEMCOMPRESS'", 
                     "'MEMORY'", "'MERGE$ACTIONS'", "'MERGE_AJ'", "'MERGE_CONST_ON'", 
                     "'MERGE'", "'MERGE_SJ'", "'METADATA'", "'METHOD'", 
                     "'MIGRATE'", "'MIGRATION'", "'MINEXTENTS'", "'MINIMIZE'", 
                     "'MINIMUM'", "'MINING'", "'MINUS'", "'MINUS_NULL'", 
                     "'MINUTE'", "'MINUTES'", "'MINVALUE'", "'MIRRORCOLD'", 
                     "'MIRRORHOT'", "'MIRROR'", "'MISSING'", "'MISMATCH'", 
                     "'MLSLABEL'", "'MODEL_COMPILE_SUBQUERY'", "'MODEL_DONTVERIFY_UNIQUENESS'", 
                     "'MODEL_DYNAMIC_SUBQUERY'", "'MODEL_MIN_ANALYSIS'", 
                     "'MODEL'", "'MODEL_NB'", "'MODEL_NO_ANALYSIS'", "'MODEL_PBY'", 
                     "'MODEL_PUSH_REF'", "'MODEL_SV'", "'MODE'", "'MODIFICATION'", 
                     "'MODIFY_COLUMN_TYPE'", "'MODIFY'", "'MOD'", "'MODULE'", 
                     "'MONITORING'", "'MONITOR'", "'MONTH'", "'MONTHS_BETWEEN'", 
                     "'MONTHS'", "'MOUNT'", "'MOUNTPATH'", "'MOUNTPOINT'", 
                     "'MOVEMENT'", "'MOVE'", "'MULTIDIMENSIONAL'", "'MULTISET'", 
                     "'MV_MERGE'", "'NAMED'", "'NAME'", "'NAMESPACE'", "'NAN'", 
                     "'NANVL'", "'NATIONAL'", "'NATIVE_FULL_OUTER_JOIN'", 
                     "'NATIVE'", "'NATURAL'", "'NATURALN'", "'NAV'", "'NCHAR_CS'", 
                     "'NCHAR'", "'NCHR'", "'NCLOB'", "'NEEDED'", "'NEG'", 
                     "'NESTED'", "'NESTED_TABLE_FAST_INSERT'", "'NESTED_TABLE_GET_REFS'", 
                     "'NESTED_TABLE_ID'", "'NESTED_TABLE_SET_REFS'", "'NESTED_TABLE_SET_SETID'", 
                     "'NETWORK'", "'NEVER'", "'NEW'", "'NEW_TIME'", "'NEXT_DAY'", 
                     "'NEXT'", "'NL_AJ'", "'NLJ_BATCHING'", "'NLJ_INDEX_FILTER'", 
                     "'NLJ_INDEX_SCAN'", "'NLJ_PREFETCH'", "'NLS_CALENDAR'", 
                     "'NLS_CHARACTERSET'", "'NLS_CHARSET_DECL_LEN'", "'NLS_CHARSET_ID'", 
                     "'NLS_CHARSET_NAME'", "'NLS_COMP'", "'NLS_CURRENCY'", 
                     "'NLS_DATE_FORMAT'", "'NLS_DATE_LANGUAGE'", "'NLS_INITCAP'", 
                     "'NLS_ISO_CURRENCY'", "'NL_SJ'", "'NLS_LANG'", "'NLS_LANGUAGE'", 
                     "'NLS_LENGTH_SEMANTICS'", "'NLS_LOWER'", "'NLS_NCHAR_CONV_EXCP'", 
                     "'NLS_NUMERIC_CHARACTERS'", "'NLS_SORT'", "'NLSSORT'", 
                     "'NLS_SPECIAL_CHARS'", "'NLS_TERRITORY'", "'NLS_UPPER'", 
                     "'NO_ACCESS'", "'NO_ADAPTIVE_PLAN'", "'NO_ANSI_REARCH'", 
                     "'NOAPPEND'", "'NOARCHIVELOG'", "'NOAUDIT'", "'NO_AUTO_REOPTIMIZE'", 
                     "'NO_BASETABLE_MULTIMV_REWRITE'", "'NO_BATCH_TABLE_ACCESS_BY_ROWID'", 
                     "'NO_BIND_AWARE'", "'NO_BUFFER'", "'NOCACHE'", "'NO_CARTESIAN'", 
                     "'NO_CHECK_ACL_REWRITE'", "'NO_CLUSTER_BY_ROWID'", 
                     "'NO_CLUSTERING'", "'NO_COALESCE_SQ'", "'NO_COMMON_DATA'", 
                     "'NOCOMPRESS'", "'NO_CONNECT_BY_CB_WHR_ONLY'", "'NO_CONNECT_BY_COMBINE_SW'", 
                     "'NO_CONNECT_BY_COST_BASED'", "'NO_CONNECT_BY_ELIM_DUPS'", 
                     "'NO_CONNECT_BY_FILTERING'", "'NOCOPY'", "'NO_COST_XML_QUERY_REWRITE'", 
                     "'NO_CPU_COSTING'", "'NOCPU_COSTING'", "'NOCYCLE'", 
                     "'NO_DATA_SECURITY_REWRITE'", "'NO_DECORRELATE'", "'NODELAY'", 
                     "'NO_DOMAIN_INDEX_FILTER'", "'NO_DST_UPGRADE_INSERT_CONV'", 
                     "'NO_ELIM_GROUPBY'", "'NO_ELIMINATE_JOIN'", "'NO_ELIMINATE_OBY'", 
                     "'NO_ELIMINATE_OUTER_JOIN'", "'NOENTITYESCAPING'", 
                     "'NO_EXPAND_GSET_TO_UNION'", "'NO_EXPAND'", "'NO_EXPAND_TABLE'", 
                     "'NO_FACT'", "'NO_FACTORIZE_JOIN'", "'NO_FILTERING'", 
                     "'NOFORCE'", "'NO_FULL_OUTER_JOIN_TO_OUTER'", "'NO_GATHER_OPTIMIZER_STATISTICS'", 
                     "'NO_GBY_PUSHDOWN'", "'NOGUARANTEE'", "'NO_INDEX_FFS'", 
                     "'NO_INDEX'", "'NO_INDEX_SS'", "'NO_INMEMORY'", "'NO_INMEMORY_PRUNING'", 
                     "'NOKEEP'", "'NO_LOAD'", "'NOLOCAL'", "'NOLOGGING'", 
                     "'NOMAPPING'", "'NOMAXVALUE'", "'NO_MERGE'", "'NOMINIMIZE'", 
                     "'NOMINVALUE'", "'NO_MODEL_PUSH_REF'", "'NO_MONITORING'", 
                     "'NOMONITORING'", "'NO_MONITOR'", "'NO_MULTIMV_REWRITE'", 
                     "'NO_NATIVE_FULL_OUTER_JOIN'", "'NONBLOCKING'", "'NONEDITIONABLE'", 
                     "'NONE'", "'NO_NLJ_BATCHING'", "'NO_NLJ_PREFETCH'", 
                     "'NO'", "'NONSCHEMA'", "'NO_OBJECT_LINK'", "'NOORDER'", 
                     "'NO_ORDER_ROLLUPS'", "'NO_OUTER_JOIN_TO_ANTI'", "'NO_OUTER_JOIN_TO_INNER'", 
                     "'NOOVERRIDE'", "'NO_PARALLEL_INDEX'", "'NOPARALLEL_INDEX'", 
                     "'NO_PARALLEL'", "'NOPARALLEL'", "'NO_PARTIAL_COMMIT'", 
                     "'NO_PARTIAL_JOIN'", "'NO_PARTIAL_ROLLUP_PUSHDOWN'", 
                     "'NOPARTITION'", "'NO_PLACE_DISTINCT'", "'NO_PLACE_GROUP_BY'", 
                     "'NO_PQ_CONCURRENT_UNION'", "'NO_PQ_MAP'", "'NOPROMPT'", 
                     "'NO_PQ_REPLICATE'", "'NO_PQ_SKEW'", "'NO_PRUNE_GSETS'", 
                     "'NO_PULL_PRED'", "'NO_PUSH_PRED'", "'NO_PUSH_SUBQ'", 
                     "'NO_PX_FAULT_TOLERANCE'", "'NO_PX_JOIN_FILTER'", "'NO_QKN_BUFF'", 
                     "'NO_QUERY_TRANSFORMATION'", "'NO_REF_CASCADE'", "'NORELOCATE'", 
                     "'NORELY'", "'NOREPAIR'", "'NOREPLAY'", "'NORESETLOGS'", 
                     "'NO_RESULT_CACHE'", "'NOREVERSE'", "'NO_REWRITE'", 
                     "'NOREWRITE'", "'NORMAL'", "'NO_ROOT_SW_FOR_LOCAL'", 
                     "'NOROWDEPENDENCIES'", "'NOSCHEMACHECK'", "'NOSEGMENT'", 
                     "'NO_SEMIJOIN'", "'NO_SEMI_TO_INNER'", "'NO_SET_TO_JOIN'", 
                     "'NOSORT'", "'NO_SQL_TRANSLATION'", "'NO_SQL_TUNE'", 
                     "'NO_STAR_TRANSFORMATION'", "'NO_STATEMENT_QUEUING'", 
                     "'NO_STATS_GSETS'", "'NOSTRICT'", "'NO_SUBQUERY_PRUNING'", 
                     "'NO_SUBSTRB_PAD'", "'NO_SWAP_JOIN_INPUTS'", "'NOSWITCH'", 
                     "'NO_TABLE_LOOKUP_BY_NL'", "'NO_TEMP_TABLE'", "'NOTHING'", 
                     "'NOTIFICATION'", "'NOT'", "'NO_TRANSFORM_DISTINCT_AGG'", 
                     "'NO_UNNEST'", "'NO_USE_CUBE'", "'NO_USE_HASH_AGGREGATION'", 
                     "'NO_USE_HASH_GBY_FOR_PUSHDOWN'", "'NO_USE_HASH'", 
                     "'NO_USE_INVISIBLE_INDEXES'", "'NO_USE_MERGE'", "'NO_USE_NL'", 
                     "'NO_USE_VECTOR_AGGREGATION'", "'NOVALIDATE'", "'NO_VECTOR_TRANSFORM_DIMS'", 
                     "'NO_VECTOR_TRANSFORM_FACT'", "'NO_VECTOR_TRANSFORM'", 
                     "'NOWAIT'", "'NO_XDB_FASTPATH_INSERT'", "'NO_XML_DML_REWRITE'", 
                     "'NO_XMLINDEX_REWRITE_IN_SELECT'", "'NO_XMLINDEX_REWRITE'", 
                     "'NO_XML_QUERY_REWRITE'", "'NO_ZONEMAP'", "'NTH_VALUE'", 
                     "'NULLIF'", "'NULL'", "'NULLS'", "'NUMBER'", "'NUMERIC'", 
                     "'NUM_INDEX_KEYS'", "'NUMTODSINTERVAL'", "'NUMTOYMINTERVAL'", 
                     "'NVARCHAR2'", "'NVL2'", "'OBJECT2XML'", "'OBJECT'", 
                     "'OBJ_ID'", "'OBJNO'", "'OBJNO_REUSE'", "'OCCURENCES'", 
                     "'OFFLINE'", "'OFF'", "'OFFSET'", "'OF'", "'OIDINDEX'", 
                     "'OID'", "'OLAP'", "'OLD'", "'OLD_PUSH_PRED'", "'OLS'", 
                     "'OLTP'", "'OMIT'", "'ONE'", "'ONLINE'", "'ONLINELOG'", 
                     "'ONLY'", "'ON'", "'OPAQUE'", "'OPAQUE_TRANSFORM'", 
                     "'OPAQUE_XCANONICAL'", "'OPCODE'", "'OPEN'", "'OPERATIONS'", 
                     "'OPERATOR'", "'OPT_ESTIMATE'", "'OPTIMAL'", "'OPTIMIZE'", 
                     "'OPTIMIZER_FEATURES_ENABLE'", "'OPTIMIZER_GOAL'", 
                     "'OPTION'", "'OPT_PARAM'", "'ORA_BRANCH'", "'ORA_CHECK_ACL'", 
                     "'ORA_CHECK_PRIVILEGE'", "'ORA_CLUSTERING'", "'ORADATA'", 
                     "'ORADEBUG'", "'ORA_DST_AFFECTED'", "'ORA_DST_CONVERT'", 
                     "'ORA_DST_ERROR'", "'ORA_GET_ACLIDS'", "'ORA_GET_PRIVILEGES'", 
                     "'ORA_HASH'", "'ORA_INVOKING_USERID'", "'ORA_INVOKING_USER'", 
                     "'ORA_INVOKING_XS_USER_GUID'", "'ORA_INVOKING_XS_USER'", 
                     "'ORA_RAWCOMPARE'", "'ORA_RAWCONCAT'", "'ORA_ROWSCN'", 
                     "'ORA_ROWSCN_RAW'", "'ORA_ROWVERSION'", "'ORA_TABVERSION'", 
                     "'ORA_WRITE_TIME'", "'ORDERED'", "'ORDERED_PREDICATES'", 
                     "'ORDER'", "'ORDINALITY'", "'OR_EXPAND'", "'ORGANIZATION'", 
                     "'OR'", "'OR_PREDICATES'", "'OSERROR'", "'OTHER'", 
                     "'OUTER_JOIN_TO_ANTI'", "'OUTER_JOIN_TO_INNER'", "'OUTER'", 
                     "'OUTLINE_LEAF'", "'OUTLINE'", "'OUT_OF_LINE'", "'OUT'", 
                     "'OVERFLOW_NOMOVE'", "'OVERFLOW'", "'OVERLAPS'", "'OVER'", 
                     "'OVERRIDING'", "'OWNER'", "'OWNERSHIP'", "'OWN'", 
                     "'P'", "'PACKAGE'", "'PACKAGES'", "'PARALLEL_ENABLE'", 
                     "'PARALLEL_INDEX'", "'PARALLEL'", "'PARAMETERFILE'", 
                     "'PARAMETERS'", "'PARAM'", "'PARENT'", "'PARENT_LEVEL_NAME'", 
                     "'PARENT_UNIQUE_NAME'", "'PARITY'", "'PARTIAL_JOIN'", 
                     "'PARTIALLY'", "'PARTIAL'", "'PARTIAL_ROLLUP_PUSHDOWN'", 
                     "'PARTITION_HASH'", "'PARTITION_LIST'", "'PARTITION'", 
                     "'PARTITION_RANGE'", "'PARTITIONS'", "'PART$NUM$INST'", 
                     "'PASSING'", "'PASSWORD_GRACE_TIME'", "'PASSWORD_LIFE_TIME'", 
                     "'PASSWORD_LOCK_TIME'", "'PASSWORD'", "'PASSWORD_REUSE_MAX'", 
                     "'PASSWORD_REUSE_TIME'", "'PASSWORD_ROLLOVER_TIME'", 
                     "'PASSWORD_VERIFY_FUNCTION'", "'PAST'", "'PATCH'", 
                     "'PATH'", "'PATH_PREFIX'", "'PATHS'", "'PATTERN'", 
                     "'PBL_HS_BEGIN'", "'PBL_HS_END'", "'PCTFREE'", "'PCTINCREASE'", 
                     "'PCTTHRESHOLD'", "'PCTUSED'", "'PCTVERSION'", "'PENDING'", 
                     "<INVALID>", "<INVALID>", "<INVALID>", "'PERCENT'", 
                     "'PERCENT_RANKM'", "<INVALID>", "<INVALID>", "<INVALID>", 
                     "<INVALID>", "<INVALID>", "'PERFORMANCE'", "'PERIOD'", 
                     "'PERMANENT'", "'PERMISSION'", "'PERMUTE'", "'PER'", 
                     "'PFILE'", "'PHYSICAL'", "'PIKEY'", "'PIPELINED'", 
                     "'PIPE'", "'PIV_GB'", "'PIVOT'", "'PIV_SSF'", "'PLACE_DISTINCT'", 
                     "'PLACE_GROUP_BY'", "'PLAN'", "'PLSCOPE_SETTINGS'", 
                     "'PLS_INTEGER'", "'PLSQL_CCFLAGS'", "'PLSQL_CODE_TYPE'", 
                     "'PLSQL_DEBUG'", "'PLSQL_OPTIMIZE_LEVEL'", "'PLSQL_WARNINGS'", 
                     "'PLUGGABLE'", "'PMEM'", "'POINT'", "'POLICY'", "'POOL_16K'", 
                     "'POOL_2K'", "'POOL_32K'", "'POOL_4K'", "'POOL_8K'", 
                     "'POSITIVEN'", "'POSITIVE'", "'POST_TRANSACTION'", 
                     "'POWERMULTISET_BY_CARDINALITY'", "'POWERMULTISET'", 
                     "'POWER'", "'PQ_CONCURRENT_UNION'", "'PQ_DISTRIBUTE'", 
                     "'PQ_DISTRIBUTE_WINDOW'", "'PQ_FILTER'", "'PQ_MAP'", 
                     "'PQ_NOMAP'", "'PQ_REPLICATE'", "'PQ_SKEW'", "'PRAGMA'", 
                     "'PREBUILT'", "'PRECEDES'", "'PRECEDING'", "'PRECISION'", 
                     "'PRECOMPUTE_SUBQUERY'", "'PREDICATE_REORDERS'", "'PRELOAD'", 
                     "'PREPARE'", "'PRESENTNNV'", "'PRESENT'", "'PRESENTV'", 
                     "'PRESERVE_OID'", "'PRESERVE'", "'PRETTY'", "'PREVIOUS'", 
                     "'PREV'", "'PRIMARY'", "'PRINTBLOBTOCLOB'", "'PRIORITY'", 
                     "'PRIOR'", "'PRIVATE'", "'PRIVATE_SGA'", "'PRIVILEGED'", 
                     "'PRIVILEGE'", "'PRIVILEGES'", "'PROCEDURAL'", "'PROCEDURE'", 
                     "'PROCESS'", "'PROFILE'", "'PROGRAM'", "'PROJECT'", 
                     "'PROPAGATE'", "'PROPERTY'", "'PROTECTED'", "'PROTECTION'", 
                     "'PROTOCOL'", "'PROXY'", "'PRUNING'", "'PUBLIC'", "'PULL_PRED'", 
                     "'PURGE'", "'PUSH_PRED'", "'PUSH_SUBQ'", "'PX_FAULT_TOLERANCE'", 
                     "'PX_GRANULE'", "'PX_JOIN_FILTER'", "'QB_NAME'", "'QUARTERS'", 
                     "'QUERY_BLOCK'", "'QUERY'", "'QUEUE_CURR'", "'QUEUE'", 
                     "'QUEUE_ROWP'", "'QUIESCE'", "'QUORUM'", "'QUOTA'", 
                     "'QUOTAGROUP'", "'RAISE'", "'RANDOM_LOCAL'", "'RANDOM'", 
                     "'RANGE'", "'RANKM'", "'RAPIDLY'", "'RAW'", "'RAWTOHEX'", 
                     "'RAWTONHEX'", "'RBA'", "'RBO_OUTLINE'", "'RDBA'", 
                     "'READ'", "'READS'", "'REALM'", "'REAL'", "'REBALANCE'", 
                     "'REBUILD'", "'RECORD'", "'RECORDS_PER_BLOCK'", "'RECOVERABLE'", 
                     "'RECOVER'", "'RECOVERY'", "'RECYCLEBIN'", "'RECYCLE'", 
                     "'REDACTION'", "'REDEFINE'", "'REDO'", "'REDUCED'", 
                     "'REDUNDANCY'", "'REF_CASCADE_CURSOR'", "'REFERENCED'", 
                     "'REFERENCE'", "'REFERENCES'", "'REFERENCING'", "'REF'", 
                     "'REFRESH'", "'REFTOHEX'", "'REGEXP_COUNT'", "'REGEXP_INSTR'", 
                     "'REGEXP_LIKE'", "'REGEXP_REPLACE'", "'REGEXP_SUBSTR'", 
                     "'REGISTER'", "'REGR_AVGX'", "'REGR_AVGY'", "'REGR_COUNT'", 
                     "'REGR_INTERCEPT'", "'REGR_R2'", "'REGR_SLOPE'", "'REGR_SXX'", 
                     "'REGR_SXY'", "'REGR_SYY'", "'REGULAR'", "'REJECT'", 
                     "'REKEY'", "'RELATIONAL'", "'RELIES_ON'", "'RELOCATE'", 
                     "'RELY'", "'REMAINDER'", "'REMOTE'", "'REMOTE_MAPPED'", 
                     "'REMOVE'", "'RENAME'", "'REPAIR'", "'REPEAT'", "'REPLACE'", 
                     "'REPLICATION'", "'REQUIRED'", "'RESETLOGS'", "'RESET'", 
                     "'RESIZE'", "'RESOLVE'", "'RESOLVER'", "'RESOURCE'", 
                     "'RESPECT'", "'RESTART'", "'RESTORE_AS_INTERVALS'", 
                     "'RESTORE'", "'RESTRICT_ALL_REF_CONS'", "'RESTRICTED'", 
                     "'RESTRICT_REFERENCES'", "'RESTRICT'", "'RESULT_CACHE'", 
                     "'RESULT'", "'RESUMABLE'", "'RESUME'", "'RETENTION'", 
                     "'RETRY_ON_ROW_CHANGE'", "'RETURNING'", "'RETURN'", 
                     "'REUSE'", "'REVERSE'", "'REVOKE'", "'REWRITE_OR_ERROR'", 
                     "'REWRITE'", "'RIGHT'", "'ROLE'", "'ROLESET'", "'ROLES'", 
                     "'ROLLBACK'", "'ROLLING'", "'ROLLUP'", "'ROWDEPENDENCIES'", 
                     "'ROWID_MAPPING_TABLE'", "'ROWID'", "'ROWIDTOCHAR'", 
                     "'ROWIDTONCHAR'", "'ROW_LENGTH'", "'ROWNUM'", "'ROW'", 
                     "'ROWS'", "'RPAD'", "'RTRIM'", "'RULE'", "'RULES'", 
                     "'RUNNING'", "'SALT'", "'SAMPLE'", "'SAVE_AS_INTERVALS'", 
                     "'SAVEPOINT'", "'SAVE'", "'SB4'", "'SCALE_ROWS'", "'SCALE'", 
                     "'SCAN_INSTANCES'", "'SCAN'", "'SCHEDULER'", "'SCHEMACHECK'", 
                     "'SCHEMA'", "'SCN_ASCENDING'", "'SCN'", "'SCOPE'", 
                     "'SCRUB'", "'SD_ALL'", "'SD_INHIBIT'", "'SDO_GEOM_MBR'", 
                     "'SDO_GEOMETRY'", "'SD_SHOW'", "'SEARCH'", "'SECOND'", 
                     "'SECONDS'", "'SECRET'", "'SECUREFILE_DBA'", "'SECUREFILE'", 
                     "'SECURITY'", "'SEED'", "'SEG_BLOCK'", "'SEG_FILE'", 
                     "'SEGMENT'", "'SELECTIVITY'", "'SELECT'", "'SELF'", 
                     "'SEMIJOIN_DRIVER'", "'SEMIJOIN'", "'SEMI_TO_INNER'", 
                     "'SEQUENCED'", "'SEQUENCE'", "'SEQUENTIAL'", "'SEQ'", 
                     "'SERIALIZABLE'", "'SERIALLY_REUSABLE'", "'SERIAL'", 
                     "'SERVERERROR'", "'SERVICE_NAME_CONVERT'", "'SERVICE'", 
                     "'SERVICES'", "'SESSION_CACHED_CURSORS'", "'SESSION'", 
                     "'SESSIONS_PER_USER'", "'SESSIONTIMEZONE'", "'SESSIONTZNAME'", 
                     "'SET'", "'SETS'", "'SETTINGS'", "'SET_TO_JOIN'", "'SEVERE'", 
                     "'SHARDSPACE'", "'SHARED_POOL'", "'SHARED'", "'SHARE'", 
                     "'SHARING'", "'SHELFLIFE'", "'SHOW'", "'SHRINK'", "'SHUTDOWN'", 
                     "'SIBLINGS'", "'SID'", "'SITE'", "'SIGNAL_COMPONENT'", 
                     "'SIGNAL_FUNCTION'", "'SIGN'", "'SIGNTYPE'", "'SIMPLE_INTEGER'", 
                     "'SIMPLE'", "'SINGLE'", "'SINGLETASK'", "'SINH'", "'SIN'", 
                     "'SIZE'", "'SKIP_EXT_OPTIMIZER'", "'SKIP'", "'SKIP_UNQ_UNUSABLE_IDX'", 
                     "'SKIP_UNUSABLE_INDEXES'", "'SMALLFILE'", "'SMALLINT'", 
                     "'SNAPSHOT'", "'SOME'", "'SORT'", "'SOUNDEX'", "'SOURCE_FILE_DIRECTORY'", 
                     "'SOURCE_FILE_NAME_CONVERT'", "'SOURCE'", "'SPACE'", 
                     "'SPECIFICATION'", "'SPFILE'", "'SPLIT'", "'SPREADSHEET'", 
                     "'SQLDATA'", "'SQLERROR'", "'SQLLDR'", "'SQL'", "<INVALID>", 
                     "'SQL_MACRO'", "'SQL_TRACE'", "'SQL_TRANSLATION_PROFILE'", 
                     "'SQRT'", "'STALE'", "'STANDALONE'", "'STANDARD'", 
                     "'STANDARD_HASH'", "'STANDBY_MAX_DATA_DELAY'", "'STANDBYS'", 
                     "'STANDBY'", "'STAR'", "'STAR_TRANSFORMATION'", "'START'", 
                     "'STARTUP'", "'STATEMENT_ID'", "'STATEMENT_QUEUING'", 
                     "'STATEMENTS'", "'STATEMENT'", "'STATE'", "'STATIC'", 
                     "'STATISTICS'", "'STATS_BINOMIAL_TEST'", "'STATS_CROSSTAB'", 
                     "'STATS_F_TEST'", "'STATS_KS_TEST'", "'STATS_MODE'", 
                     "'STATS_MW_TEST'", "'STATS_ONE_WAY_ANOVA'", "'STATS_T_TEST_INDEP'", 
                     "'STATS_T_TEST_INDEPU'", "'STATS_T_TEST_ONE'", "'STATS_T_TEST_PAIRED'", 
                     "'STATS_WSR_TEST'", "'STDDEV_POP'", "'STDDEV_SAMP'", 
                     "'STOP'", "'STORAGE'", "'STORE'", "'STREAMS'", "'STREAM'", 
                     "'STRICT'", "'STRING'", "'STRIPE_COLUMNS'", "'STRIPE_WIDTH'", 
                     "'STRIP'", "'STRUCTURE'", "'SUBMULTISET'", "'SUBPARTITION_REL'", 
                     "'SUBPARTITIONS'", "'SUBPARTITION'", "'SUBQUERIES'", 
                     "'SUBQUERY_PRUNING'", "'SUBSCRIBE'", "'SUBSET'", "'SUBSTITUTABLE'", 
                     "'SUBSTR2'", "'SUBSTR4'", "'SUBSTRB'", "'SUBSTRC'", 
                     "'SUBTYPE'", "'SUCCESSFUL'", "'SUCCESS'", "'SUMMARY'", 
                     "'SUPPLEMENTAL'", "'SUSPEND'", "'SWAP_JOIN_INPUTS'", 
                     "'SWITCHOVER'", "'SWITCH'", "'SYNCHRONOUS'", "'SYNC'", 
                     "'SYNONYM'", "'SYS'", "'SYSASM'", "'SYS_AUDIT'", "'SYSAUX'", 
                     "'SYSBACKUP'", "'SYS_CHECKACL'", "'SYS_CHECK_PRIVILEGE'", 
                     "'SYS_CONNECT_BY_PATH'", "'SYS_CONTEXT'", "'SYSDATE'", 
                     "'SYSDBA'", "'SYS_DBURIGEN'", "'SYSDG'", "'SYS_DL_CURSOR'", 
                     "'SYS_DM_RXFORM_CHR'", "'SYS_DM_RXFORM_NUM'", "'SYS_DOM_COMPARE'", 
                     "'SYS_DST_PRIM2SEC'", "'SYS_DST_SEC2PRIM'", "'SYS_ET_BFILE_TO_RAW'", 
                     "'SYS_ET_BLOB_TO_IMAGE'", "'SYS_ET_IMAGE_TO_BLOB'", 
                     "'SYS_ET_RAW_TO_BFILE'", "'SYS_EXTPDTXT'", "'SYS_EXTRACT_UTC'", 
                     "'SYS_FBT_INSDEL'", "'SYS_FILTER_ACLS'", "'SYS_FNMATCHES'", 
                     "'SYS_FNREPLACE'", "'SYS_GET_ACLIDS'", "'SYS_GET_COL_ACLIDS'", 
                     "'SYS_GET_PRIVILEGES'", "'SYS_GETTOKENID'", "'SYS_GETXTIVAL'", 
                     "'SYS_GUID'", "'SYSGUID'", "'SYSKM'", "'SYS_MAKE_XMLNODEID'", 
                     "'SYS_MAKEXML'", "'SYS_MKXMLATTR'", "'SYS_MKXTI'", 
                     "'SYSOBJ'", "'SYS_OP_ADT2BIN'", "'SYS_OP_ADTCONS'", 
                     "'SYS_OP_ALSCRVAL'", "'SYS_OP_ATG'", "'SYS_OP_BIN2ADT'", 
                     "'SYS_OP_BITVEC'", "'SYS_OP_BL2R'", "'SYS_OP_BLOOM_FILTER_LIST'", 
                     "'SYS_OP_BLOOM_FILTER'", "'SYS_OP_C2C'", "'SYS_OP_CAST'", 
                     "'SYS_OP_CEG'", "'SYS_OP_CL2C'", "'SYS_OP_COMBINED_HASH'", 
                     "'SYS_OP_COMP'", "'SYS_OP_CONVERT'", "'SYS_OP_COUNTCHG'", 
                     "'SYS_OP_CSCONV'", "'SYS_OP_CSCONVTEST'", "'SYS_OP_CSR'", 
                     "'SYS_OP_CSX_PATCH'", "'SYS_OP_CYCLED_SEQ'", "'SYS_OP_DECOMP'", 
                     "'SYS_OP_DESCEND'", "'SYS_OP_DISTINCT'", "'SYS_OP_DRA'", 
                     "'SYS_OP_DUMP'", "'SYS_OP_DV_CHECK'", "'SYS_OP_ENFORCE_NOT_NULL$'", 
                     "'SYSOPER'", "'SYS_OP_EXTRACT'", "'SYS_OP_GROUPING'", 
                     "'SYS_OP_GUID'", "'SYS_OP_HASH'", "'SYS_OP_IIX'", "'SYS_OP_ITR'", 
                     "'SYS_OP_KEY_VECTOR_CREATE'", "'SYS_OP_KEY_VECTOR_FILTER_LIST'", 
                     "'SYS_OP_KEY_VECTOR_FILTER'", "'SYS_OP_KEY_VECTOR_SUCCEEDED'", 
                     "'SYS_OP_KEY_VECTOR_USE'", "'SYS_OP_LBID'", "'SYS_OP_LOBLOC2BLOB'", 
                     "'SYS_OP_LOBLOC2CLOB'", "'SYS_OP_LOBLOC2ID'", "'SYS_OP_LOBLOC2NCLOB'", 
                     "'SYS_OP_LOBLOC2TYP'", "'SYS_OP_LSVI'", "'SYS_OP_LVL'", 
                     "'SYS_OP_MAKEOID'", "'SYS_OP_MAP_NONNULL'", "'SYS_OP_MSR'", 
                     "'SYS_OP_NICOMBINE'", "'SYS_OP_NIEXTRACT'", "'SYS_OP_NII'", 
                     "'SYS_OP_NIX'", "'SYS_OP_NOEXPAND'", "'SYS_OP_NTCIMG$'", 
                     "'SYS_OP_NUMTORAW'", "'SYS_OP_OIDVALUE'", "'SYS_OP_OPNSIZE'", 
                     "'SYS_OP_PAR_1'", "'SYS_OP_PARGID_1'", "'SYS_OP_PARGID'", 
                     "'SYS_OP_PAR'", "'SYS_OP_PART_ID'", "'SYS_OP_PIVOT'", 
                     "'SYS_OP_R2O'", "'SYS_OP_RAWTONUM'", "'SYS_OP_RDTM'", 
                     "'SYS_OP_REF'", "'SYS_OP_RMTD'", "'SYS_OP_ROWIDTOOBJ'", 
                     "'SYS_OP_RPB'", "'SYS_OPTLOBPRBSC'", "'SYS_OP_TOSETID'", 
                     "'SYS_OP_TPR'", "'SYS_OP_TRTB'", "'SYS_OPTXICMP'", 
                     "'SYS_OPTXQCASTASNQ'", "'SYS_OP_UNDESCEND'", "'SYS_OP_VECAND'", 
                     "'SYS_OP_VECBIT'", "'SYS_OP_VECOR'", "'SYS_OP_VECXOR'", 
                     "'SYS_OP_VERSION'", "'SYS_OP_VREF'", "'SYS_OP_VVD'", 
                     "'SYS_OP_XMLCONS_FOR_CSX'", "'SYS_OP_XPTHATG'", "'SYS_OP_XPTHIDX'", 
                     "'SYS_OP_XPTHOP'", "'SYS_OP_XTXT2SQLT'", "'SYS_OP_ZONE_ID'", 
                     "'SYS_ORDERKEY_DEPTH'", "'SYS_ORDERKEY_MAXCHILD'", 
                     "'SYS_ORDERKEY_PARENT'", "'SYS_PARALLEL_TXN'", "'SYS_PATHID_IS_ATTR'", 
                     "'SYS_PATHID_IS_NMSPC'", "'SYS_PATHID_LASTNAME'", "'SYS_PATHID_LASTNMSPC'", 
                     "'SYS_PATH_REVERSE'", "'SYS_PXQEXTRACT'", "'SYS_RAW_TO_XSID'", 
                     "'SYS_RID_ORDER'", "'SYS_ROW_DELTA'", "'SYS_SC_2_XMLT'", 
                     "'SYS_SYNRCIREDO'", "'SYSTEM_DEFINED'", "'SYSTEM'", 
                     "'SYSTIMESTAMP'", "'SYS_TYPEID'", "'SYS_UMAKEXML'", 
                     "'SYS_XMLANALYZE'", "'SYS_XMLCONTAINS'", "'SYS_XMLCONV'", 
                     "'SYS_XMLEXNSURI'", "'SYS_XMLGEN'", "'SYS_XMLI_LOC_ISNODE'", 
                     "'SYS_XMLI_LOC_ISTEXT'", "'SYS_XMLINSTR'", "'SYS_XMLLOCATOR_GETSVAL'", 
                     "'SYS_XMLNODEID_GETCID'", "'SYS_XMLNODEID_GETLOCATOR'", 
                     "'SYS_XMLNODEID_GETOKEY'", "'SYS_XMLNODEID_GETPATHID'", 
                     "'SYS_XMLNODEID_GETPTRID'", "'SYS_XMLNODEID_GETRID'", 
                     "'SYS_XMLNODEID_GETSVAL'", "'SYS_XMLNODEID_GETTID'", 
                     "'SYS_XMLNODEID'", "'SYS_XMLT_2_SC'", "'SYS_XMLTRANSLATE'", 
                     "'SYS_XMLTYPE2SQL'", "'SYS_XQ_ASQLCNV'", "'SYS_XQ_ATOMCNVCHK'", 
                     "'SYS_XQBASEURI'", "'SYS_XQCASTABLEERRH'", "'SYS_XQCODEP2STR'", 
                     "'SYS_XQCODEPEQ'", "'SYS_XQCON2SEQ'", "'SYS_XQCONCAT'", 
                     "'SYS_XQDELETE'", "'SYS_XQDFLTCOLATION'", "'SYS_XQDOC'", 
                     "'SYS_XQDOCURI'", "'SYS_XQDURDIV'", "'SYS_XQED4URI'", 
                     "'SYS_XQENDSWITH'", "'SYS_XQERRH'", "'SYS_XQERR'", 
                     "'SYS_XQESHTMLURI'", "'SYS_XQEXLOBVAL'", "'SYS_XQEXSTWRP'", 
                     "'SYS_XQEXTRACT'", "'SYS_XQEXTRREF'", "'SYS_XQEXVAL'", 
                     "'SYS_XQFB2STR'", "'SYS_XQFNBOOL'", "'SYS_XQFNCMP'", 
                     "'SYS_XQFNDATIM'", "'SYS_XQFNLNAME'", "'SYS_XQFNNM'", 
                     "'SYS_XQFNNSURI'", "'SYS_XQFNPREDTRUTH'", "'SYS_XQFNQNM'", 
                     "'SYS_XQFNROOT'", "'SYS_XQFORMATNUM'", "'SYS_XQFTCONTAIN'", 
                     "'SYS_XQFUNCR'", "'SYS_XQGETCONTENT'", "'SYS_XQINDXOF'", 
                     "'SYS_XQINSERT'", "'SYS_XQINSPFX'", "'SYS_XQIRI2URI'", 
                     "'SYS_XQLANG'", "'SYS_XQLLNMFRMQNM'", "'SYS_XQMKNODEREF'", 
                     "'SYS_XQNILLED'", "'SYS_XQNODENAME'", "'SYS_XQNORMSPACE'", 
                     "'SYS_XQNORMUCODE'", "'SYS_XQ_NRNG'", "'SYS_XQNSP4PFX'", 
                     "'SYS_XQNSPFRMQNM'", "'SYS_XQPFXFRMQNM'", "'SYS_XQ_PKSQL2XML'", 
                     "'SYS_XQPOLYABS'", "'SYS_XQPOLYADD'", "'SYS_XQPOLYCEL'", 
                     "'SYS_XQPOLYCSTBL'", "'SYS_XQPOLYCST'", "'SYS_XQPOLYDIV'", 
                     "'SYS_XQPOLYFLR'", "'SYS_XQPOLYMOD'", "'SYS_XQPOLYMUL'", 
                     "'SYS_XQPOLYRND'", "'SYS_XQPOLYSQRT'", "'SYS_XQPOLYSUB'", 
                     "'SYS_XQPOLYUMUS'", "'SYS_XQPOLYUPLS'", "'SYS_XQPOLYVEQ'", 
                     "'SYS_XQPOLYVGE'", "'SYS_XQPOLYVGT'", "'SYS_XQPOLYVLE'", 
                     "'SYS_XQPOLYVLT'", "'SYS_XQPOLYVNE'", "'SYS_XQREF2VAL'", 
                     "'SYS_XQRENAME'", "'SYS_XQREPLACE'", "'SYS_XQRESVURI'", 
                     "'SYS_XQRNDHALF2EVN'", "'SYS_XQRSLVQNM'", "'SYS_XQRYENVPGET'", 
                     "'SYS_XQRYVARGET'", "'SYS_XQRYWRP'", "'SYS_XQSEQ2CON4XC'", 
                     "'SYS_XQSEQ2CON'", "'SYS_XQSEQDEEPEQ'", "'SYS_XQSEQINSB'", 
                     "'SYS_XQSEQRM'", "'SYS_XQSEQRVS'", "'SYS_XQSEQSUB'", 
                     "'SYS_XQSEQTYPMATCH'", "'SYS_XQSTARTSWITH'", "'SYS_XQSTATBURI'", 
                     "'SYS_XQSTR2CODEP'", "'SYS_XQSTRJOIN'", "'SYS_XQSUBSTRAFT'", 
                     "'SYS_XQSUBSTRBEF'", "'SYS_XQTOKENIZE'", "'SYS_XQTREATAS'", 
                     "'SYS_XQ_UPKXML2SQL'", "'SYS_XQXFORM'", "'SYS_XSID_TO_RAW'", 
                     "'SYS_ZMAP_FILTER'", "'SYS_ZMAP_REFRESH'", "'T'", "'TABLE_LOOKUP_BY_NL'", 
                     "'TABLESPACE_NO'", "'TABLESPACE'", "'TABLES'", "'TABLE_STATS'", 
                     "'TABLE'", "'TABNO'", "'TAG'", "'TANH'", "'TAN'", "'TBL$OR$IDX$PART$NUM'", 
                     "'TEMPFILE'", "'TEMPLATE'", "'TEMPORARY'", "'TEMP_TABLE'", 
                     "'TEST'", "'TEXT'", "'THAN'", "'THEN'", "'THE'", "'THREAD'", 
                     "'THROUGH'", "'TIER'", "'TIES'", "'TIMEOUT'", "'TIMESTAMP_LTZ_UNCONSTRAINED'", 
                     "'TIMESTAMP'", "'TIMESTAMP_TZ_UNCONSTRAINED'", "'TIMESTAMP_UNCONSTRAINED'", 
                     "'TIMES'", "'TIME'", "'TIMEZONE'", "'TIMEZONE_ABBR'", 
                     "'TIMEZONE_HOUR'", "'TIMEZONE_MINUTE'", "'TIMEZONE_OFFSET'", 
                     "'TIMEZONE_REGION'", "'TIME_ZONE'", "'TIMING'", "'TIV_GB'", 
                     "'TIV_SSF'", "'TO_ACLID'", "'TO_BINARY_DOUBLE'", "'TO_BINARY_FLOAT'", 
                     "'TO_BLOB'", "'TO_CLOB'", "'TO_DSINTERVAL'", "'TO_LOB'", 
                     "'TO_MULTI_BYTE'", "'TO_NCHAR'", "'TO_NCLOB'", "'TO_NUMBER'", 
                     "'TOPLEVEL'", "'TO_SINGLE_BYTE'", "'TO_TIMESTAMP'", 
                     "'TO_TIMESTAMP_TZ'", "'TO_TIME'", "'TO_TIME_TZ'", "'TO'", 
                     "'TO_YMINTERVAL'", "'TRACE'", "'TRACING'", "'TRACKING'", 
                     "'TRAILING'", "'TRANSACTION'", "'TRANSFORM'", "'TRANSFORM_DISTINCT_AGG'", 
                     "'TRANSITIONAL'", "'TRANSITION'", "'TRANSLATE'", "'TRANSLATION'", 
                     "'TREAT'", "'TRIGGERS'", "'TRIGGER'", "'TRUE'", "'TRUNCATE'", 
                     "'TRUNC'", "'TRUSTED'", "'TRUST'", "'TUNING'", "'TX'", 
                     "'TYPES'", "'TYPE'", "'TZ_OFFSET'", "'UB2'", "'UBA'", 
                     "'UCS2'", "'UID'", "'UNARCHIVED'", "'UNBOUNDED'", "'UNBOUND'", 
                     "'UNCONDITIONAL'", "'UNDER'", "'UNDO'", "'UNDROP'", 
                     "'UNIFORM'", "'UNION'", "'UNIQUE'", "'UNISTR'", "'UNLIMITED'", 
                     "'UNLOAD'", "'UNLOCK'", "'UNMATCHED'", "'UNNEST_INNERJ_DISTINCT_VIEW'", 
                     "'UNNEST_NOSEMIJ_NODISTINCTVIEW'", "'UNNEST_SEMIJ_VIEW'", 
                     "'UNNEST'", "'UNPACKED'", "'UNPIVOT'", "'UNPLUG'", 
                     "'UNPROTECTED'", "'UNQUIESCE'", "'UNRECOVERABLE'", 
                     "'UNRESTRICTED'", "'UNSUBSCRIBE'", "'UNTIL'", "'UNUSABLE'", 
                     "'UNUSED'", "'UPDATABLE'", "'UPDATED'", "'UPDATE'", 
                     "'UPDATEXML'", "'UPD_INDEXES'", "'UPD_JOININDEX'", 
                     "'UPGRADE'", "'UPPER'", "'UPSERT'", "'UROWID'", "'USABLE'", 
                     "'USAGE'", "'USE_ANTI'", "'USE_CONCAT'", "'USE_CUBE'", 
                     "'USE_HASH_AGGREGATION'", "'USE_HASH_GBY_FOR_PUSHDOWN'", 
                     "'USE_HASH'", "'USE_HIDDEN_PARTITIONS'", "'USE_INVISIBLE_INDEXES'", 
                     "'USE_MERGE_CARTESIAN'", "'USE_MERGE'", "'USE_NL'", 
                     "'USE_NL_WITH_INDEX'", "'USE_PRIVATE_OUTLINES'", "'USER_DATA'", 
                     "'USER_DEFINED'", "'USERENV'", "'USERGROUP'", "'USER_RECYCLEBIN'", 
                     "'USERS'", "'USER_TABLESPACES'", "'USER'", "'USE_SEMI'", 
                     "'USE_STORED_OUTLINES'", "'USE_TTT_FOR_GSETS'", "'USE'", 
                     "'USE_VECTOR_AGGREGATION'", "'USE_WEAK_NAME_RESL'", 
                     "'USING_NO_EXPAND'", "'USING_NLS_COMP'", "'USING'", 
                     "'UTF16BE'", "'UTF16LE'", "'UTF32'", "'UTF8'", "'V1'", 
                     "'V2'", "'VALIDATE'", "'VALIDATE_CONVERSION'", "'VALIDATION'", 
                     "'VALID_TIME_END'", "'VALUES'", "'VALUE'", "'VARCHAR2'", 
                     "'VARCHAR'", "'VARIABLE'", "'VAR_POP'", "'VARRAYS'", 
                     "'VARRAY'", "'VAR_SAMP'", "'VARYING'", "'VECTOR_READ_TRACE'", 
                     "'VECTOR_READ'", "'VECTOR_TRANSFORM_DIMS'", "'VECTOR_TRANSFORM_FACT'", 
                     "'VECTOR_TRANSFORM'", "'VERIFIER'", "'VERIFY'", "'VERSIONING'", 
                     "'VERSIONS_ENDSCN'", "'VERSIONS_ENDTIME'", "'VERSIONS_OPERATION'", 
                     "'VERSIONS_STARTSCN'", "'VERSIONS_STARTTIME'", "'VERSIONS'", 
                     "'VERSIONS_XID'", "'VERSION'", "'VIEW'", "'VIOLATION'", 
                     "'VIRTUAL'", "'VISIBILITY'", "'VISIBLE'", "'VOLUME'", 
                     "'VSIZE'", "'WAIT'", "'WALLET'", "'WARNING'", "'WEEKS'", 
                     "'WEEK'", "'WELLFORMED'", "'WHENEVER'", "'WHEN'", "'WHERE'", 
                     "'WHILE'", "'WHITESPACE'", "'WIDTH_BUCKET'", "'WITHIN'", 
                     "'WITHOUT'", "'WITH_PLSQL'", "'WITH'", "'WORK'", "'WRAPPED'", 
                     "'WRAPPER'", "'WRITE'", "'XDB_FASTPATH_INSERT'", "'XDB'", 
                     "'X_DYN_PRUNE'", "'XID'", "'XML2OBJECT'", "'XMLAGG'", 
                     "'XMLATTRIBUTES'", "'XMLCAST'", "'XMLCDATA'", "'XMLCOLATTVAL'", 
                     "'XMLCOMMENT'", "'XMLCONCAT'", "'XMLDIFF'", "'XML_DML_RWT_STMT'", 
                     "'XMLELEMENT'", "'XMLEXISTS2'", "'XMLEXISTS'", "'XMLFOREST'", 
                     "'XMLINDEX'", "'XMLINDEX_REWRITE_IN_SELECT'", "'XMLINDEX_REWRITE'", 
                     "'XMLINDEX_SEL_IDX_TBL'", "'XMLISNODE'", "'XMLISVALID'", 
                     "'XMLNAMESPACES'", "'XMLPARSE'", "'XMLPATCH'", "'XMLPI'", 
                     "'XMLQUERYVAL'", "'XMLQUERY'", "'XMLROOT'", "'XMLSCHEMA'", 
                     "'XMLSERIALIZE'", "'XMLTABLE'", "'XMLTRANSFORMBLOB'", 
                     "'XMLTRANSFORM'", "'XMLTYPE'", "'XML'", "'XPATHTABLE'", 
                     "'XS_SYS_CONTEXT'", "'XS'", "'XTRANSPORT'", "'YEARS'", 
                     "'YEAR'", "'YES'", "'YMINTERVAL_UNCONSTRAINED'", "'ZONEMAP'", 
                     "'ZONE'", "'PREDICTION'", "'PREDICTION_BOUNDS'", "'PREDICTION_COST'", 
                     "'PREDICTION_DETAILS'", "'PREDICTION_PROBABILITY'", 
                     "'PREDICTION_SET'", "'BLOCKCHAIN'", "'COLLATE'", "'COLLATION'", 
                     "'DEFINITION'", "'DUPLICATED'", "'EXTENDED'", "'HASHING'", 
                     "'IDLE'", "'IMMUTABLE'", "'ORACLE_DATAPUMP'", "'ORACLE_HDFS'", 
                     "'ORACLE_HIVE'", "'ORACLE_LOADER'", "'\"SHA2_512\"'", 
                     "'SHARDED'", "'\"V1\"'", "'ISOLATE'", "'ROOT'", "'UNITE'", 
                     "'ALGORITHM'", "'CUME_DIST'", "'DENSE_RANK'", "'LISTAGG'", 
                     "'PERCENT_RANK'", "'PERCENTILE_CONT'", "'PERCENTILE_DISC'", 
                     "'RANK'", "'AVG'", "'CORR'", "'COVAR_'", "'DECODE'", 
                     "'LAG'", "'LAG_DIFF'", "'LAG_DIFF_PERCENT'", "'LEAD'", 
                     "'MAX'", "'MEDIAN'", "'MEMOPTIMIZE'", "'MIN'", "'NTILE'", 
                     "'NVL'", "'RATIO_TO_REPORT'", "'REGR_'", "'ROUND'", 
                     "'ROW_NUMBER'", "'SUBSTR'", "'TO_CHAR'", "'TRIM'", 
                     "'SUM'", "'STDDEV'", "'VAR_'", "'VARIANCE'", "'LEAST'", 
                     "'GREATEST'", "'TO_DATE'", "'CHARSETID'", "'CHARSETFORM'", 
                     "'DURATION'", "'EXTEND'", "'MAXLEN'", "'PERSISTABLE'", 
                     "'POLYMORPHIC'", "'STRUCT'", "'TDO'", "'WM_CONCAT'", 
                     "<INVALID>", "<INVALID>", "<INVALID>", "'..'", "'.'", 
                     "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", 
                     "'%'", "'&'", "'('", "')'", "'**'", "'*'", "'+'", "'-'", 
                     "','", "'/'", "'@'", "':='", "'#'", "'''", "<INVALID>", 
                     "<INVALID>", "'^'", "'~'", "'!'", "'>'", "'<'", "':'", 
                     "';'", "'|'", "'='", "'['", "']'", "'_'" ]

    symbolicNames = [ "<INVALID>", "ABORT", "ABS", "ABSENT", "ACCESS", "ACCESSED", 
                      "ACCESSIBLE", "ACCOUNT", "ACL", "ACOS", "ACROSS", 
                      "ACTION", "ACTIONS", "ACTIVATE", "ACTIVE", "ACTIVE_COMPONENT", 
                      "ACTIVE_DATA", "ACTIVE_FUNCTION", "ACTIVE_TAG", "ACTIVITY", 
                      "ADAPTIVE_PLAN", "ADD", "ADD_COLUMN", "ADD_GROUP", 
                      "ADD_MONTHS", "ADJ_DATE", "ADMIN", "ADMINISTER", "ADMINISTRATOR", 
                      "ADVANCED", "ADVISE", "ADVISOR", "AFD_DISKSTRING", 
                      "AFTER", "AGENT", "AGGREGATE", "A_LETTER", "ALIAS", 
                      "ALL", "ALLOCATE", "ALLOW", "ALL_ROWS", "ALTER", "ALTERNATE", 
                      "ALWAYS", "ANALYTIC", "ANALYZE", "ANCESTOR", "ANCILLARY", 
                      "AND", "AND_EQUAL", "ANOMALY", "ANSI_REARCH", "ANTIJOIN", 
                      "ANY", "ANYSCHEMA", "APPEND", "APPENDCHILDXML", "APPEND_VALUES", 
                      "APPLICATION", "APPLY", "APPROX_COUNT_DISTINCT", "ARCHIVAL", 
                      "ARCHIVE", "ARCHIVED", "ARCHIVELOG", "ARRAY", "AS", 
                      "ASC", "ASCII", "ASCIISTR", "ASIN", "ASIS", "ASSEMBLY", 
                      "ASSIGN", "ASSOCIATE", "ASYNC", "ASYNCHRONOUS", "ATAN2", 
                      "ATAN", "AT", "ATTRIBUTE", "ATTRIBUTES", "AUDIT", 
                      "AUTHENTICATED", "AUTHENTICATION", "AUTHID", "AUTHORIZATION", 
                      "AUTOALLOCATE", "AUTO", "AUTOBACKUP", "AUTOEXTEND", 
                      "AUTO_LOGIN", "AUTOMATIC", "AUTONOMOUS_TRANSACTION", 
                      "AUTO_REOPTIMIZE", "AVAILABILITY", "AVRO", "BACKGROUND", 
                      "BACKINGFILE", "BACKUP", "BACKUPS", "BACKUPSET", "BASIC", 
                      "BASICFILE", "BATCH", "BATCHSIZE", "BATCH_TABLE_ACCESS_BY_ROWID", 
                      "BECOME", "BEFORE", "BEGIN", "BEGINNING", "BEGIN_OUTLINE_DATA", 
                      "BEHALF", "BEQUEATH", "BETWEEN", "BFILE", "BFILENAME", 
                      "BIGFILE", "BINARY", "BINARY_DOUBLE", "BINARY_DOUBLE_INFINITY", 
                      "BINARY_DOUBLE_NAN", "BINARY_FLOAT", "BINARY_FLOAT_INFINITY", 
                      "BINARY_FLOAT_NAN", "BINARY_INTEGER", "BIND_AWARE", 
                      "BINDING", "BIN_TO_NUM", "BITAND", "BITMAP_AND", "BITMAP", 
                      "BITMAPS", "BITMAP_TREE", "BITS", "BLOB", "BLOCK", 
                      "BLOCK_RANGE", "BLOCKS", "BLOCKSIZE", "BODY", "BOOLEAN", 
                      "BOTH", "BOUND", "BRANCH", "BREADTH", "BROADCAST", 
                      "BSON", "BUFFER", "BUFFER_CACHE", "BUFFER_POOL", "BUILD", 
                      "BULK", "BY", "BYPASS_RECURSIVE_CHECK", "BYPASS_UJVC", 
                      "BYTE", "CACHE", "CACHE_CB", "CACHE_INSTANCES", "CACHE_TEMP_TABLE", 
                      "CACHING", "CALCULATED", "CALLBACK", "CALL", "CANCEL", 
                      "CANONICAL", "CAPACITY", "CAPTION", "CARDINALITY", 
                      "CASCADE", "CASE", "CAST", "CASESENSITIVE", "CATEGORY", 
                      "CDBDEFAULT", "CEIL", "CELL_FLASH_CACHE", "CERTIFICATE", 
                      "CFILE", "CHAINED", "CHANGE", "CHANGETRACKING", "CHANGE_DUPKEY_ERROR_INDEX", 
                      "CHARACTER", "CHAR", "CHAR_CS", "CHARTOROWID", "CHECK_ACL_REWRITE", 
                      "CHECK", "CHECKPOINT", "CHILD", "CHOOSE", "CHR", "CHUNK", 
                      "CLASS", "CLASSIFICATION", "CLASSIFIER", "CLAUSE", 
                      "CLEAN", "CLEANUP", "CLEAR", "C_LETTER", "CLIENT", 
                      "CLOB", "CLONE", "CLOSE_CACHED_OPEN_CURSORS", "CLOSE", 
                      "CLUSTER_BY_ROWID", "CLUSTER", "CLUSTER_DETAILS", 
                      "CLUSTER_DISTANCE", "CLUSTER_ID", "CLUSTERING", "CLUSTERING_FACTOR", 
                      "CLUSTER_PROBABILITY", "CLUSTER_SET", "COALESCE", 
                      "COALESCE_SQ", "COARSE", "CO_AUTH_IND", "COLD", "COLLECT", 
                      "COLUMNAR", "COLUMN_AUTH_INDICATOR", "COLUMN", "COLUMNS", 
                      "COLUMN_STATS", "COLUMN_VALUE", "COMMENT", "COMMIT", 
                      "COMMITTED", "COMMON", "COMMON_DATA", "COMPACT", "COMPATIBILITY", 
                      "COMPILE", "COMPLETE", "COMPLIANCE", "COMPONENT", 
                      "COMPONENTS", "COMPOSE", "COMPOSITE", "COMPOSITE_LIMIT", 
                      "COMPOUND", "COMPRESS", "COMPUTE", "CONCAT", "CON_DBID_TO_ID", 
                      "CONDITIONAL", "CONDITION", "CONFIRM", "CONFORMING", 
                      "CON_GUID_TO_ID", "CON_ID", "CON_NAME_TO_ID", "CONNECT_BY_CB_WHR_ONLY", 
                      "CONNECT_BY_COMBINE_SW", "CONNECT_BY_COST_BASED", 
                      "CONNECT_BY_ELIM_DUPS", "CONNECT_BY_FILTERING", "CONNECT_BY_ISCYCLE", 
                      "CONNECT_BY_ISLEAF", "CONNECT_BY_ROOT", "CONNECT", 
                      "CONNECT_TIME", "CONSIDER", "CONSISTENT", "CONSTANT", 
                      "CONST", "CONSTRAINT", "CONSTRAINTS", "CONSTRUCTOR", 
                      "CONTAINER", "CONTAINERS", "CONTAINERS_DEFAULT", "CONTAINER_DATA", 
                      "CONTAINER_MAP", "CONTENT", "CONTENTS", "CONTEXT", 
                      "CONTINUE", "CONTROLFILE", "CON_UID_TO_ID", "CONVERT", 
                      "CONVERSION", "COOKIE", "COPY", "CORR_K", "CORR_S", 
                      "CORRUPTION", "CORRUPT_XID_ALL", "CORRUPT_XID", "COS", 
                      "COSH", "COST", "COST_XML_QUERY_REWRITE", "COUNT", 
                      "COVAR_POP", "COVAR_SAMP", "CPU_COSTING", "CPU_PER_CALL", 
                      "CPU_PER_SESSION", "CRASH", "CREATE", "CREATE_FILE_DEST", 
                      "CREATE_STORED_OUTLINES", "CREATION", "CREDENTIAL", 
                      "CRITICAL", "CROSS", "CROSSEDITION", "CSCONVERT", 
                      "CUBE_AJ", "CUBE", "CUBE_GB", "CUBE_SJ", "CUME_DISTM", 
                      "CURRENT", "CURRENT_DATE", "CURRENT_SCHEMA", "CURRENT_TIME", 
                      "CURRENT_TIMESTAMP", "CURRENT_USER", "CURRENTV", "CURSOR", 
                      "CURSOR_SHARING_EXACT", "CURSOR_SPECIFIC_SEGMENT", 
                      "CUSTOMDATUM", "CV", "CYCLE", "DANGLING", "DATABASE", 
                      "DATA", "DATAFILE", "DATAFILES", "DATAGUARDCONFIG", 
                      "DATAMOVEMENT", "DATAOBJNO", "DATAOBJ_TO_MAT_PARTITION", 
                      "DATAOBJ_TO_PARTITION", "DATAPUMP", "DATA_SECURITY_REWRITE_LIMIT", 
                      "DATE", "DATE_MODE", "DAY", "DAYS", "DBA", "DBA_RECYCLEBIN", 
                      "DBMS_STATS", "DB_ROLE_CHANGE", "DBTIMEZONE", "DB_UNIQUE_NAME", 
                      "DB_VERSION", "DDL", "DEALLOCATE", "DEBUG", "DEBUGGER", 
                      "DEC", "DECIMAL", "DECLARE", "DECOMPOSE", "DECORRELATE", 
                      "DECR", "DECREMENT", "DECRYPT", "DEDUPLICATE", "DEFAULT", 
                      "DEFAULTS", "DEFAULT_COLLATION", "DEFAULT_CREDENTIAL", 
                      "DEFERRABLE", "DEFERRED", "DEFINED", "DEFINE", "DEFINER", 
                      "DEGREE", "DELAY", "DELEGATE", "DELETE_ALL", "DELETE", 
                      "DELETEXML", "DEMAND", "DENSE_RANKM", "DEPENDENT", 
                      "DEPRECATE", "DEPTH", "DEQUEUE", "DEREF", "DEREF_NO_REWRITE", 
                      "DESC", "DESCRIPTION", "DESTROY", "DETACHED", "DETERMINES", 
                      "DETERMINISTIC", "DICTIONARY", "DIMENSION", "DIMENSIONS", 
                      "DIRECT_LOAD", "DIRECTORY", "DIRECT_PATH", "DISABLE_ALL", 
                      "DISABLE", "DISABLE_PARALLEL_DML", "DISABLE_PRESET", 
                      "DISABLE_RPKE", "DISALLOW", "DISASSOCIATE", "DISCARD", 
                      "DISCONNECT", "DISK", "DISKGROUP", "DISKGROUP_PLUS", 
                      "DISKS", "DISMOUNT", "DISTINCT", "DISTINGUISHED", 
                      "DISTRIBUTED", "DISTRIBUTE", "DML", "DML_UPDATE", 
                      "DOCFIDELITY", "DOCUMENT", "DOLLAR_ELSE", "DOLLAR_ELSIF", 
                      "DOLLAR_END", "DOLLAR_ERROR", "DOLLAR_IF", "DOLLAR_THEN", 
                      "DOMAIN_INDEX_FILTER", "DOMAIN_INDEX_NO_SORT", "DOMAIN_INDEX_SORT", 
                      "DOUBLE", "DOWNGRADE", "DRIVING_SITE", "DROP_COLUMN", 
                      "DROP", "DROP_GROUP", "DSINTERVAL_UNCONSTRAINED", 
                      "DST_UPGRADE_INSERT_CONV", "DUMP", "DUMPSET", "DUPLICATE", 
                      "DV", "DYNAMIC", "DYNAMIC_SAMPLING", "DYNAMIC_SAMPLING_EST_CDN", 
                      "E_LETTER", "EACH", "EDITIONABLE", "EDITION", "EDITIONING", 
                      "EDITIONS", "ELEMENT", "ELIM_GROUPBY", "ELIMINATE_JOIN", 
                      "ELIMINATE_OBY", "ELIMINATE_OUTER_JOIN", "ELSE", "ELSIF", 
                      "EM", "EMPTY_BLOB", "EMPTY_CLOB", "EMPTY_", "ENABLE_ALL", 
                      "ENABLE", "ENABLE_PARALLEL_DML", "ENABLE_PRESET", 
                      "ENCODING", "ENCRYPT", "ENCRYPTION", "END", "END_OUTLINE_DATA", 
                      "ENFORCED", "ENFORCE", "ENQUEUE", "ENTERPRISE", "ENTITYESCAPING", 
                      "ENTRY", "EQUIPART", "ERR", "ERROR_ARGUMENT", "ERROR", 
                      "ERROR_ON_OVERLAP_TIME", "ERRORS", "ERROR_INDEX", 
                      "ERROR_CODE", "ESCAPE", "ESTIMATE", "EVAL", "EVALNAME", 
                      "EVALUATE", "EVALUATION", "EVENTS", "EVERY", "EXCEPT", 
                      "EXCEPTION", "EXCEPTION_INIT", "EXCEPTIONS", "EXCHANGE", 
                      "EXCLUDE", "EXCLUDING", "EXCLUSIVE", "EXECUTE", "EXEMPT", 
                      "EXISTING", "EXISTS", "EXISTSNODE", "EXIT", "EXPAND_GSET_TO_UNION", 
                      "EXPAND_TABLE", "EXP", "EXPIRE", "EXPLAIN", "EXPLOSION", 
                      "EXPORT", "EXPR_CORR_CHECK", "EXPRESS", "EXTENDS", 
                      "EXTENT", "EXTENTS", "EXTERNAL", "EXTERNALLY", "EXTRACTCLOBXML", 
                      "EXTRACT", "EXTRACTVALUE", "EXTRA", "FACILITY", "FACT", 
                      "FACTOR", "FACTORIZE_JOIN", "FAILED", "FAILED_LOGIN_ATTEMPTS", 
                      "FAILGROUP", "FAILOVER", "FAILURE", "FALSE", "FAMILY", 
                      "FAR", "FAST", "FASTSTART", "FBTSCAN", "FEATURE", 
                      "FEATURE_DETAILS", "FEATURE_ID", "FEATURE_SET", "FEATURE_VALUE", 
                      "FETCH", "FILE", "FILE_NAME_CONVERT", "FILEGROUP", 
                      "FILESTORE", "FILESYSTEM_LIKE_LOGGING", "FILTER", 
                      "FINAL", "FINE", "FINISH", "FIRST", "FIRSTM", "FIRST_ROWS", 
                      "FIRST_VALUE", "FIXED_VIEW_DATA", "FLAGGER", "FLASHBACK", 
                      "FLASH_CACHE", "FLOAT", "FLOB", "FLEX", "FLOOR", "FLUSH", 
                      "FOLDER", "FOLLOWING", "FOLLOWS", "FORALL", "FORCE", 
                      "FORCE_XML_QUERY_REWRITE", "FOREIGN", "FOREVER", "FOR", 
                      "FORMAT", "FORWARD", "FRAGMENT_NUMBER", "FREELIST", 
                      "FREELISTS", "FREEPOOLS", "FRESH", "FROM", "FROM_TZ", 
                      "FULL", "FULL_OUTER_JOIN_TO_OUTER", "FUNCTION", "FUNCTIONS", 
                      "FTP", "G_LETTER", "GATHER_OPTIMIZER_STATISTICS", 
                      "GATHER_PLAN_STATISTICS", "GBY_CONC_ROLLUP", "GBY_PUSHDOWN", 
                      "GENERATED", "GET", "GLOBAL", "GLOBALLY", "GLOBAL_NAME", 
                      "GLOBAL_TOPIC_ENABLED", "GOTO", "GRANT", "GROUP_BY", 
                      "GROUP", "GROUP_ID", "GROUPING", "GROUPING_ID", "GROUPS", 
                      "GUARANTEED", "GUARANTEE", "GUARD", "HALF_YEARS", 
                      "HASH_AJ", "HASH", "HASHKEYS", "HASH_SJ", "HAVING", 
                      "HEADER", "HEAP", "HELP", "HEXTORAW", "HEXTOREF", 
                      "HIDDEN_KEYWORD", "HIDE", "HIER_ORDER", "HIERARCHICAL", 
                      "HIERARCHIES", "HIERARCHY", "HIGH", "HINTSET_BEGIN", 
                      "HINTSET_END", "HOT", "HOUR", "HOURS", "HTTP", "HWM_BROKERED", 
                      "HYBRID", "H_LETTER", "IDENTIFIED", "IDENTIFIER", 
                      "IDENTITY", "IDGENERATORS", "ID", "IDLE_TIME", "IF", 
                      "IGNORE", "IGNORE_OPTIM_EMBEDDED_HINTS", "IGNORE_ROW_ON_DUPKEY_INDEX", 
                      "IGNORE_WHERE_CLAUSE", "ILM", "IMMEDIATE", "IMPACT", 
                      "IMPORT", "INACTIVE", "INACTIVE_ACCOUNT_TIME", "INCLUDE", 
                      "INCLUDE_VERSION", "INCLUDING", "INCREMENTAL", "INCREMENT", 
                      "INCR", "INDENT", "INDEX_ASC", "INDEX_COMBINE", "INDEX_DESC", 
                      "INDEXED", "INDEXES", "INDEX_FFS", "INDEX_FILTER", 
                      "INDEX", "INDEXING", "INDEX_JOIN", "INDEX_ROWS", "INDEX_RRS", 
                      "INDEX_RS_ASC", "INDEX_RS_DESC", "INDEX_RS", "INDEX_SCAN", 
                      "INDEX_SKIP_SCAN", "INDEX_SS_ASC", "INDEX_SS_DESC", 
                      "INDEX_SS", "INDEX_STATS", "INDEXTYPE", "INDEXTYPES", 
                      "INDICATOR", "INDICES", "INFINITE", "INFORMATIONAL", 
                      "INHERIT", "IN", "INITCAP", "INITIAL", "INITIALIZED", 
                      "INITIALLY", "INITRANS", "INLINE", "INLINE_XMLTYPE_NT", 
                      "INMEMORY", "IN_MEMORY_METADATA", "INMEMORY_PRUNING", 
                      "INNER", "INOUT", "INPLACE", "INSERTCHILDXMLAFTER", 
                      "INSERTCHILDXMLBEFORE", "INSERTCHILDXML", "INSERT", 
                      "INSERTXMLAFTER", "INSERTXMLBEFORE", "INSTANCE", "INSTANCES", 
                      "INSTANTIABLE", "INSTANTLY", "INSTEAD", "INSTR2", 
                      "INSTR4", "INSTRB", "INSTRC", "INSTR", "INTEGER", 
                      "INTERLEAVED", "INTERMEDIATE", "INTERNAL_CONVERT", 
                      "INTERNAL_USE", "INTERPRETED", "INTERSECT", "INTERVAL", 
                      "INT", "INTO", "INVALIDATE", "INVALIDATION", "INVISIBLE", 
                      "IN_XQUERY", "IS", "IS_LEAF", "ISOLATION", "ISOLATION_LEVEL", 
                      "ITERATE", "ITERATION_NUMBER", "JAVA", "JOB", "JOIN", 
                      "JSON_ARRAYAGG", "JSON_ARRAY", "JSON_EQUAL", "JSON_EXISTS2", 
                      "JSON_EXISTS", "JSONGET", "JSON", "JSON_OBJECTAGG", 
                      "JSON_OBJECT", "JSONPARSE", "JSON_QUERY", "JSON_SERIALIZE", 
                      "JSON_TABLE", "JSON_TEXTCONTAINS2", "JSON_TEXTCONTAINS", 
                      "JSON_TRANSFORM", "JSON_VALUE", "K_LETTER", "KEEP_DUPLICATES", 
                      "KEEP", "KERBEROS", "KEY", "KEY_LENGTH", "KEYSIZE", 
                      "KEYS", "KEYSTORE", "KILL", "LABEL", "LANGUAGE", "LAST_DAY", 
                      "LAST", "LAST_VALUE", "LATERAL", "LAX", "LAYER", "LDAP_REGISTRATION_ENABLED", 
                      "LDAP_REGISTRATION", "LDAP_REG_SYNC_INTERVAL", "LEAF", 
                      "LEAD_CDB", "LEAD_CDB_URI", "LEADING", "LEFT", "LENGTH2", 
                      "LENGTH4", "LENGTHB", "LENGTHC", "LENGTH", "LESS", 
                      "LEVEL", "LEVEL_NAME", "LEVELS", "LIBRARY", "LIFECYCLE", 
                      "LIFE", "LIFETIME", "LIKE2", "LIKE4", "LIKEC", "LIKE_EXPAND", 
                      "LIKE", "LIMIT", "LINEAR", "LINK", "LIST", "LN", "LNNVL", 
                      "LOAD", "LOB", "LOBNVL", "LOBS", "LOCAL_INDEXES", 
                      "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", "LOCATION", 
                      "LOCATOR", "LOCKDOWN", "LOCKED", "LOCKING", "LOCK", 
                      "LOGFILE", "LOGFILES", "LOGGING", "LOGICAL", "LOGICAL_READS_PER_CALL", 
                      "LOGICAL_READS_PER_SESSION", "LOG", "LOGMINING", "LOGOFF", 
                      "LOGON", "LOG_READ_ONLY_VIOLATIONS", "LONG", "LOOP", 
                      "LOST", "LOWER", "LOW", "LPAD", "LTRIM", "M_LETTER", 
                      "MAIN", "MAKE_REF", "MANAGED", "MANAGE", "MANAGEMENT", 
                      "MANAGER", "MANDATORY", "MANUAL", "MAP", "MAPPING", 
                      "MASTER", "MATCHED", "MATCHES", "MATCH", "MATCH_NUMBER", 
                      "MATCH_RECOGNIZE", "MATERIALIZED", "MATERIALIZE", 
                      "MAXARCHLOGS", "MAXDATAFILES", "MAXEXTENTS", "MAXIMIZE", 
                      "MAXINSTANCES", "MAXLOGFILES", "MAXLOGHISTORY", "MAXLOGMEMBERS", 
                      "MAX_SHARED_TEMP_SIZE", "MAXSIZE", "MAXTRANS", "MAXVALUE", 
                      "MEASURE", "MEASURES", "MEDIUM", "MEMBER", "MEMBER_CAPTION", 
                      "MEMBER_DESCRIPTION", "MEMBER_NAME", "MEMBER_UNIQUE_NAME", 
                      "MEMCOMPRESS", "MEMORY", "MERGEACTIONS", "MERGE_AJ", 
                      "MERGE_CONST_ON", "MERGE", "MERGE_SJ", "METADATA", 
                      "METHOD", "MIGRATE", "MIGRATION", "MINEXTENTS", "MINIMIZE", 
                      "MINIMUM", "MINING", "MINUS", "MINUS_NULL", "MINUTE", 
                      "MINUTES", "MINVALUE", "MIRRORCOLD", "MIRRORHOT", 
                      "MIRROR", "MISSING", "MISMATCH", "MLSLABEL", "MODEL_COMPILE_SUBQUERY", 
                      "MODEL_DONTVERIFY_UNIQUENESS", "MODEL_DYNAMIC_SUBQUERY", 
                      "MODEL_MIN_ANALYSIS", "MODEL", "MODEL_NB", "MODEL_NO_ANALYSIS", 
                      "MODEL_PBY", "MODEL_PUSH_REF", "MODEL_SV", "MODE", 
                      "MODIFICATION", "MODIFY_COLUMN_TYPE", "MODIFY", "MOD", 
                      "MODULE", "MONITORING", "MONITOR", "MONTH", "MONTHS_BETWEEN", 
                      "MONTHS", "MOUNT", "MOUNTPATH", "MOUNTPOINT", "MOVEMENT", 
                      "MOVE", "MULTIDIMENSIONAL", "MULTISET", "MV_MERGE", 
                      "NAMED", "NAME", "NAMESPACE", "NAN", "NANVL", "NATIONAL", 
                      "NATIVE_FULL_OUTER_JOIN", "NATIVE", "NATURAL", "NATURALN", 
                      "NAV", "NCHAR_CS", "NCHAR", "NCHR", "NCLOB", "NEEDED", 
                      "NEG", "NESTED", "NESTED_TABLE_FAST_INSERT", "NESTED_TABLE_GET_REFS", 
                      "NESTED_TABLE_ID", "NESTED_TABLE_SET_REFS", "NESTED_TABLE_SET_SETID", 
                      "NETWORK", "NEVER", "NEW", "NEW_TIME", "NEXT_DAY", 
                      "NEXT", "NL_AJ", "NLJ_BATCHING", "NLJ_INDEX_FILTER", 
                      "NLJ_INDEX_SCAN", "NLJ_PREFETCH", "NLS_CALENDAR", 
                      "NLS_CHARACTERSET", "NLS_CHARSET_DECL_LEN", "NLS_CHARSET_ID", 
                      "NLS_CHARSET_NAME", "NLS_COMP", "NLS_CURRENCY", "NLS_DATE_FORMAT", 
                      "NLS_DATE_LANGUAGE", "NLS_INITCAP", "NLS_ISO_CURRENCY", 
                      "NL_SJ", "NLS_LANG", "NLS_LANGUAGE", "NLS_LENGTH_SEMANTICS", 
                      "NLS_LOWER", "NLS_NCHAR_CONV_EXCP", "NLS_NUMERIC_CHARACTERS", 
                      "NLS_SORT", "NLSSORT", "NLS_SPECIAL_CHARS", "NLS_TERRITORY", 
                      "NLS_UPPER", "NO_ACCESS", "NO_ADAPTIVE_PLAN", "NO_ANSI_REARCH", 
                      "NOAPPEND", "NOARCHIVELOG", "NOAUDIT", "NO_AUTO_REOPTIMIZE", 
                      "NO_BASETABLE_MULTIMV_REWRITE", "NO_BATCH_TABLE_ACCESS_BY_ROWID", 
                      "NO_BIND_AWARE", "NO_BUFFER", "NOCACHE", "NO_CARTESIAN", 
                      "NO_CHECK_ACL_REWRITE", "NO_CLUSTER_BY_ROWID", "NO_CLUSTERING", 
                      "NO_COALESCE_SQ", "NO_COMMON_DATA", "NOCOMPRESS", 
                      "NO_CONNECT_BY_CB_WHR_ONLY", "NO_CONNECT_BY_COMBINE_SW", 
                      "NO_CONNECT_BY_COST_BASED", "NO_CONNECT_BY_ELIM_DUPS", 
                      "NO_CONNECT_BY_FILTERING", "NOCOPY", "NO_COST_XML_QUERY_REWRITE", 
                      "NO_CPU_COSTING", "NOCPU_COSTING", "NOCYCLE", "NO_DATA_SECURITY_REWRITE", 
                      "NO_DECORRELATE", "NODELAY", "NO_DOMAIN_INDEX_FILTER", 
                      "NO_DST_UPGRADE_INSERT_CONV", "NO_ELIM_GROUPBY", "NO_ELIMINATE_JOIN", 
                      "NO_ELIMINATE_OBY", "NO_ELIMINATE_OUTER_JOIN", "NOENTITYESCAPING", 
                      "NO_EXPAND_GSET_TO_UNION", "NO_EXPAND", "NO_EXPAND_TABLE", 
                      "NO_FACT", "NO_FACTORIZE_JOIN", "NO_FILTERING", "NOFORCE", 
                      "NO_FULL_OUTER_JOIN_TO_OUTER", "NO_GATHER_OPTIMIZER_STATISTICS", 
                      "NO_GBY_PUSHDOWN", "NOGUARANTEE", "NO_INDEX_FFS", 
                      "NO_INDEX", "NO_INDEX_SS", "NO_INMEMORY", "NO_INMEMORY_PRUNING", 
                      "NOKEEP", "NO_LOAD", "NOLOCAL", "NOLOGGING", "NOMAPPING", 
                      "NOMAXVALUE", "NO_MERGE", "NOMINIMIZE", "NOMINVALUE", 
                      "NO_MODEL_PUSH_REF", "NO_MONITORING", "NOMONITORING", 
                      "NO_MONITOR", "NO_MULTIMV_REWRITE", "NO_NATIVE_FULL_OUTER_JOIN", 
                      "NONBLOCKING", "NONEDITIONABLE", "NONE", "NO_NLJ_BATCHING", 
                      "NO_NLJ_PREFETCH", "NO", "NONSCHEMA", "NO_OBJECT_LINK", 
                      "NOORDER", "NO_ORDER_ROLLUPS", "NO_OUTER_JOIN_TO_ANTI", 
                      "NO_OUTER_JOIN_TO_INNER", "NOOVERRIDE", "NO_PARALLEL_INDEX", 
                      "NOPARALLEL_INDEX", "NO_PARALLEL", "NOPARALLEL", "NO_PARTIAL_COMMIT", 
                      "NO_PARTIAL_JOIN", "NO_PARTIAL_ROLLUP_PUSHDOWN", "NOPARTITION", 
                      "NO_PLACE_DISTINCT", "NO_PLACE_GROUP_BY", "NO_PQ_CONCURRENT_UNION", 
                      "NO_PQ_MAP", "NOPROMPT", "NO_PQ_REPLICATE", "NO_PQ_SKEW", 
                      "NO_PRUNE_GSETS", "NO_PULL_PRED", "NO_PUSH_PRED", 
                      "NO_PUSH_SUBQ", "NO_PX_FAULT_TOLERANCE", "NO_PX_JOIN_FILTER", 
                      "NO_QKN_BUFF", "NO_QUERY_TRANSFORMATION", "NO_REF_CASCADE", 
                      "NORELOCATE", "NORELY", "NOREPAIR", "NOREPLAY", "NORESETLOGS", 
                      "NO_RESULT_CACHE", "NOREVERSE", "NO_REWRITE", "NOREWRITE", 
                      "NORMAL", "NO_ROOT_SW_FOR_LOCAL", "NOROWDEPENDENCIES", 
                      "NOSCHEMACHECK", "NOSEGMENT", "NO_SEMIJOIN", "NO_SEMI_TO_INNER", 
                      "NO_SET_TO_JOIN", "NOSORT", "NO_SQL_TRANSLATION", 
                      "NO_SQL_TUNE", "NO_STAR_TRANSFORMATION", "NO_STATEMENT_QUEUING", 
                      "NO_STATS_GSETS", "NOSTRICT", "NO_SUBQUERY_PRUNING", 
                      "NO_SUBSTRB_PAD", "NO_SWAP_JOIN_INPUTS", "NOSWITCH", 
                      "NO_TABLE_LOOKUP_BY_NL", "NO_TEMP_TABLE", "NOTHING", 
                      "NOTIFICATION", "NOT", "NO_TRANSFORM_DISTINCT_AGG", 
                      "NO_UNNEST", "NO_USE_CUBE", "NO_USE_HASH_AGGREGATION", 
                      "NO_USE_HASH_GBY_FOR_PUSHDOWN", "NO_USE_HASH", "NO_USE_INVISIBLE_INDEXES", 
                      "NO_USE_MERGE", "NO_USE_NL", "NO_USE_VECTOR_AGGREGATION", 
                      "NOVALIDATE", "NO_VECTOR_TRANSFORM_DIMS", "NO_VECTOR_TRANSFORM_FACT", 
                      "NO_VECTOR_TRANSFORM", "NOWAIT", "NO_XDB_FASTPATH_INSERT", 
                      "NO_XML_DML_REWRITE", "NO_XMLINDEX_REWRITE_IN_SELECT", 
                      "NO_XMLINDEX_REWRITE", "NO_XML_QUERY_REWRITE", "NO_ZONEMAP", 
                      "NTH_VALUE", "NULLIF", "NULL_", "NULLS", "NUMBER", 
                      "NUMERIC", "NUM_INDEX_KEYS", "NUMTODSINTERVAL", "NUMTOYMINTERVAL", 
                      "NVARCHAR2", "NVL2", "OBJECT2XML", "OBJECT", "OBJ_ID", 
                      "OBJNO", "OBJNO_REUSE", "OCCURENCES", "OFFLINE", "OFF", 
                      "OFFSET", "OF", "OIDINDEX", "OID", "OLAP", "OLD", 
                      "OLD_PUSH_PRED", "OLS", "OLTP", "OMIT", "ONE", "ONLINE", 
                      "ONLINELOG", "ONLY", "ON", "OPAQUE", "OPAQUE_TRANSFORM", 
                      "OPAQUE_XCANONICAL", "OPCODE", "OPEN", "OPERATIONS", 
                      "OPERATOR", "OPT_ESTIMATE", "OPTIMAL", "OPTIMIZE", 
                      "OPTIMIZER_FEATURES_ENABLE", "OPTIMIZER_GOAL", "OPTION", 
                      "OPT_PARAM", "ORA_BRANCH", "ORA_CHECK_ACL", "ORA_CHECK_PRIVILEGE", 
                      "ORA_CLUSTERING", "ORADATA", "ORADEBUG", "ORA_DST_AFFECTED", 
                      "ORA_DST_CONVERT", "ORA_DST_ERROR", "ORA_GET_ACLIDS", 
                      "ORA_GET_PRIVILEGES", "ORA_HASH", "ORA_INVOKING_USERID", 
                      "ORA_INVOKING_USER", "ORA_INVOKING_XS_USER_GUID", 
                      "ORA_INVOKING_XS_USER", "ORA_RAWCOMPARE", "ORA_RAWCONCAT", 
                      "ORA_ROWSCN", "ORA_ROWSCN_RAW", "ORA_ROWVERSION", 
                      "ORA_TABVERSION", "ORA_WRITE_TIME", "ORDERED", "ORDERED_PREDICATES", 
                      "ORDER", "ORDINALITY", "OR_EXPAND", "ORGANIZATION", 
                      "OR", "OR_PREDICATES", "OSERROR", "OTHER", "OUTER_JOIN_TO_ANTI", 
                      "OUTER_JOIN_TO_INNER", "OUTER", "OUTLINE_LEAF", "OUTLINE", 
                      "OUT_OF_LINE", "OUT", "OVERFLOW_NOMOVE", "OVERFLOW", 
                      "OVERLAPS", "OVER", "OVERRIDING", "OWNER", "OWNERSHIP", 
                      "OWN", "P_LETTER", "PACKAGE", "PACKAGES", "PARALLEL_ENABLE", 
                      "PARALLEL_INDEX", "PARALLEL", "PARAMETERFILE", "PARAMETERS", 
                      "PARAM", "PARENT", "PARENT_LEVEL_NAME", "PARENT_UNIQUE_NAME", 
                      "PARITY", "PARTIAL_JOIN", "PARTIALLY", "PARTIAL", 
                      "PARTIAL_ROLLUP_PUSHDOWN", "PARTITION_HASH", "PARTITION_LIST", 
                      "PARTITION", "PARTITION_RANGE", "PARTITIONS", "PARTNUMINST", 
                      "PASSING", "PASSWORD_GRACE_TIME", "PASSWORD_LIFE_TIME", 
                      "PASSWORD_LOCK_TIME", "PASSWORD", "PASSWORD_REUSE_MAX", 
                      "PASSWORD_REUSE_TIME", "PASSWORD_ROLLOVER_TIME", "PASSWORD_VERIFY_FUNCTION", 
                      "PAST", "PATCH", "PATH", "PATH_PREFIX", "PATHS", "PATTERN", 
                      "PBL_HS_BEGIN", "PBL_HS_END", "PCTFREE", "PCTINCREASE", 
                      "PCTTHRESHOLD", "PCTUSED", "PCTVERSION", "PENDING", 
                      "PERCENT_FOUND", "PERCENT_ISOPEN", "PERCENT_NOTFOUND", 
                      "PERCENT_KEYWORD", "PERCENT_RANKM", "PERCENT_ROWCOUNT", 
                      "PERCENT_ROWTYPE", "PERCENT_TYPE", "PERCENT_BULK_EXCEPTIONS", 
                      "PERCENT_BULK_ROWCOUNT", "PERFORMANCE", "PERIOD_KEYWORD", 
                      "PERMANENT", "PERMISSION", "PERMUTE", "PER", "PFILE", 
                      "PHYSICAL", "PIKEY", "PIPELINED", "PIPE", "PIV_GB", 
                      "PIVOT", "PIV_SSF", "PLACE_DISTINCT", "PLACE_GROUP_BY", 
                      "PLAN", "PLSCOPE_SETTINGS", "PLS_INTEGER", "PLSQL_CCFLAGS", 
                      "PLSQL_CODE_TYPE", "PLSQL_DEBUG", "PLSQL_OPTIMIZE_LEVEL", 
                      "PLSQL_WARNINGS", "PLUGGABLE", "PMEM", "POINT", "POLICY", 
                      "POOL_16K", "POOL_2K", "POOL_32K", "POOL_4K", "POOL_8K", 
                      "POSITIVEN", "POSITIVE", "POST_TRANSACTION", "POWERMULTISET_BY_CARDINALITY", 
                      "POWERMULTISET", "POWER", "PQ_CONCURRENT_UNION", "PQ_DISTRIBUTE", 
                      "PQ_DISTRIBUTE_WINDOW", "PQ_FILTER", "PQ_MAP", "PQ_NOMAP", 
                      "PQ_REPLICATE", "PQ_SKEW", "PRAGMA", "PREBUILT", "PRECEDES", 
                      "PRECEDING", "PRECISION", "PRECOMPUTE_SUBQUERY", "PREDICATE_REORDERS", 
                      "PRELOAD", "PREPARE", "PRESENTNNV", "PRESENT", "PRESENTV", 
                      "PRESERVE_OID", "PRESERVE", "PRETTY", "PREVIOUS", 
                      "PREV", "PRIMARY", "PRINTBLOBTOCLOB", "PRIORITY", 
                      "PRIOR", "PRIVATE", "PRIVATE_SGA", "PRIVILEGED", "PRIVILEGE", 
                      "PRIVILEGES", "PROCEDURAL", "PROCEDURE", "PROCESS", 
                      "PROFILE", "PROGRAM", "PROJECT", "PROPAGATE", "PROPERTY", 
                      "PROTECTED", "PROTECTION", "PROTOCOL", "PROXY", "PRUNING", 
                      "PUBLIC", "PULL_PRED", "PURGE", "PUSH_PRED", "PUSH_SUBQ", 
                      "PX_FAULT_TOLERANCE", "PX_GRANULE", "PX_JOIN_FILTER", 
                      "QB_NAME", "QUARTERS", "QUERY_BLOCK", "QUERY", "QUEUE_CURR", 
                      "QUEUE", "QUEUE_ROWP", "QUIESCE", "QUORUM", "QUOTA", 
                      "QUOTAGROUP", "RAISE", "RANDOM_LOCAL", "RANDOM", "RANGE", 
                      "RANKM", "RAPIDLY", "RAW", "RAWTOHEX", "RAWTONHEX", 
                      "RBA", "RBO_OUTLINE", "RDBA", "READ", "READS", "REALM", 
                      "REAL", "REBALANCE", "REBUILD", "RECORD", "RECORDS_PER_BLOCK", 
                      "RECOVERABLE", "RECOVER", "RECOVERY", "RECYCLEBIN", 
                      "RECYCLE", "REDACTION", "REDEFINE", "REDO", "REDUCED", 
                      "REDUNDANCY", "REF_CASCADE_CURSOR", "REFERENCED", 
                      "REFERENCE", "REFERENCES", "REFERENCING", "REF", "REFRESH", 
                      "REFTOHEX", "REGEXP_COUNT", "REGEXP_INSTR", "REGEXP_LIKE", 
                      "REGEXP_REPLACE", "REGEXP_SUBSTR", "REGISTER", "REGR_AVGX", 
                      "REGR_AVGY", "REGR_COUNT", "REGR_INTERCEPT", "REGR_R2", 
                      "REGR_SLOPE", "REGR_SXX", "REGR_SXY", "REGR_SYY", 
                      "REGULAR", "REJECT", "REKEY", "RELATIONAL", "RELIES_ON", 
                      "RELOCATE", "RELY", "REMAINDER", "REMOTE", "REMOTE_MAPPED", 
                      "REMOVE", "RENAME", "REPAIR", "REPEAT", "REPLACE", 
                      "REPLICATION", "REQUIRED", "RESETLOGS", "RESET", "RESIZE", 
                      "RESOLVE", "RESOLVER", "RESOURCE", "RESPECT", "RESTART", 
                      "RESTORE_AS_INTERVALS", "RESTORE", "RESTRICT_ALL_REF_CONS", 
                      "RESTRICTED", "RESTRICT_REFERENCES", "RESTRICT", "RESULT_CACHE", 
                      "RESULT", "RESUMABLE", "RESUME", "RETENTION", "RETRY_ON_ROW_CHANGE", 
                      "RETURNING", "RETURN", "REUSE", "REVERSE", "REVOKE", 
                      "REWRITE_OR_ERROR", "REWRITE", "RIGHT", "ROLE", "ROLESET", 
                      "ROLES", "ROLLBACK", "ROLLING", "ROLLUP", "ROWDEPENDENCIES", 
                      "ROWID_MAPPING_TABLE", "ROWID", "ROWIDTOCHAR", "ROWIDTONCHAR", 
                      "ROW_LENGTH", "ROWNUM", "ROW", "ROWS", "RPAD", "RTRIM", 
                      "RULE", "RULES", "RUNNING", "SALT", "SAMPLE", "SAVE_AS_INTERVALS", 
                      "SAVEPOINT", "SAVE", "SB4", "SCALE_ROWS", "SCALE", 
                      "SCAN_INSTANCES", "SCAN", "SCHEDULER", "SCHEMACHECK", 
                      "SCHEMA", "SCN_ASCENDING", "SCN", "SCOPE", "SCRUB", 
                      "SD_ALL", "SD_INHIBIT", "SDO_GEOM_MBR", "SDO_GEOMETRY", 
                      "SD_SHOW", "SEARCH", "SECOND", "SECONDS", "SECRET", 
                      "SECUREFILE_DBA", "SECUREFILE", "SECURITY", "SEED", 
                      "SEG_BLOCK", "SEG_FILE", "SEGMENT", "SELECTIVITY", 
                      "SELECT", "SELF", "SEMIJOIN_DRIVER", "SEMIJOIN", "SEMI_TO_INNER", 
                      "SEQUENCED", "SEQUENCE", "SEQUENTIAL", "SEQ", "SERIALIZABLE", 
                      "SERIALLY_REUSABLE", "SERIAL", "SERVERERROR", "SERVICE_NAME_CONVERT", 
                      "SERVICE", "SERVICES", "SESSION_CACHED_CURSORS", "SESSION", 
                      "SESSIONS_PER_USER", "SESSIONTIMEZONE", "SESSIONTZNAME", 
                      "SET", "SETS", "SETTINGS", "SET_TO_JOIN", "SEVERE", 
                      "SHARDSPACE", "SHARED_POOL", "SHARED", "SHARE", "SHARING", 
                      "SHELFLIFE", "SHOW", "SHRINK", "SHUTDOWN", "SIBLINGS", 
                      "SID", "SITE", "SIGNAL_COMPONENT", "SIGNAL_FUNCTION", 
                      "SIGN", "SIGNTYPE", "SIMPLE_INTEGER", "SIMPLE", "SINGLE", 
                      "SINGLETASK", "SINH", "SIN", "SIZE", "SKIP_EXT_OPTIMIZER", 
                      "SKIP_", "SKIP_UNQ_UNUSABLE_IDX", "SKIP_UNUSABLE_INDEXES", 
                      "SMALLFILE", "SMALLINT", "SNAPSHOT", "SOME", "SORT", 
                      "SOUNDEX", "SOURCE_FILE_DIRECTORY", "SOURCE_FILE_NAME_CONVERT", 
                      "SOURCE", "SPACE_KEYWORD", "SPECIFICATION", "SPFILE", 
                      "SPLIT", "SPREADSHEET", "SQLDATA", "SQLERROR", "SQLLDR", 
                      "SQL", "FILE_EXT", "SQL_MACRO", "SQL_TRACE", "SQL_TRANSLATION_PROFILE", 
                      "SQRT", "STALE", "STANDALONE", "STANDARD", "STANDARD_HASH", 
                      "STANDBY_MAX_DATA_DELAY", "STANDBYS", "STANDBY", "STAR", 
                      "STAR_TRANSFORMATION", "START", "STARTUP", "STATEMENT_ID", 
                      "STATEMENT_QUEUING", "STATEMENTS", "STATEMENT", "STATE", 
                      "STATIC", "STATISTICS", "STATS_BINOMIAL_TEST", "STATS_CROSSTAB", 
                      "STATS_F_TEST", "STATS_KS_TEST", "STATS_MODE", "STATS_MW_TEST", 
                      "STATS_ONE_WAY_ANOVA", "STATS_T_TEST_INDEP", "STATS_T_TEST_INDEPU", 
                      "STATS_T_TEST_ONE", "STATS_T_TEST_PAIRED", "STATS_WSR_TEST", 
                      "STDDEV_POP", "STDDEV_SAMP", "STOP", "STORAGE", "STORE", 
                      "STREAMS", "STREAM", "STRICT", "STRING", "STRIPE_COLUMNS", 
                      "STRIPE_WIDTH", "STRIP", "STRUCTURE", "SUBMULTISET", 
                      "SUBPARTITION_REL", "SUBPARTITIONS", "SUBPARTITION", 
                      "SUBQUERIES", "SUBQUERY_PRUNING", "SUBSCRIBE", "SUBSET", 
                      "SUBSTITUTABLE", "SUBSTR2", "SUBSTR4", "SUBSTRB", 
                      "SUBSTRC", "SUBTYPE", "SUCCESSFUL", "SUCCESS", "SUMMARY", 
                      "SUPPLEMENTAL", "SUSPEND", "SWAP_JOIN_INPUTS", "SWITCHOVER", 
                      "SWITCH", "SYNCHRONOUS", "SYNC", "SYNONYM", "SYS", 
                      "SYSASM", "SYS_AUDIT", "SYSAUX", "SYSBACKUP", "SYS_CHECKACL", 
                      "SYS_CHECK_PRIVILEGE", "SYS_CONNECT_BY_PATH", "SYS_CONTEXT", 
                      "SYSDATE", "SYSDBA", "SYS_DBURIGEN", "SYSDG", "SYS_DL_CURSOR", 
                      "SYS_DM_RXFORM_CHR", "SYS_DM_RXFORM_NUM", "SYS_DOM_COMPARE", 
                      "SYS_DST_PRIM2SEC", "SYS_DST_SEC2PRIM", "SYS_ET_BFILE_TO_RAW", 
                      "SYS_ET_BLOB_TO_IMAGE", "SYS_ET_IMAGE_TO_BLOB", "SYS_ET_RAW_TO_BFILE", 
                      "SYS_EXTPDTXT", "SYS_EXTRACT_UTC", "SYS_FBT_INSDEL", 
                      "SYS_FILTER_ACLS", "SYS_FNMATCHES", "SYS_FNREPLACE", 
                      "SYS_GET_ACLIDS", "SYS_GET_COL_ACLIDS", "SYS_GET_PRIVILEGES", 
                      "SYS_GETTOKENID", "SYS_GETXTIVAL", "SYS_GUID", "SYSGUID", 
                      "SYSKM", "SYS_MAKE_XMLNODEID", "SYS_MAKEXML", "SYS_MKXMLATTR", 
                      "SYS_MKXTI", "SYSOBJ", "SYS_OP_ADT2BIN", "SYS_OP_ADTCONS", 
                      "SYS_OP_ALSCRVAL", "SYS_OP_ATG", "SYS_OP_BIN2ADT", 
                      "SYS_OP_BITVEC", "SYS_OP_BL2R", "SYS_OP_BLOOM_FILTER_LIST", 
                      "SYS_OP_BLOOM_FILTER", "SYS_OP_C2C", "SYS_OP_CAST", 
                      "SYS_OP_CEG", "SYS_OP_CL2C", "SYS_OP_COMBINED_HASH", 
                      "SYS_OP_COMP", "SYS_OP_CONVERT", "SYS_OP_COUNTCHG", 
                      "SYS_OP_CSCONV", "SYS_OP_CSCONVTEST", "SYS_OP_CSR", 
                      "SYS_OP_CSX_PATCH", "SYS_OP_CYCLED_SEQ", "SYS_OP_DECOMP", 
                      "SYS_OP_DESCEND", "SYS_OP_DISTINCT", "SYS_OP_DRA", 
                      "SYS_OP_DUMP", "SYS_OP_DV_CHECK", "SYS_OP_ENFORCE_NOT_NULL", 
                      "SYSOPER", "SYS_OP_EXTRACT", "SYS_OP_GROUPING", "SYS_OP_GUID", 
                      "SYS_OP_HASH", "SYS_OP_IIX", "SYS_OP_ITR", "SYS_OP_KEY_VECTOR_CREATE", 
                      "SYS_OP_KEY_VECTOR_FILTER_LIST", "SYS_OP_KEY_VECTOR_FILTER", 
                      "SYS_OP_KEY_VECTOR_SUCCEEDED", "SYS_OP_KEY_VECTOR_USE", 
                      "SYS_OP_LBID", "SYS_OP_LOBLOC2BLOB", "SYS_OP_LOBLOC2CLOB", 
                      "SYS_OP_LOBLOC2ID", "SYS_OP_LOBLOC2NCLOB", "SYS_OP_LOBLOC2TYP", 
                      "SYS_OP_LSVI", "SYS_OP_LVL", "SYS_OP_MAKEOID", "SYS_OP_MAP_NONNULL", 
                      "SYS_OP_MSR", "SYS_OP_NICOMBINE", "SYS_OP_NIEXTRACT", 
                      "SYS_OP_NII", "SYS_OP_NIX", "SYS_OP_NOEXPAND", "SYS_OP_NTCIMG", 
                      "SYS_OP_NUMTORAW", "SYS_OP_OIDVALUE", "SYS_OP_OPNSIZE", 
                      "SYS_OP_PAR_1", "SYS_OP_PARGID_1", "SYS_OP_PARGID", 
                      "SYS_OP_PAR", "SYS_OP_PART_ID", "SYS_OP_PIVOT", "SYS_OP_R2O", 
                      "SYS_OP_RAWTONUM", "SYS_OP_RDTM", "SYS_OP_REF", "SYS_OP_RMTD", 
                      "SYS_OP_ROWIDTOOBJ", "SYS_OP_RPB", "SYS_OPTLOBPRBSC", 
                      "SYS_OP_TOSETID", "SYS_OP_TPR", "SYS_OP_TRTB", "SYS_OPTXICMP", 
                      "SYS_OPTXQCASTASNQ", "SYS_OP_UNDESCEND", "SYS_OP_VECAND", 
                      "SYS_OP_VECBIT", "SYS_OP_VECOR", "SYS_OP_VECXOR", 
                      "SYS_OP_VERSION", "SYS_OP_VREF", "SYS_OP_VVD", "SYS_OP_XMLCONS_FOR_CSX", 
                      "SYS_OP_XPTHATG", "SYS_OP_XPTHIDX", "SYS_OP_XPTHOP", 
                      "SYS_OP_XTXT2SQLT", "SYS_OP_ZONE_ID", "SYS_ORDERKEY_DEPTH", 
                      "SYS_ORDERKEY_MAXCHILD", "SYS_ORDERKEY_PARENT", "SYS_PARALLEL_TXN", 
                      "SYS_PATHID_IS_ATTR", "SYS_PATHID_IS_NMSPC", "SYS_PATHID_LASTNAME", 
                      "SYS_PATHID_LASTNMSPC", "SYS_PATH_REVERSE", "SYS_PXQEXTRACT", 
                      "SYS_RAW_TO_XSID", "SYS_RID_ORDER", "SYS_ROW_DELTA", 
                      "SYS_SC_2_XMLT", "SYS_SYNRCIREDO", "SYSTEM_DEFINED", 
                      "SYSTEM", "SYSTIMESTAMP", "SYS_TYPEID", "SYS_UMAKEXML", 
                      "SYS_XMLANALYZE", "SYS_XMLCONTAINS", "SYS_XMLCONV", 
                      "SYS_XMLEXNSURI", "SYS_XMLGEN", "SYS_XMLI_LOC_ISNODE", 
                      "SYS_XMLI_LOC_ISTEXT", "SYS_XMLINSTR", "SYS_XMLLOCATOR_GETSVAL", 
                      "SYS_XMLNODEID_GETCID", "SYS_XMLNODEID_GETLOCATOR", 
                      "SYS_XMLNODEID_GETOKEY", "SYS_XMLNODEID_GETPATHID", 
                      "SYS_XMLNODEID_GETPTRID", "SYS_XMLNODEID_GETRID", 
                      "SYS_XMLNODEID_GETSVAL", "SYS_XMLNODEID_GETTID", "SYS_XMLNODEID", 
                      "SYS_XMLT_2_SC", "SYS_XMLTRANSLATE", "SYS_XMLTYPE2SQL", 
                      "SYS_XQ_ASQLCNV", "SYS_XQ_ATOMCNVCHK", "SYS_XQBASEURI", 
                      "SYS_XQCASTABLEERRH", "SYS_XQCODEP2STR", "SYS_XQCODEPEQ", 
                      "SYS_XQCON2SEQ", "SYS_XQCONCAT", "SYS_XQDELETE", "SYS_XQDFLTCOLATION", 
                      "SYS_XQDOC", "SYS_XQDOCURI", "SYS_XQDURDIV", "SYS_XQED4URI", 
                      "SYS_XQENDSWITH", "SYS_XQERRH", "SYS_XQERR", "SYS_XQESHTMLURI", 
                      "SYS_XQEXLOBVAL", "SYS_XQEXSTWRP", "SYS_XQEXTRACT", 
                      "SYS_XQEXTRREF", "SYS_XQEXVAL", "SYS_XQFB2STR", "SYS_XQFNBOOL", 
                      "SYS_XQFNCMP", "SYS_XQFNDATIM", "SYS_XQFNLNAME", "SYS_XQFNNM", 
                      "SYS_XQFNNSURI", "SYS_XQFNPREDTRUTH", "SYS_XQFNQNM", 
                      "SYS_XQFNROOT", "SYS_XQFORMATNUM", "SYS_XQFTCONTAIN", 
                      "SYS_XQFUNCR", "SYS_XQGETCONTENT", "SYS_XQINDXOF", 
                      "SYS_XQINSERT", "SYS_XQINSPFX", "SYS_XQIRI2URI", "SYS_XQLANG", 
                      "SYS_XQLLNMFRMQNM", "SYS_XQMKNODEREF", "SYS_XQNILLED", 
                      "SYS_XQNODENAME", "SYS_XQNORMSPACE", "SYS_XQNORMUCODE", 
                      "SYS_XQ_NRNG", "SYS_XQNSP4PFX", "SYS_XQNSPFRMQNM", 
                      "SYS_XQPFXFRMQNM", "SYS_XQ_PKSQL2XML", "SYS_XQPOLYABS", 
                      "SYS_XQPOLYADD", "SYS_XQPOLYCEL", "SYS_XQPOLYCSTBL", 
                      "SYS_XQPOLYCST", "SYS_XQPOLYDIV", "SYS_XQPOLYFLR", 
                      "SYS_XQPOLYMOD", "SYS_XQPOLYMUL", "SYS_XQPOLYRND", 
                      "SYS_XQPOLYSQRT", "SYS_XQPOLYSUB", "SYS_XQPOLYUMUS", 
                      "SYS_XQPOLYUPLS", "SYS_XQPOLYVEQ", "SYS_XQPOLYVGE", 
                      "SYS_XQPOLYVGT", "SYS_XQPOLYVLE", "SYS_XQPOLYVLT", 
                      "SYS_XQPOLYVNE", "SYS_XQREF2VAL", "SYS_XQRENAME", 
                      "SYS_XQREPLACE", "SYS_XQRESVURI", "SYS_XQRNDHALF2EVN", 
                      "SYS_XQRSLVQNM", "SYS_XQRYENVPGET", "SYS_XQRYVARGET", 
                      "SYS_XQRYWRP", "SYS_XQSEQ2CON4XC", "SYS_XQSEQ2CON", 
                      "SYS_XQSEQDEEPEQ", "SYS_XQSEQINSB", "SYS_XQSEQRM", 
                      "SYS_XQSEQRVS", "SYS_XQSEQSUB", "SYS_XQSEQTYPMATCH", 
                      "SYS_XQSTARTSWITH", "SYS_XQSTATBURI", "SYS_XQSTR2CODEP", 
                      "SYS_XQSTRJOIN", "SYS_XQSUBSTRAFT", "SYS_XQSUBSTRBEF", 
                      "SYS_XQTOKENIZE", "SYS_XQTREATAS", "SYS_XQ_UPKXML2SQL", 
                      "SYS_XQXFORM", "SYS_XSID_TO_RAW", "SYS_ZMAP_FILTER", 
                      "SYS_ZMAP_REFRESH", "T_LETTER", "TABLE_LOOKUP_BY_NL", 
                      "TABLESPACE_NO", "TABLESPACE", "TABLES", "TABLE_STATS", 
                      "TABLE", "TABNO", "TAG", "TANH", "TAN", "TBLORIDXPARTNUM", 
                      "TEMPFILE", "TEMPLATE", "TEMPORARY", "TEMP_TABLE", 
                      "TEST", "TEXT", "THAN", "THEN", "THE", "THREAD", "THROUGH", 
                      "TIER", "TIES", "TIMEOUT", "TIMESTAMP_LTZ_UNCONSTRAINED", 
                      "TIMESTAMP", "TIMESTAMP_TZ_UNCONSTRAINED", "TIMESTAMP_UNCONSTRAINED", 
                      "TIMES", "TIME", "TIMEZONE", "TIMEZONE_ABBR", "TIMEZONE_HOUR", 
                      "TIMEZONE_MINUTE", "TIMEZONE_OFFSET", "TIMEZONE_REGION", 
                      "TIME_ZONE", "TIMING", "TIV_GB", "TIV_SSF", "TO_ACLID", 
                      "TO_BINARY_DOUBLE", "TO_BINARY_FLOAT", "TO_BLOB", 
                      "TO_CLOB", "TO_DSINTERVAL", "TO_LOB", "TO_MULTI_BYTE", 
                      "TO_NCHAR", "TO_NCLOB", "TO_NUMBER", "TOPLEVEL", "TO_SINGLE_BYTE", 
                      "TO_TIMESTAMP", "TO_TIMESTAMP_TZ", "TO_TIME", "TO_TIME_TZ", 
                      "TO", "TO_YMINTERVAL", "TRACE", "TRACING", "TRACKING", 
                      "TRAILING", "TRANSACTION", "TRANSFORM", "TRANSFORM_DISTINCT_AGG", 
                      "TRANSITIONAL", "TRANSITION", "TRANSLATE", "TRANSLATION", 
                      "TREAT", "TRIGGERS", "TRIGGER", "TRUE", "TRUNCATE", 
                      "TRUNC", "TRUSTED", "TRUST", "TUNING", "TX", "TYPES", 
                      "TYPE", "TZ_OFFSET", "UB2", "UBA", "UCS2", "UID", 
                      "UNARCHIVED", "UNBOUNDED", "UNBOUND", "UNCONDITIONAL", 
                      "UNDER", "UNDO", "UNDROP", "UNIFORM", "UNION", "UNIQUE", 
                      "UNISTR", "UNLIMITED", "UNLOAD", "UNLOCK", "UNMATCHED", 
                      "UNNEST_INNERJ_DISTINCT_VIEW", "UNNEST_NOSEMIJ_NODISTINCTVIEW", 
                      "UNNEST_SEMIJ_VIEW", "UNNEST", "UNPACKED", "UNPIVOT", 
                      "UNPLUG", "UNPROTECTED", "UNQUIESCE", "UNRECOVERABLE", 
                      "UNRESTRICTED", "UNSUBSCRIBE", "UNTIL", "UNUSABLE", 
                      "UNUSED", "UPDATABLE", "UPDATED", "UPDATE", "UPDATEXML", 
                      "UPD_INDEXES", "UPD_JOININDEX", "UPGRADE", "UPPER", 
                      "UPSERT", "UROWID", "USABLE", "USAGE", "USE_ANTI", 
                      "USE_CONCAT", "USE_CUBE", "USE_HASH_AGGREGATION", 
                      "USE_HASH_GBY_FOR_PUSHDOWN", "USE_HASH", "USE_HIDDEN_PARTITIONS", 
                      "USE_INVISIBLE_INDEXES", "USE_MERGE_CARTESIAN", "USE_MERGE", 
                      "USE_NL", "USE_NL_WITH_INDEX", "USE_PRIVATE_OUTLINES", 
                      "USER_DATA", "USER_DEFINED", "USERENV", "USERGROUP", 
                      "USER_RECYCLEBIN", "USERS", "USER_TABLESPACES", "USER", 
                      "USE_SEMI", "USE_STORED_OUTLINES", "USE_TTT_FOR_GSETS", 
                      "USE", "USE_VECTOR_AGGREGATION", "USE_WEAK_NAME_RESL", 
                      "USING_NO_EXPAND", "USING_NLS_COMP", "USING", "UTF16BE", 
                      "UTF16LE", "UTF32", "UTF8", "V1", "V2", "VALIDATE", 
                      "VALIDATE_CONVERSION", "VALIDATION", "VALID_TIME_END", 
                      "VALUES", "VALUE", "VARCHAR2", "VARCHAR", "VARIABLE", 
                      "VAR_POP", "VARRAYS", "VARRAY", "VAR_SAMP", "VARYING", 
                      "VECTOR_READ_TRACE", "VECTOR_READ", "VECTOR_TRANSFORM_DIMS", 
                      "VECTOR_TRANSFORM_FACT", "VECTOR_TRANSFORM", "VERIFIER", 
                      "VERIFY", "VERSIONING", "VERSIONS_ENDSCN", "VERSIONS_ENDTIME", 
                      "VERSIONS_OPERATION", "VERSIONS_STARTSCN", "VERSIONS_STARTTIME", 
                      "VERSIONS", "VERSIONS_XID", "VERSION", "VIEW", "VIOLATION", 
                      "VIRTUAL", "VISIBILITY", "VISIBLE", "VOLUME", "VSIZE", 
                      "WAIT", "WALLET", "WARNING", "WEEKS", "WEEK", "WELLFORMED", 
                      "WHENEVER", "WHEN", "WHERE", "WHILE", "WHITESPACE", 
                      "WIDTH_BUCKET", "WITHIN", "WITHOUT", "WITH_PLSQL", 
                      "WITH", "WORK", "WRAPPED", "WRAPPER", "WRITE", "XDB_FASTPATH_INSERT", 
                      "XDB", "X_DYN_PRUNE", "XID", "XML2OBJECT", "XMLAGG", 
                      "XMLATTRIBUTES", "XMLCAST", "XMLCDATA", "XMLCOLATTVAL", 
                      "XMLCOMMENT", "XMLCONCAT", "XMLDIFF", "XML_DML_RWT_STMT", 
                      "XMLELEMENT", "XMLEXISTS2", "XMLEXISTS", "XMLFOREST", 
                      "XMLINDEX", "XMLINDEX_REWRITE_IN_SELECT", "XMLINDEX_REWRITE", 
                      "XMLINDEX_SEL_IDX_TBL", "XMLISNODE", "XMLISVALID", 
                      "XMLNAMESPACES", "XMLPARSE", "XMLPATCH", "XMLPI", 
                      "XMLQUERYVAL", "XMLQUERY", "XMLROOT", "XMLSCHEMA", 
                      "XMLSERIALIZE", "XMLTABLE", "XMLTRANSFORMBLOB", "XMLTRANSFORM", 
                      "XMLTYPE", "XML", "XPATHTABLE", "XS_SYS_CONTEXT", 
                      "XS", "XTRANSPORT", "YEARS", "YEAR", "YES", "YMINTERVAL_UNCONSTRAINED", 
                      "ZONEMAP", "ZONE", "PREDICTION", "PREDICTION_BOUNDS", 
                      "PREDICTION_COST", "PREDICTION_DETAILS", "PREDICTION_PROBABILITY", 
                      "PREDICTION_SET", "BLOCKCHAIN", "COLLATE", "COLLATION", 
                      "DEFINITION", "DUPLICATED", "EXTENDED", "HASHING", 
                      "IDLE", "IMMUTABLE", "ORACLE_DATAPUMP", "ORACLE_HDFS", 
                      "ORACLE_HIVE", "ORACLE_LOADER", "SHA2_512_Q", "SHARDED", 
                      "V1_Q", "ISOLATE", "ROOT", "UNITE", "ALGORITHM", "CUME_DIST", 
                      "DENSE_RANK", "LISTAGG", "PERCENT_RANK", "PERCENTILE_CONT", 
                      "PERCENTILE_DISC", "RANK", "AVG", "CORR", "COVAR_", 
                      "DECODE", "LAG", "LAG_DIFF", "LAG_DIFF_PERCENT", "LEAD", 
                      "MAX", "MEDIAN", "MEMOPTIMIZE", "MIN", "NTILE", "NVL", 
                      "RATIO_TO_REPORT", "REGR_", "ROUND", "ROW_NUMBER", 
                      "SUBSTR", "TO_CHAR", "TRIM", "SUM", "STDDEV", "VAR_", 
                      "VARIANCE", "LEAST", "GREATEST", "TO_DATE", "CHARSETID", 
                      "CHARSETFORM", "DURATION", "EXTEND", "MAXLEN", "PERSISTABLE", 
                      "POLYMORPHIC", "STRUCT", "TDO", "WM_CONCAT", "NATIONAL_CHAR_STRING_LIT", 
                      "BIT_STRING_LIT", "HEX_STRING_LIT", "DOUBLE_PERIOD", 
                      "PERIOD", "UNSIGNED_INTEGER", "APPROXIMATE_NUM_LIT", 
                      "CHAR_STRING", "DELIMITED_ID", "PERCENT", "AMPERSAND", 
                      "LEFT_PAREN", "RIGHT_PAREN", "DOUBLE_ASTERISK", "ASTERISK", 
                      "PLUS_SIGN", "MINUS_SIGN", "COMMA", "SOLIDUS", "AT_SIGN", 
                      "ASSIGN_OP", "HASH_OP", "SQ", "BINDVAR", "NOT_EQUAL_OP", 
                      "CARRET_OPERATOR_PART", "TILDE_OPERATOR_PART", "EXCLAMATION_OPERATOR_PART", 
                      "GREATER_THAN_OP", "LESS_THAN_OP", "COLON", "SEMICOLON", 
                      "BAR", "EQUALS_OP", "LEFT_BRACKET", "RIGHT_BRACKET", 
                      "INTRODUCER", "SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", 
                      "REMARK_COMMENT", "PROMPT_MESSAGE", "START_CMD", "REGULAR_ID", 
                      "INQUIRY_DIRECTIVE", "SPACES" ]

    RULE_sql_script = 0
    RULE_unit_statement = 1
    RULE_alter_diskgroup = 2
    RULE_add_disk_clause = 3
    RULE_drop_disk_clause = 4
    RULE_resize_disk_clause = 5
    RULE_replace_disk_clause = 6
    RULE_wait_nowait = 7
    RULE_rename_disk_clause = 8
    RULE_disk_online_clause = 9
    RULE_disk_offline_clause = 10
    RULE_timeout_clause = 11
    RULE_rebalance_diskgroup_clause = 12
    RULE_phase = 13
    RULE_check_diskgroup_clause = 14
    RULE_diskgroup_template_clauses = 15
    RULE_qualified_template_clause = 16
    RULE_redundancy_clause = 17
    RULE_striping_clause = 18
    RULE_force_noforce = 19
    RULE_diskgroup_directory_clauses = 20
    RULE_dir_name = 21
    RULE_diskgroup_alias_clauses = 22
    RULE_diskgroup_volume_clauses = 23
    RULE_add_volume_clause = 24
    RULE_modify_volume_clause = 25
    RULE_diskgroup_attributes = 26
    RULE_modify_diskgroup_file = 27
    RULE_disk_region_clause = 28
    RULE_drop_diskgroup_file_clause = 29
    RULE_convert_redundancy_clause = 30
    RULE_usergroup_clauses = 31
    RULE_user_clauses = 32
    RULE_file_permissions_clause = 33
    RULE_file_owner_clause = 34
    RULE_scrub_clause = 35
    RULE_quotagroup_clauses = 36
    RULE_property_name = 37
    RULE_property_value = 38
    RULE_filegroup_clauses = 39
    RULE_add_filegroup_clause = 40
    RULE_modify_filegroup_clause = 41
    RULE_move_to_filegroup_clause = 42
    RULE_drop_filegroup_clause = 43
    RULE_quorum_regular = 44
    RULE_undrop_disk_clause = 45
    RULE_diskgroup_availability = 46
    RULE_enable_disable_volume = 47
    RULE_drop_function = 48
    RULE_alter_flashback_archive = 49
    RULE_alter_hierarchy = 50
    RULE_alter_function = 51
    RULE_alter_java = 52
    RULE_match_string = 53
    RULE_create_function_body = 54
    RULE_sql_macro_body = 55
    RULE_parallel_enable_clause = 56
    RULE_partition_by_clause = 57
    RULE_result_cache_clause = 58
    RULE_accessible_by_clause = 59
    RULE_default_collation_clause = 60
    RULE_aggregate_clause = 61
    RULE_pipelined_using_clause = 62
    RULE_accessor = 63
    RULE_relies_on_part = 64
    RULE_streaming_clause = 65
    RULE_alter_outline = 66
    RULE_outline_options = 67
    RULE_alter_lockdown_profile = 68
    RULE_lockdown_feature = 69
    RULE_lockdown_options = 70
    RULE_lockdown_statements = 71
    RULE_statement_clauses = 72
    RULE_clause_options = 73
    RULE_option_values = 74
    RULE_string_list = 75
    RULE_disable_enable = 76
    RULE_drop_lockdown_profile = 77
    RULE_drop_package = 78
    RULE_alter_package = 79
    RULE_create_package = 80
    RULE_create_package_body = 81
    RULE_package_obj_spec = 82
    RULE_procedure_spec = 83
    RULE_function_spec = 84
    RULE_package_obj_body = 85
    RULE_alter_pmem_filestore = 86
    RULE_drop_pmem_filestore = 87
    RULE_drop_procedure = 88
    RULE_alter_procedure = 89
    RULE_function_body = 90
    RULE_procedure_body = 91
    RULE_create_procedure_body = 92
    RULE_alter_resource_cost = 93
    RULE_drop_outline = 94
    RULE_alter_rollback_segment = 95
    RULE_drop_restore_point = 96
    RULE_drop_rollback_segment = 97
    RULE_drop_role = 98
    RULE_create_pmem_filestore = 99
    RULE_pmem_filestore_options = 100
    RULE_file_path = 101
    RULE_create_rollback_segment = 102
    RULE_drop_trigger = 103
    RULE_alter_trigger = 104
    RULE_create_trigger = 105
    RULE_trigger_follows_clause = 106
    RULE_trigger_when_clause = 107
    RULE_simple_dml_trigger = 108
    RULE_for_each_row = 109
    RULE_compound_dml_trigger = 110
    RULE_non_dml_trigger = 111
    RULE_trigger_body = 112
    RULE_routine_clause = 113
    RULE_compound_trigger_block = 114
    RULE_timing_point_section = 115
    RULE_non_dml_event = 116
    RULE_dml_event_clause = 117
    RULE_dml_event_element = 118
    RULE_dml_event_nested_clause = 119
    RULE_referencing_clause = 120
    RULE_referencing_element = 121
    RULE_drop_type = 122
    RULE_alter_type = 123
    RULE_compile_type_clause = 124
    RULE_replace_type_clause = 125
    RULE_alter_method_spec = 126
    RULE_alter_method_element = 127
    RULE_alter_attribute_definition = 128
    RULE_attribute_definition = 129
    RULE_alter_collection_clauses = 130
    RULE_dependent_handling_clause = 131
    RULE_dependent_exceptions_part = 132
    RULE_create_type = 133
    RULE_type_definition = 134
    RULE_object_type_def = 135
    RULE_object_as_part = 136
    RULE_object_under_part = 137
    RULE_nested_table_type_def = 138
    RULE_sqlj_object_type = 139
    RULE_type_body = 140
    RULE_type_body_elements = 141
    RULE_map_order_func_declaration = 142
    RULE_subprog_decl_in_type = 143
    RULE_proc_decl_in_type = 144
    RULE_func_decl_in_type = 145
    RULE_constructor_declaration = 146
    RULE_modifier_clause = 147
    RULE_object_member_spec = 148
    RULE_sqlj_object_type_attr = 149
    RULE_element_spec = 150
    RULE_element_spec_options = 151
    RULE_subprogram_spec = 152
    RULE_overriding_subprogram_spec = 153
    RULE_overriding_function_spec = 154
    RULE_type_procedure_spec = 155
    RULE_type_function_spec = 156
    RULE_constructor_spec = 157
    RULE_map_order_function_spec = 158
    RULE_pragma_clause = 159
    RULE_pragma_elements = 160
    RULE_type_elements_parameter = 161
    RULE_drop_sequence = 162
    RULE_alter_sequence = 163
    RULE_alter_session = 164
    RULE_alter_session_set_clause = 165
    RULE_create_sequence = 166
    RULE_sequence_spec = 167
    RULE_sequence_start_clause = 168
    RULE_create_analytic_view = 169
    RULE_classification_clause = 170
    RULE_caption_clause = 171
    RULE_description_clause = 172
    RULE_classification_item = 173
    RULE_language = 174
    RULE_cav_using_clause = 175
    RULE_dim_by_clause = 176
    RULE_dim_key = 177
    RULE_dim_ref = 178
    RULE_hier_ref = 179
    RULE_measures_clause = 180
    RULE_av_measure = 181
    RULE_base_meas_clause = 182
    RULE_meas_aggregate_clause = 183
    RULE_calc_meas_clause = 184
    RULE_default_measure_clause = 185
    RULE_default_aggregate_clause = 186
    RULE_cache_clause = 187
    RULE_cache_specification = 188
    RULE_levels_clause = 189
    RULE_level_specification = 190
    RULE_level_group_type = 191
    RULE_fact_columns_clause = 192
    RULE_qry_transform_clause = 193
    RULE_create_attribute_dimension = 194
    RULE_ad_using_clause = 195
    RULE_source_clause = 196
    RULE_join_path_clause = 197
    RULE_join_condition = 198
    RULE_join_condition_item = 199
    RULE_attributes_clause = 200
    RULE_ad_attributes_clause = 201
    RULE_ad_level_clause = 202
    RULE_key_clause = 203
    RULE_alternate_key_clause = 204
    RULE_dim_order_clause = 205
    RULE_all_clause = 206
    RULE_create_audit_policy = 207
    RULE_privilege_audit_clause = 208
    RULE_action_audit_clause = 209
    RULE_system_actions = 210
    RULE_standard_actions = 211
    RULE_actions_clause = 212
    RULE_object_action = 213
    RULE_system_action = 214
    RULE_component_actions = 215
    RULE_component_action = 216
    RULE_role_audit_clause = 217
    RULE_create_controlfile = 218
    RULE_controlfile_options = 219
    RULE_logfile_clause = 220
    RULE_character_set_clause = 221
    RULE_file_specification = 222
    RULE_create_diskgroup = 223
    RULE_qualified_disk_clause = 224
    RULE_create_edition = 225
    RULE_create_flashback_archive = 226
    RULE_flashback_archive_quota = 227
    RULE_flashback_archive_retention = 228
    RULE_create_hierarchy = 229
    RULE_hier_using_clause = 230
    RULE_level_hier_clause = 231
    RULE_hier_attrs_clause = 232
    RULE_hier_attr_clause = 233
    RULE_hier_attr_name = 234
    RULE_create_index = 235
    RULE_cluster_index_clause = 236
    RULE_cluster_name = 237
    RULE_table_index_clause = 238
    RULE_bitmap_join_index_clause = 239
    RULE_index_expr = 240
    RULE_index_properties = 241
    RULE_domain_index_clause = 242
    RULE_local_domain_index_clause = 243
    RULE_xmlindex_clause = 244
    RULE_local_xmlindex_clause = 245
    RULE_global_partitioned_index = 246
    RULE_index_partitioning_clause = 247
    RULE_index_partitioning_values_list = 248
    RULE_local_partitioned_index = 249
    RULE_on_range_partitioned_table = 250
    RULE_on_list_partitioned_table = 251
    RULE_partitioned_table = 252
    RULE_on_hash_partitioned_table = 253
    RULE_on_hash_partitioned_clause = 254
    RULE_on_comp_partitioned_table = 255
    RULE_on_comp_partitioned_clause = 256
    RULE_index_subpartition_clause = 257
    RULE_index_subpartition_subclause = 258
    RULE_odci_parameters = 259
    RULE_indextype = 260
    RULE_alter_index = 261
    RULE_alter_index_ops_set1 = 262
    RULE_alter_index_ops_set2 = 263
    RULE_visible_or_invisible = 264
    RULE_monitoring_nomonitoring = 265
    RULE_rebuild_clause = 266
    RULE_alter_index_partitioning = 267
    RULE_modify_index_default_attrs = 268
    RULE_add_hash_index_partition = 269
    RULE_coalesce_index_partition = 270
    RULE_modify_index_partition = 271
    RULE_modify_index_partitions_ops = 272
    RULE_rename_index_partition = 273
    RULE_drop_index_partition = 274
    RULE_split_index_partition = 275
    RULE_index_partition_description = 276
    RULE_modify_index_subpartition = 277
    RULE_partition_name_old = 278
    RULE_new_partition_name = 279
    RULE_new_index_name = 280
    RULE_alter_inmemory_join_group = 281
    RULE_create_user = 282
    RULE_alter_user = 283
    RULE_drop_user = 284
    RULE_alter_identified_by = 285
    RULE_identified_by = 286
    RULE_identified_other_clause = 287
    RULE_user_tablespace_clause = 288
    RULE_quota_clause = 289
    RULE_profile_clause = 290
    RULE_role_clause = 291
    RULE_user_default_role_clause = 292
    RULE_password_expire_clause = 293
    RULE_user_lock_clause = 294
    RULE_user_editions_clause = 295
    RULE_alter_user_editions_clause = 296
    RULE_proxy_clause = 297
    RULE_container_names = 298
    RULE_set_container_data = 299
    RULE_add_rem_container_data = 300
    RULE_container_data_clause = 301
    RULE_administer_key_management = 302
    RULE_keystore_management_clauses = 303
    RULE_create_keystore = 304
    RULE_open_keystore = 305
    RULE_force_keystore = 306
    RULE_close_keystore = 307
    RULE_backup_keystore = 308
    RULE_alter_keystore_password = 309
    RULE_merge_into_new_keystore = 310
    RULE_merge_into_existing_keystore = 311
    RULE_isolate_keystore = 312
    RULE_unite_keystore = 313
    RULE_key_management_clauses = 314
    RULE_set_key = 315
    RULE_create_key = 316
    RULE_mkid = 317
    RULE_mk = 318
    RULE_use_key = 319
    RULE_set_key_tag = 320
    RULE_export_keys = 321
    RULE_import_keys = 322
    RULE_migrate_keys = 323
    RULE_reverse_migrate_keys = 324
    RULE_move_keys = 325
    RULE_identified_by_store = 326
    RULE_using_algorithm_clause = 327
    RULE_using_tag_clause = 328
    RULE_secret_management_clauses = 329
    RULE_add_update_secret = 330
    RULE_delete_secret = 331
    RULE_add_update_secret_seps = 332
    RULE_delete_secret_seps = 333
    RULE_zero_downtime_software_patching_clauses = 334
    RULE_with_backup_clause = 335
    RULE_identified_by_password_clause = 336
    RULE_keystore_password = 337
    RULE_path = 338
    RULE_secret = 339
    RULE_analyze = 340
    RULE_partition_extention_clause = 341
    RULE_validation_clauses = 342
    RULE_compute_clauses = 343
    RULE_for_clause = 344
    RULE_online_or_offline = 345
    RULE_into_clause1 = 346
    RULE_partition_key_value = 347
    RULE_subpartition_key_value = 348
    RULE_associate_statistics = 349
    RULE_column_association = 350
    RULE_function_association = 351
    RULE_indextype_name = 352
    RULE_using_statistics_type = 353
    RULE_statistics_type_name = 354
    RULE_default_cost_clause = 355
    RULE_cpu_cost = 356
    RULE_io_cost = 357
    RULE_network_cost = 358
    RULE_default_selectivity_clause = 359
    RULE_default_selectivity = 360
    RULE_storage_table_clause = 361
    RULE_unified_auditing = 362
    RULE_policy_name = 363
    RULE_audit_traditional = 364
    RULE_audit_direct_path = 365
    RULE_audit_container_clause = 366
    RULE_audit_operation_clause = 367
    RULE_auditing_by_clause = 368
    RULE_audit_user = 369
    RULE_audit_schema_object_clause = 370
    RULE_sql_operation = 371
    RULE_auditing_on_clause = 372
    RULE_model_name = 373
    RULE_object_name = 374
    RULE_profile_name = 375
    RULE_sql_statement_shortcut = 376
    RULE_drop_index = 377
    RULE_disassociate_statistics = 378
    RULE_drop_indextype = 379
    RULE_drop_inmemory_join_group = 380
    RULE_flashback_table = 381
    RULE_restore_point = 382
    RULE_purge_statement = 383
    RULE_noaudit_statement = 384
    RULE_rename_object = 385
    RULE_grant_statement = 386
    RULE_container_clause = 387
    RULE_revoke_statement = 388
    RULE_revoke_system_privilege = 389
    RULE_revokee_clause = 390
    RULE_revoke_object_privileges = 391
    RULE_on_object_clause = 392
    RULE_revoke_roles_from_programs = 393
    RULE_program_unit = 394
    RULE_create_dimension = 395
    RULE_create_directory = 396
    RULE_directory_name = 397
    RULE_directory_path = 398
    RULE_create_inmemory_join_group = 399
    RULE_drop_hierarchy = 400
    RULE_alter_library = 401
    RULE_drop_java = 402
    RULE_drop_library = 403
    RULE_create_java = 404
    RULE_create_library = 405
    RULE_plsql_library_source = 406
    RULE_credential_name = 407
    RULE_library_editionable = 408
    RULE_library_debug = 409
    RULE_compiler_parameters_clause = 410
    RULE_parameter_value = 411
    RULE_library_name = 412
    RULE_alter_dimension = 413
    RULE_level_clause = 414
    RULE_hierarchy_clause = 415
    RULE_dimension_join_clause = 416
    RULE_attribute_clause = 417
    RULE_extended_attribute_clause = 418
    RULE_column_one_or_more_sub_clause = 419
    RULE_alter_view = 420
    RULE_alter_view_editionable = 421
    RULE_create_view = 422
    RULE_editioning_clause = 423
    RULE_view_options = 424
    RULE_view_alias_constraint = 425
    RULE_object_view_clause = 426
    RULE_inline_constraint = 427
    RULE_inline_ref_constraint = 428
    RULE_out_of_line_ref_constraint = 429
    RULE_out_of_line_constraint = 430
    RULE_constraint_state = 431
    RULE_xmltype_view_clause = 432
    RULE_xml_schema_spec = 433
    RULE_xml_schema_url = 434
    RULE_element = 435
    RULE_alter_tablespace = 436
    RULE_datafile_tempfile_clauses = 437
    RULE_tablespace_logging_clauses = 438
    RULE_tablespace_group_clause = 439
    RULE_tablespace_group_name = 440
    RULE_tablespace_state_clauses = 441
    RULE_flashback_mode_clause = 442
    RULE_new_tablespace_name = 443
    RULE_create_tablespace = 444
    RULE_permanent_tablespace_clause = 445
    RULE_tablespace_encryption_spec = 446
    RULE_logging_clause = 447
    RULE_extent_management_clause = 448
    RULE_segment_management_clause = 449
    RULE_temporary_tablespace_clause = 450
    RULE_undo_tablespace_clause = 451
    RULE_tablespace_retention_clause = 452
    RULE_create_tablespace_set = 453
    RULE_permanent_tablespace_attrs = 454
    RULE_tablespace_encryption_clause = 455
    RULE_default_tablespace_params = 456
    RULE_default_table_compression = 457
    RULE_low_high = 458
    RULE_default_index_compression = 459
    RULE_inmmemory_clause = 460
    RULE_datafile_specification = 461
    RULE_tempfile_specification = 462
    RULE_datafile_tempfile_spec = 463
    RULE_redo_log_file_spec = 464
    RULE_autoextend_clause = 465
    RULE_maxsize_clause = 466
    RULE_build_clause = 467
    RULE_parallel_clause = 468
    RULE_alter_materialized_view = 469
    RULE_alter_mv_option1 = 470
    RULE_alter_mv_refresh = 471
    RULE_rollback_segment = 472
    RULE_modify_mv_column_clause = 473
    RULE_alter_materialized_view_log = 474
    RULE_add_mv_log_column_clause = 475
    RULE_move_mv_log_clause = 476
    RULE_mv_log_augmentation = 477
    RULE_datetime_expr = 478
    RULE_interval_expr = 479
    RULE_synchronous_or_asynchronous = 480
    RULE_including_or_excluding = 481
    RULE_create_materialized_view_log = 482
    RULE_new_values_clause = 483
    RULE_mv_log_purge_clause = 484
    RULE_create_materialized_zonemap = 485
    RULE_alter_materialized_zonemap = 486
    RULE_drop_materialized_zonemap = 487
    RULE_zonemap_refresh_clause = 488
    RULE_zonemap_attributes = 489
    RULE_zonemap_name = 490
    RULE_operator_name = 491
    RULE_operator_function_name = 492
    RULE_create_zonemap_on_table = 493
    RULE_create_zonemap_as_subquery = 494
    RULE_alter_operator = 495
    RULE_drop_operator = 496
    RULE_create_operator = 497
    RULE_binding_clause = 498
    RULE_add_binding_clause = 499
    RULE_implementation_clause = 500
    RULE_primary_operator_list = 501
    RULE_primary_operator_item = 502
    RULE_operator_context_clause = 503
    RULE_using_function_clause = 504
    RULE_drop_binding_clause = 505
    RULE_create_materialized_view = 506
    RULE_scoped_table_ref_constraint = 507
    RULE_mv_column_alias = 508
    RULE_create_mv_refresh = 509
    RULE_drop_materialized_view = 510
    RULE_create_context = 511
    RULE_oracle_namespace = 512
    RULE_create_cluster = 513
    RULE_create_profile = 514
    RULE_resource_parameters = 515
    RULE_password_parameters = 516
    RULE_create_lockdown_profile = 517
    RULE_static_base_profile = 518
    RULE_dynamic_base_profile = 519
    RULE_create_outline = 520
    RULE_create_restore_point = 521
    RULE_create_role = 522
    RULE_create_table = 523
    RULE_xmltype_table = 524
    RULE_xmltype_virtual_columns = 525
    RULE_xmltype_column_properties = 526
    RULE_xmltype_storage = 527
    RULE_xmlschema_spec = 528
    RULE_object_table = 529
    RULE_object_type = 530
    RULE_oid_index_clause = 531
    RULE_oid_clause = 532
    RULE_object_properties = 533
    RULE_object_table_substitution = 534
    RULE_relational_table = 535
    RULE_immutable_table_clauses = 536
    RULE_immutable_table_no_drop_clause = 537
    RULE_immutable_table_no_delete_clause = 538
    RULE_blockchain_table_clauses = 539
    RULE_blockchain_drop_table_clause = 540
    RULE_blockchain_row_retention_clause = 541
    RULE_blockchain_hash_and_data_format_clause = 542
    RULE_collation_name = 543
    RULE_table_properties = 544
    RULE_read_only_clause = 545
    RULE_indexing_clause = 546
    RULE_attribute_clustering_clause = 547
    RULE_clustering_join = 548
    RULE_clustering_join_item = 549
    RULE_equijoin_condition = 550
    RULE_cluster_clause = 551
    RULE_clustering_columns = 552
    RULE_clustering_column_group = 553
    RULE_yes_no = 554
    RULE_zonemap_clause = 555
    RULE_logical_replication_clause = 556
    RULE_table_name = 557
    RULE_relational_property = 558
    RULE_table_partitioning_clauses = 559
    RULE_range_partitions = 560
    RULE_list_partitions = 561
    RULE_hash_partitions = 562
    RULE_individual_hash_partitions = 563
    RULE_hash_partitions_by_quantity = 564
    RULE_hash_partition_quantity = 565
    RULE_composite_range_partitions = 566
    RULE_composite_list_partitions = 567
    RULE_composite_hash_partitions = 568
    RULE_reference_partitioning = 569
    RULE_reference_partition_desc = 570
    RULE_system_partitioning = 571
    RULE_range_partition_desc = 572
    RULE_list_partition_desc = 573
    RULE_subpartition_template = 574
    RULE_hash_subpartition_quantity = 575
    RULE_subpartition_by_range = 576
    RULE_subpartition_by_list = 577
    RULE_subpartition_by_hash = 578
    RULE_subpartition_name = 579
    RULE_range_subpartition_desc = 580
    RULE_list_subpartition_desc = 581
    RULE_individual_hash_subparts = 582
    RULE_hash_subparts_by_quantity = 583
    RULE_range_values_clause = 584
    RULE_range_values_list = 585
    RULE_list_values_clause = 586
    RULE_table_partition_description = 587
    RULE_partitioning_storage_clause = 588
    RULE_lob_partitioning_storage = 589
    RULE_datatype_null_enable = 590
    RULE_size_clause = 591
    RULE_table_compression = 592
    RULE_inmemory_table_clause = 593
    RULE_inmemory_attributes = 594
    RULE_inmemory_memcompress = 595
    RULE_inmemory_priority = 596
    RULE_inmemory_distribute = 597
    RULE_inmemory_duplicate = 598
    RULE_inmemory_column_clause = 599
    RULE_physical_attributes_clause = 600
    RULE_storage_clause = 601
    RULE_deferred_segment_creation = 602
    RULE_segment_attributes_clause = 603
    RULE_physical_properties = 604
    RULE_ilm_clause = 605
    RULE_ilm_policy_clause = 606
    RULE_ilm_compression_policy = 607
    RULE_ilm_tiering_policy = 608
    RULE_ilm_after_on = 609
    RULE_segment_group = 610
    RULE_ilm_inmemory_policy = 611
    RULE_ilm_time_period = 612
    RULE_heap_org_table_clause = 613
    RULE_external_table_clause = 614
    RULE_access_driver_type = 615
    RULE_external_table_data_props = 616
    RULE_opaque_format_spec = 617
    RULE_row_movement_clause = 618
    RULE_flashback_archive_clause = 619
    RULE_log_grp = 620
    RULE_supplemental_table_logging = 621
    RULE_supplemental_log_grp_clause = 622
    RULE_supplemental_id_key_clause = 623
    RULE_allocate_extent_clause = 624
    RULE_deallocate_unused_clause = 625
    RULE_shrink_clause = 626
    RULE_records_per_block_clause = 627
    RULE_upgrade_table_clause = 628
    RULE_truncate_table = 629
    RULE_drop_table = 630
    RULE_drop_tablespace = 631
    RULE_drop_tablespace_set = 632
    RULE_including_contents_clause = 633
    RULE_drop_view = 634
    RULE_comment_on_column = 635
    RULE_enable_or_disable = 636
    RULE_allow_or_disallow = 637
    RULE_alter_synonym = 638
    RULE_create_synonym = 639
    RULE_drop_synonym = 640
    RULE_create_spfile = 641
    RULE_spfile_name = 642
    RULE_pfile_name = 643
    RULE_comment_on_table = 644
    RULE_comment_on_materialized = 645
    RULE_alter_analytic_view = 646
    RULE_alter_add_cache_clause = 647
    RULE_levels_item = 648
    RULE_measure_list = 649
    RULE_alter_drop_cache_clause = 650
    RULE_alter_attribute_dimension = 651
    RULE_alter_audit_policy = 652
    RULE_alter_cluster = 653
    RULE_drop_analytic_view = 654
    RULE_drop_attribute_dimension = 655
    RULE_drop_audit_policy = 656
    RULE_drop_flashback_archive = 657
    RULE_drop_cluster = 658
    RULE_drop_context = 659
    RULE_drop_directory = 660
    RULE_drop_diskgroup = 661
    RULE_drop_edition = 662
    RULE_truncate_cluster = 663
    RULE_cache_or_nocache = 664
    RULE_database_name = 665
    RULE_alter_database = 666
    RULE_database_clause = 667
    RULE_startup_clauses = 668
    RULE_resetlogs_or_noresetlogs = 669
    RULE_upgrade_or_downgrade = 670
    RULE_recovery_clauses = 671
    RULE_begin_or_end = 672
    RULE_general_recovery = 673
    RULE_full_database_recovery = 674
    RULE_partial_database_recovery = 675
    RULE_partial_database_recovery_10g = 676
    RULE_managed_standby_recovery = 677
    RULE_db_name = 678
    RULE_database_file_clauses = 679
    RULE_create_datafile_clause = 680
    RULE_alter_datafile_clause = 681
    RULE_alter_tempfile_clause = 682
    RULE_move_datafile_clause = 683
    RULE_logfile_clauses = 684
    RULE_add_logfile_clauses = 685
    RULE_group_redo_logfile = 686
    RULE_drop_logfile_clauses = 687
    RULE_switch_logfile_clause = 688
    RULE_supplemental_db_logging = 689
    RULE_add_or_drop = 690
    RULE_supplemental_plsql_clause = 691
    RULE_logfile_descriptor = 692
    RULE_controlfile_clauses = 693
    RULE_trace_file_clause = 694
    RULE_standby_database_clauses = 695
    RULE_activate_standby_db_clause = 696
    RULE_maximize_standby_db_clause = 697
    RULE_register_logfile_clause = 698
    RULE_commit_switchover_clause = 699
    RULE_start_standby_clause = 700
    RULE_stop_standby_clause = 701
    RULE_convert_database_clause = 702
    RULE_default_settings_clause = 703
    RULE_set_time_zone_clause = 704
    RULE_instance_clauses = 705
    RULE_security_clause = 706
    RULE_domain = 707
    RULE_database = 708
    RULE_edition_name = 709
    RULE_filenumber = 710
    RULE_filename = 711
    RULE_prepare_clause = 712
    RULE_drop_mirror_clause = 713
    RULE_lost_write_protection = 714
    RULE_cdb_fleet_clauses = 715
    RULE_lead_cdb_clause = 716
    RULE_lead_cdb_uri_clause = 717
    RULE_property_clauses = 718
    RULE_replay_upgrade_clauses = 719
    RULE_alter_database_link = 720
    RULE_password_value = 721
    RULE_link_authentication = 722
    RULE_create_database = 723
    RULE_database_logging_clauses = 724
    RULE_database_logging_sub_clause = 725
    RULE_tablespace_clauses = 726
    RULE_enable_pluggable_database = 727
    RULE_file_name_convert = 728
    RULE_filename_convert_sub_clause = 729
    RULE_tablespace_datafile_clauses = 730
    RULE_undo_mode_clause = 731
    RULE_default_tablespace = 732
    RULE_default_temp_tablespace = 733
    RULE_undo_tablespace = 734
    RULE_drop_database = 735
    RULE_create_database_link = 736
    RULE_drop_database_link = 737
    RULE_alter_tablespace_set = 738
    RULE_alter_tablespace_attrs = 739
    RULE_alter_tablespace_encryption = 740
    RULE_ts_file_name_convert = 741
    RULE_alter_role = 742
    RULE_role_identified_clause = 743
    RULE_alter_table = 744
    RULE_memoptimize_read_write_clause = 745
    RULE_alter_table_properties = 746
    RULE_alter_table_partitioning = 747
    RULE_add_table_partition = 748
    RULE_drop_table_partition = 749
    RULE_merge_table_partition = 750
    RULE_modify_table_partition = 751
    RULE_split_table_partition = 752
    RULE_truncate_table_partition = 753
    RULE_exchange_table_partition = 754
    RULE_coalesce_table_partition = 755
    RULE_alter_interval_partition = 756
    RULE_partition_extended_names = 757
    RULE_subpartition_extended_names = 758
    RULE_alter_table_properties_1 = 759
    RULE_alter_iot_clauses = 760
    RULE_alter_mapping_table_clause = 761
    RULE_alter_overflow_clause = 762
    RULE_add_overflow_clause = 763
    RULE_update_index_clauses = 764
    RULE_update_global_index_clause = 765
    RULE_update_all_indexes_clause = 766
    RULE_update_all_indexes_index_clause = 767
    RULE_update_index_partition = 768
    RULE_update_index_subpartition = 769
    RULE_enable_disable_clause = 770
    RULE_using_index_clause = 771
    RULE_index_attributes = 772
    RULE_sort_or_nosort = 773
    RULE_exceptions_clause = 774
    RULE_move_table_clause = 775
    RULE_index_org_table_clause = 776
    RULE_mapping_table_clause = 777
    RULE_key_compression = 778
    RULE_index_org_overflow_clause = 779
    RULE_column_clauses = 780
    RULE_modify_collection_retrieval = 781
    RULE_collection_item = 782
    RULE_rename_column_clause = 783
    RULE_old_column_name = 784
    RULE_new_column_name = 785
    RULE_add_modify_drop_column_clauses = 786
    RULE_drop_column_clause = 787
    RULE_modify_column_clauses = 788
    RULE_modify_col_properties = 789
    RULE_modify_col_visibility = 790
    RULE_modify_col_substitutable = 791
    RULE_add_column_clause = 792
    RULE_alter_varray_col_properties = 793
    RULE_varray_col_properties = 794
    RULE_varray_storage_clause = 795
    RULE_lob_segname = 796
    RULE_lob_item = 797
    RULE_lob_storage_parameters = 798
    RULE_lob_storage_clause = 799
    RULE_modify_lob_storage_clause = 800
    RULE_modify_lob_parameters = 801
    RULE_lob_parameters = 802
    RULE_lob_deduplicate_clause = 803
    RULE_lob_compression_clause = 804
    RULE_lob_retention_clause = 805
    RULE_encryption_spec = 806
    RULE_tablespace = 807
    RULE_varray_item = 808
    RULE_column_properties = 809
    RULE_lob_partition_storage = 810
    RULE_period_definition = 811
    RULE_start_time_column = 812
    RULE_end_time_column = 813
    RULE_column_definition = 814
    RULE_column_collation_name = 815
    RULE_identity_clause = 816
    RULE_identity_options_parentheses = 817
    RULE_identity_options = 818
    RULE_virtual_column_definition = 819
    RULE_autogenerated_sequence_definition = 820
    RULE_evaluation_edition_clause = 821
    RULE_out_of_line_part_storage = 822
    RULE_nested_table_col_properties = 823
    RULE_nested_item = 824
    RULE_substitutable_column_clause = 825
    RULE_partition_name = 826
    RULE_supplemental_logging_props = 827
    RULE_column_or_attribute = 828
    RULE_object_type_col_properties = 829
    RULE_constraint_clauses = 830
    RULE_old_constraint_name = 831
    RULE_new_constraint_name = 832
    RULE_drop_constraint_clause = 833
    RULE_add_constraint = 834
    RULE_add_constraint_clause = 835
    RULE_check_constraint = 836
    RULE_drop_constraint = 837
    RULE_enable_constraint = 838
    RULE_disable_constraint = 839
    RULE_foreign_key_clause = 840
    RULE_references_clause = 841
    RULE_on_delete_clause = 842
    RULE_unique_key_clause = 843
    RULE_primary_key_clause = 844
    RULE_anonymous_block = 845
    RULE_invoker_rights_clause = 846
    RULE_call_spec = 847
    RULE_java_spec = 848
    RULE_c_spec = 849
    RULE_c_agent_in_clause = 850
    RULE_c_parameters_clause = 851
    RULE_c_external_parameter = 852
    RULE_c_property = 853
    RULE_parameter = 854
    RULE_default_value_part = 855
    RULE_seq_of_declare_specs = 856
    RULE_declare_spec = 857
    RULE_variable_declaration = 858
    RULE_subtype_declaration = 859
    RULE_cursor_declaration = 860
    RULE_parameter_spec = 861
    RULE_exception_declaration = 862
    RULE_pragma_declaration = 863
    RULE_record_type_def = 864
    RULE_field_spec = 865
    RULE_ref_cursor_type_def = 866
    RULE_type_declaration = 867
    RULE_table_type_def = 868
    RULE_table_indexed_by_part = 869
    RULE_varray_type_def = 870
    RULE_seq_of_statements = 871
    RULE_label_declaration = 872
    RULE_statement = 873
    RULE_swallow_to_semi = 874
    RULE_assignment_statement = 875
    RULE_continue_statement = 876
    RULE_exit_statement = 877
    RULE_goto_statement = 878
    RULE_if_statement = 879
    RULE_elsif_part = 880
    RULE_else_part = 881
    RULE_loop_statement = 882
    RULE_cursor_loop_param = 883
    RULE_forall_statement = 884
    RULE_bounds_clause = 885
    RULE_between_bound = 886
    RULE_lower_bound = 887
    RULE_upper_bound = 888
    RULE_null_statement = 889
    RULE_raise_statement = 890
    RULE_return_statement = 891
    RULE_call_statement = 892
    RULE_pipe_row_statement = 893
    RULE_selection_directive = 894
    RULE_error_directive = 895
    RULE_selection_directive_body = 896
    RULE_body = 897
    RULE_exception_handler = 898
    RULE_trigger_block = 899
    RULE_tps_block = 900
    RULE_block = 901
    RULE_sql_statement = 902
    RULE_execute_immediate = 903
    RULE_dynamic_returning_clause = 904
    RULE_data_manipulation_language_statements = 905
    RULE_cursor_manipulation_statements = 906
    RULE_close_statement = 907
    RULE_open_statement = 908
    RULE_fetch_statement = 909
    RULE_variable_or_collection = 910
    RULE_open_for_statement = 911
    RULE_transaction_control_statements = 912
    RULE_set_transaction_command = 913
    RULE_set_constraint_command = 914
    RULE_commit_statement = 915
    RULE_write_clause = 916
    RULE_rollback_statement = 917
    RULE_savepoint_statement = 918
    RULE_collection_method_call = 919
    RULE_explain_statement = 920
    RULE_select_only_statement = 921
    RULE_select_statement = 922
    RULE_with_clause = 923
    RULE_with_factoring_clause = 924
    RULE_subquery_factoring_clause = 925
    RULE_search_clause = 926
    RULE_cycle_clause = 927
    RULE_subav_factoring_clause = 928
    RULE_subav_clause = 929
    RULE_hierarchies_clause = 930
    RULE_filter_clauses = 931
    RULE_filter_clause = 932
    RULE_add_calcs_clause = 933
    RULE_add_calc_meas_clause = 934
    RULE_subquery = 935
    RULE_subquery_basic_elements = 936
    RULE_subquery_operation_part = 937
    RULE_query_block = 938
    RULE_selected_list = 939
    RULE_from_clause = 940
    RULE_select_list_elements = 941
    RULE_table_ref_list = 942
    RULE_table_ref = 943
    RULE_table_ref_aux = 944
    RULE_table_ref_aux_internal = 945
    RULE_join_clause = 946
    RULE_join_on_part = 947
    RULE_join_using_part = 948
    RULE_outer_join_type = 949
    RULE_query_partition_clause = 950
    RULE_flashback_query_clause = 951
    RULE_pivot_clause = 952
    RULE_pivot_element = 953
    RULE_pivot_for_clause = 954
    RULE_pivot_in_clause = 955
    RULE_pivot_in_clause_element = 956
    RULE_pivot_in_clause_elements = 957
    RULE_unpivot_clause = 958
    RULE_unpivot_in_clause = 959
    RULE_unpivot_in_elements = 960
    RULE_hierarchical_query_clause = 961
    RULE_start_part = 962
    RULE_group_by_clause = 963
    RULE_group_by_elements = 964
    RULE_rollup_cube_clause = 965
    RULE_grouping_sets_clause = 966
    RULE_grouping_sets_elements = 967
    RULE_having_clause = 968
    RULE_model_clause = 969
    RULE_cell_reference_options = 970
    RULE_return_rows_clause = 971
    RULE_reference_model = 972
    RULE_main_model = 973
    RULE_model_column_clauses = 974
    RULE_model_column_partition_part = 975
    RULE_model_column_list = 976
    RULE_model_column = 977
    RULE_model_rules_clause = 978
    RULE_model_rules_part = 979
    RULE_model_rules_element = 980
    RULE_cell_assignment = 981
    RULE_model_iterate_clause = 982
    RULE_until_part = 983
    RULE_order_by_clause = 984
    RULE_order_by_elements = 985
    RULE_offset_clause = 986
    RULE_fetch_clause = 987
    RULE_for_update_clause = 988
    RULE_for_update_of_part = 989
    RULE_for_update_options = 990
    RULE_update_statement = 991
    RULE_update_set_clause = 992
    RULE_column_based_update_set_clause = 993
    RULE_delete_statement = 994
    RULE_insert_statement = 995
    RULE_single_table_insert = 996
    RULE_multi_table_insert = 997
    RULE_multi_table_element = 998
    RULE_conditional_insert_clause = 999
    RULE_conditional_insert_when_part = 1000
    RULE_conditional_insert_else_part = 1001
    RULE_insert_into_clause = 1002
    RULE_values_clause = 1003
    RULE_merge_statement = 1004
    RULE_merge_update_clause = 1005
    RULE_merge_element = 1006
    RULE_merge_update_delete_part = 1007
    RULE_merge_insert_clause = 1008
    RULE_selected_tableview = 1009
    RULE_lock_table_statement = 1010
    RULE_wait_nowait_part = 1011
    RULE_lock_table_element = 1012
    RULE_lock_mode = 1013
    RULE_general_table_ref = 1014
    RULE_static_returning_clause = 1015
    RULE_error_logging_clause = 1016
    RULE_error_logging_into_part = 1017
    RULE_error_logging_reject_part = 1018
    RULE_dml_table_expression_clause = 1019
    RULE_table_collection_expression = 1020
    RULE_subquery_restriction_clause = 1021
    RULE_sample_clause = 1022
    RULE_seed_part = 1023
    RULE_condition = 1024
    RULE_expressions = 1025
    RULE_expression = 1026
    RULE_cursor_expression = 1027
    RULE_logical_expression = 1028
    RULE_unary_logical_expression = 1029
    RULE_unary_logical_operation = 1030
    RULE_logical_operation = 1031
    RULE_multiset_expression = 1032
    RULE_relational_expression = 1033
    RULE_compound_expression = 1034
    RULE_relational_operator = 1035
    RULE_in_elements = 1036
    RULE_between_elements = 1037
    RULE_concatenation = 1038
    RULE_interval_expression = 1039
    RULE_model_expression = 1040
    RULE_model_expression_element = 1041
    RULE_single_column_for_loop = 1042
    RULE_multi_column_for_loop = 1043
    RULE_unary_expression = 1044
    RULE_implicit_cursor_expression = 1045
    RULE_collection_expression = 1046
    RULE_case_statement = 1047
    RULE_simple_case_statement = 1048
    RULE_simple_case_when_part = 1049
    RULE_searched_case_statement = 1050
    RULE_searched_case_when_part = 1051
    RULE_case_else_part = 1052
    RULE_atom = 1053
    RULE_quantified_expression = 1054
    RULE_string_function = 1055
    RULE_standard_function = 1056
    RULE_json_function = 1057
    RULE_json_object_content = 1058
    RULE_json_object_entry = 1059
    RULE_json_table_clause = 1060
    RULE_json_array_element = 1061
    RULE_json_on_null_clause = 1062
    RULE_json_return_clause = 1063
    RULE_json_transform_op = 1064
    RULE_json_column_clause = 1065
    RULE_json_column_definition = 1066
    RULE_json_query_returning_clause = 1067
    RULE_json_query_return_type = 1068
    RULE_json_query_wrapper_clause = 1069
    RULE_json_query_on_error_clause = 1070
    RULE_json_query_on_empty_clause = 1071
    RULE_json_value_return_clause = 1072
    RULE_json_value_return_type = 1073
    RULE_json_value_on_mismatch_clause = 1074
    RULE_literal = 1075
    RULE_numeric_function_wrapper = 1076
    RULE_numeric_function = 1077
    RULE_listagg_overflow_clause = 1078
    RULE_other_function = 1079
    RULE_over_clause_keyword = 1080
    RULE_within_or_over_clause_keyword = 1081
    RULE_standard_prediction_function_keyword = 1082
    RULE_over_clause = 1083
    RULE_windowing_clause = 1084
    RULE_windowing_type = 1085
    RULE_windowing_elements = 1086
    RULE_using_clause = 1087
    RULE_using_element = 1088
    RULE_collect_order_by_part = 1089
    RULE_within_or_over_part = 1090
    RULE_string_delimiter = 1091
    RULE_cost_matrix_clause = 1092
    RULE_xml_passing_clause = 1093
    RULE_xml_attributes_clause = 1094
    RULE_xml_namespaces_clause = 1095
    RULE_xml_table_column = 1096
    RULE_xml_general_default_part = 1097
    RULE_xml_multiuse_expression_element = 1098
    RULE_xmlroot_param_version_part = 1099
    RULE_xmlroot_param_standalone_part = 1100
    RULE_xmlserialize_param_enconding_part = 1101
    RULE_xmlserialize_param_version_part = 1102
    RULE_xmlserialize_param_ident_part = 1103
    RULE_sql_plus_command_no_semicolon = 1104
    RULE_sql_plus_command = 1105
    RULE_start_command = 1106
    RULE_whenever_command = 1107
    RULE_set_command = 1108
    RULE_timing_command = 1109
    RULE_partition_extension_clause = 1110
    RULE_column_alias = 1111
    RULE_table_alias = 1112
    RULE_where_clause = 1113
    RULE_quantitative_where_stmt = 1114
    RULE_into_clause = 1115
    RULE_xml_column_name = 1116
    RULE_cost_class_name = 1117
    RULE_attribute_name = 1118
    RULE_savepoint_name = 1119
    RULE_rollback_segment_name = 1120
    RULE_table_var_name = 1121
    RULE_schema_name = 1122
    RULE_routine_name = 1123
    RULE_package_name = 1124
    RULE_implementation_type_name = 1125
    RULE_parameter_name = 1126
    RULE_reference_model_name = 1127
    RULE_main_model_name = 1128
    RULE_container_tableview_name = 1129
    RULE_aggregate_function_name = 1130
    RULE_query_name = 1131
    RULE_grantee_name = 1132
    RULE_role_name = 1133
    RULE_constraint_name = 1134
    RULE_label_name = 1135
    RULE_type_name = 1136
    RULE_sequence_name = 1137
    RULE_exception_name = 1138
    RULE_function_name = 1139
    RULE_procedure_name = 1140
    RULE_trigger_name = 1141
    RULE_variable_name = 1142
    RULE_index_name = 1143
    RULE_cursor_name = 1144
    RULE_record_name = 1145
    RULE_collection_name = 1146
    RULE_link_name = 1147
    RULE_local_link_name = 1148
    RULE_connection_qualifier = 1149
    RULE_column_name = 1150
    RULE_tableview_name = 1151
    RULE_xmltable = 1152
    RULE_char_set_name = 1153
    RULE_synonym_name = 1154
    RULE_schema_object_name = 1155
    RULE_dir_object_name = 1156
    RULE_user_object_name = 1157
    RULE_grant_object_name = 1158
    RULE_column_list = 1159
    RULE_paren_column_list = 1160
    RULE_keep_clause = 1161
    RULE_function_argument = 1162
    RULE_function_argument_analytic = 1163
    RULE_function_argument_modeling = 1164
    RULE_respect_or_ignore_nulls = 1165
    RULE_argument = 1166
    RULE_type_spec = 1167
    RULE_datatype = 1168
    RULE_precision_part = 1169
    RULE_native_datatype_element = 1170
    RULE_bind_variable = 1171
    RULE_general_element = 1172
    RULE_general_element_part = 1173
    RULE_table_element = 1174
    RULE_object_privilege = 1175
    RULE_system_privilege = 1176
    RULE_constant = 1177
    RULE_numeric = 1178
    RULE_numeric_negative = 1179
    RULE_quoted_string = 1180
    RULE_identifier = 1181
    RULE_id_expression = 1182
    RULE_inquiry_directive = 1183
    RULE_outer_join_sign = 1184
    RULE_regular_id = 1185
    RULE_non_reserved_keywords_in_18c = 1186
    RULE_non_reserved_keywords_in_12c = 1187
    RULE_non_reserved_keywords_pre12c = 1188
    RULE_string_function_name = 1189
    RULE_numeric_function_name = 1190

    ruleNames =  [ "sql_script", "unit_statement", "alter_diskgroup", "add_disk_clause", 
                   "drop_disk_clause", "resize_disk_clause", "replace_disk_clause", 
                   "wait_nowait", "rename_disk_clause", "disk_online_clause", 
                   "disk_offline_clause", "timeout_clause", "rebalance_diskgroup_clause", 
                   "phase", "check_diskgroup_clause", "diskgroup_template_clauses", 
                   "qualified_template_clause", "redundancy_clause", "striping_clause", 
                   "force_noforce", "diskgroup_directory_clauses", "dir_name", 
                   "diskgroup_alias_clauses", "diskgroup_volume_clauses", 
                   "add_volume_clause", "modify_volume_clause", "diskgroup_attributes", 
                   "modify_diskgroup_file", "disk_region_clause", "drop_diskgroup_file_clause", 
                   "convert_redundancy_clause", "usergroup_clauses", "user_clauses", 
                   "file_permissions_clause", "file_owner_clause", "scrub_clause", 
                   "quotagroup_clauses", "property_name", "property_value", 
                   "filegroup_clauses", "add_filegroup_clause", "modify_filegroup_clause", 
                   "move_to_filegroup_clause", "drop_filegroup_clause", 
                   "quorum_regular", "undrop_disk_clause", "diskgroup_availability", 
                   "enable_disable_volume", "drop_function", "alter_flashback_archive", 
                   "alter_hierarchy", "alter_function", "alter_java", "match_string", 
                   "create_function_body", "sql_macro_body", "parallel_enable_clause", 
                   "partition_by_clause", "result_cache_clause", "accessible_by_clause", 
                   "default_collation_clause", "aggregate_clause", "pipelined_using_clause", 
                   "accessor", "relies_on_part", "streaming_clause", "alter_outline", 
                   "outline_options", "alter_lockdown_profile", "lockdown_feature", 
                   "lockdown_options", "lockdown_statements", "statement_clauses", 
                   "clause_options", "option_values", "string_list", "disable_enable", 
                   "drop_lockdown_profile", "drop_package", "alter_package", 
                   "create_package", "create_package_body", "package_obj_spec", 
                   "procedure_spec", "function_spec", "package_obj_body", 
                   "alter_pmem_filestore", "drop_pmem_filestore", "drop_procedure", 
                   "alter_procedure", "function_body", "procedure_body", 
                   "create_procedure_body", "alter_resource_cost", "drop_outline", 
                   "alter_rollback_segment", "drop_restore_point", "drop_rollback_segment", 
                   "drop_role", "create_pmem_filestore", "pmem_filestore_options", 
                   "file_path", "create_rollback_segment", "drop_trigger", 
                   "alter_trigger", "create_trigger", "trigger_follows_clause", 
                   "trigger_when_clause", "simple_dml_trigger", "for_each_row", 
                   "compound_dml_trigger", "non_dml_trigger", "trigger_body", 
                   "routine_clause", "compound_trigger_block", "timing_point_section", 
                   "non_dml_event", "dml_event_clause", "dml_event_element", 
                   "dml_event_nested_clause", "referencing_clause", "referencing_element", 
                   "drop_type", "alter_type", "compile_type_clause", "replace_type_clause", 
                   "alter_method_spec", "alter_method_element", "alter_attribute_definition", 
                   "attribute_definition", "alter_collection_clauses", "dependent_handling_clause", 
                   "dependent_exceptions_part", "create_type", "type_definition", 
                   "object_type_def", "object_as_part", "object_under_part", 
                   "nested_table_type_def", "sqlj_object_type", "type_body", 
                   "type_body_elements", "map_order_func_declaration", "subprog_decl_in_type", 
                   "proc_decl_in_type", "func_decl_in_type", "constructor_declaration", 
                   "modifier_clause", "object_member_spec", "sqlj_object_type_attr", 
                   "element_spec", "element_spec_options", "subprogram_spec", 
                   "overriding_subprogram_spec", "overriding_function_spec", 
                   "type_procedure_spec", "type_function_spec", "constructor_spec", 
                   "map_order_function_spec", "pragma_clause", "pragma_elements", 
                   "type_elements_parameter", "drop_sequence", "alter_sequence", 
                   "alter_session", "alter_session_set_clause", "create_sequence", 
                   "sequence_spec", "sequence_start_clause", "create_analytic_view", 
                   "classification_clause", "caption_clause", "description_clause", 
                   "classification_item", "language", "cav_using_clause", 
                   "dim_by_clause", "dim_key", "dim_ref", "hier_ref", "measures_clause", 
                   "av_measure", "base_meas_clause", "meas_aggregate_clause", 
                   "calc_meas_clause", "default_measure_clause", "default_aggregate_clause", 
                   "cache_clause", "cache_specification", "levels_clause", 
                   "level_specification", "level_group_type", "fact_columns_clause", 
                   "qry_transform_clause", "create_attribute_dimension", 
                   "ad_using_clause", "source_clause", "join_path_clause", 
                   "join_condition", "join_condition_item", "attributes_clause", 
                   "ad_attributes_clause", "ad_level_clause", "key_clause", 
                   "alternate_key_clause", "dim_order_clause", "all_clause", 
                   "create_audit_policy", "privilege_audit_clause", "action_audit_clause", 
                   "system_actions", "standard_actions", "actions_clause", 
                   "object_action", "system_action", "component_actions", 
                   "component_action", "role_audit_clause", "create_controlfile", 
                   "controlfile_options", "logfile_clause", "character_set_clause", 
                   "file_specification", "create_diskgroup", "qualified_disk_clause", 
                   "create_edition", "create_flashback_archive", "flashback_archive_quota", 
                   "flashback_archive_retention", "create_hierarchy", "hier_using_clause", 
                   "level_hier_clause", "hier_attrs_clause", "hier_attr_clause", 
                   "hier_attr_name", "create_index", "cluster_index_clause", 
                   "cluster_name", "table_index_clause", "bitmap_join_index_clause", 
                   "index_expr", "index_properties", "domain_index_clause", 
                   "local_domain_index_clause", "xmlindex_clause", "local_xmlindex_clause", 
                   "global_partitioned_index", "index_partitioning_clause", 
                   "index_partitioning_values_list", "local_partitioned_index", 
                   "on_range_partitioned_table", "on_list_partitioned_table", 
                   "partitioned_table", "on_hash_partitioned_table", "on_hash_partitioned_clause", 
                   "on_comp_partitioned_table", "on_comp_partitioned_clause", 
                   "index_subpartition_clause", "index_subpartition_subclause", 
                   "odci_parameters", "indextype", "alter_index", "alter_index_ops_set1", 
                   "alter_index_ops_set2", "visible_or_invisible", "monitoring_nomonitoring", 
                   "rebuild_clause", "alter_index_partitioning", "modify_index_default_attrs", 
                   "add_hash_index_partition", "coalesce_index_partition", 
                   "modify_index_partition", "modify_index_partitions_ops", 
                   "rename_index_partition", "drop_index_partition", "split_index_partition", 
                   "index_partition_description", "modify_index_subpartition", 
                   "partition_name_old", "new_partition_name", "new_index_name", 
                   "alter_inmemory_join_group", "create_user", "alter_user", 
                   "drop_user", "alter_identified_by", "identified_by", 
                   "identified_other_clause", "user_tablespace_clause", 
                   "quota_clause", "profile_clause", "role_clause", "user_default_role_clause", 
                   "password_expire_clause", "user_lock_clause", "user_editions_clause", 
                   "alter_user_editions_clause", "proxy_clause", "container_names", 
                   "set_container_data", "add_rem_container_data", "container_data_clause", 
                   "administer_key_management", "keystore_management_clauses", 
                   "create_keystore", "open_keystore", "force_keystore", 
                   "close_keystore", "backup_keystore", "alter_keystore_password", 
                   "merge_into_new_keystore", "merge_into_existing_keystore", 
                   "isolate_keystore", "unite_keystore", "key_management_clauses", 
                   "set_key", "create_key", "mkid", "mk", "use_key", "set_key_tag", 
                   "export_keys", "import_keys", "migrate_keys", "reverse_migrate_keys", 
                   "move_keys", "identified_by_store", "using_algorithm_clause", 
                   "using_tag_clause", "secret_management_clauses", "add_update_secret", 
                   "delete_secret", "add_update_secret_seps", "delete_secret_seps", 
                   "zero_downtime_software_patching_clauses", "with_backup_clause", 
                   "identified_by_password_clause", "keystore_password", 
                   "path", "secret", "analyze", "partition_extention_clause", 
                   "validation_clauses", "compute_clauses", "for_clause", 
                   "online_or_offline", "into_clause1", "partition_key_value", 
                   "subpartition_key_value", "associate_statistics", "column_association", 
                   "function_association", "indextype_name", "using_statistics_type", 
                   "statistics_type_name", "default_cost_clause", "cpu_cost", 
                   "io_cost", "network_cost", "default_selectivity_clause", 
                   "default_selectivity", "storage_table_clause", "unified_auditing", 
                   "policy_name", "audit_traditional", "audit_direct_path", 
                   "audit_container_clause", "audit_operation_clause", "auditing_by_clause", 
                   "audit_user", "audit_schema_object_clause", "sql_operation", 
                   "auditing_on_clause", "model_name", "object_name", "profile_name", 
                   "sql_statement_shortcut", "drop_index", "disassociate_statistics", 
                   "drop_indextype", "drop_inmemory_join_group", "flashback_table", 
                   "restore_point", "purge_statement", "noaudit_statement", 
                   "rename_object", "grant_statement", "container_clause", 
                   "revoke_statement", "revoke_system_privilege", "revokee_clause", 
                   "revoke_object_privileges", "on_object_clause", "revoke_roles_from_programs", 
                   "program_unit", "create_dimension", "create_directory", 
                   "directory_name", "directory_path", "create_inmemory_join_group", 
                   "drop_hierarchy", "alter_library", "drop_java", "drop_library", 
                   "create_java", "create_library", "plsql_library_source", 
                   "credential_name", "library_editionable", "library_debug", 
                   "compiler_parameters_clause", "parameter_value", "library_name", 
                   "alter_dimension", "level_clause", "hierarchy_clause", 
                   "dimension_join_clause", "attribute_clause", "extended_attribute_clause", 
                   "column_one_or_more_sub_clause", "alter_view", "alter_view_editionable", 
                   "create_view", "editioning_clause", "view_options", "view_alias_constraint", 
                   "object_view_clause", "inline_constraint", "inline_ref_constraint", 
                   "out_of_line_ref_constraint", "out_of_line_constraint", 
                   "constraint_state", "xmltype_view_clause", "xml_schema_spec", 
                   "xml_schema_url", "element", "alter_tablespace", "datafile_tempfile_clauses", 
                   "tablespace_logging_clauses", "tablespace_group_clause", 
                   "tablespace_group_name", "tablespace_state_clauses", 
                   "flashback_mode_clause", "new_tablespace_name", "create_tablespace", 
                   "permanent_tablespace_clause", "tablespace_encryption_spec", 
                   "logging_clause", "extent_management_clause", "segment_management_clause", 
                   "temporary_tablespace_clause", "undo_tablespace_clause", 
                   "tablespace_retention_clause", "create_tablespace_set", 
                   "permanent_tablespace_attrs", "tablespace_encryption_clause", 
                   "default_tablespace_params", "default_table_compression", 
                   "low_high", "default_index_compression", "inmmemory_clause", 
                   "datafile_specification", "tempfile_specification", "datafile_tempfile_spec", 
                   "redo_log_file_spec", "autoextend_clause", "maxsize_clause", 
                   "build_clause", "parallel_clause", "alter_materialized_view", 
                   "alter_mv_option1", "alter_mv_refresh", "rollback_segment", 
                   "modify_mv_column_clause", "alter_materialized_view_log", 
                   "add_mv_log_column_clause", "move_mv_log_clause", "mv_log_augmentation", 
                   "datetime_expr", "interval_expr", "synchronous_or_asynchronous", 
                   "including_or_excluding", "create_materialized_view_log", 
                   "new_values_clause", "mv_log_purge_clause", "create_materialized_zonemap", 
                   "alter_materialized_zonemap", "drop_materialized_zonemap", 
                   "zonemap_refresh_clause", "zonemap_attributes", "zonemap_name", 
                   "operator_name", "operator_function_name", "create_zonemap_on_table", 
                   "create_zonemap_as_subquery", "alter_operator", "drop_operator", 
                   "create_operator", "binding_clause", "add_binding_clause", 
                   "implementation_clause", "primary_operator_list", "primary_operator_item", 
                   "operator_context_clause", "using_function_clause", "drop_binding_clause", 
                   "create_materialized_view", "scoped_table_ref_constraint", 
                   "mv_column_alias", "create_mv_refresh", "drop_materialized_view", 
                   "create_context", "oracle_namespace", "create_cluster", 
                   "create_profile", "resource_parameters", "password_parameters", 
                   "create_lockdown_profile", "static_base_profile", "dynamic_base_profile", 
                   "create_outline", "create_restore_point", "create_role", 
                   "create_table", "xmltype_table", "xmltype_virtual_columns", 
                   "xmltype_column_properties", "xmltype_storage", "xmlschema_spec", 
                   "object_table", "object_type", "oid_index_clause", "oid_clause", 
                   "object_properties", "object_table_substitution", "relational_table", 
                   "immutable_table_clauses", "immutable_table_no_drop_clause", 
                   "immutable_table_no_delete_clause", "blockchain_table_clauses", 
                   "blockchain_drop_table_clause", "blockchain_row_retention_clause", 
                   "blockchain_hash_and_data_format_clause", "collation_name", 
                   "table_properties", "read_only_clause", "indexing_clause", 
                   "attribute_clustering_clause", "clustering_join", "clustering_join_item", 
                   "equijoin_condition", "cluster_clause", "clustering_columns", 
                   "clustering_column_group", "yes_no", "zonemap_clause", 
                   "logical_replication_clause", "table_name", "relational_property", 
                   "table_partitioning_clauses", "range_partitions", "list_partitions", 
                   "hash_partitions", "individual_hash_partitions", "hash_partitions_by_quantity", 
                   "hash_partition_quantity", "composite_range_partitions", 
                   "composite_list_partitions", "composite_hash_partitions", 
                   "reference_partitioning", "reference_partition_desc", 
                   "system_partitioning", "range_partition_desc", "list_partition_desc", 
                   "subpartition_template", "hash_subpartition_quantity", 
                   "subpartition_by_range", "subpartition_by_list", "subpartition_by_hash", 
                   "subpartition_name", "range_subpartition_desc", "list_subpartition_desc", 
                   "individual_hash_subparts", "hash_subparts_by_quantity", 
                   "range_values_clause", "range_values_list", "list_values_clause", 
                   "table_partition_description", "partitioning_storage_clause", 
                   "lob_partitioning_storage", "datatype_null_enable", "size_clause", 
                   "table_compression", "inmemory_table_clause", "inmemory_attributes", 
                   "inmemory_memcompress", "inmemory_priority", "inmemory_distribute", 
                   "inmemory_duplicate", "inmemory_column_clause", "physical_attributes_clause", 
                   "storage_clause", "deferred_segment_creation", "segment_attributes_clause", 
                   "physical_properties", "ilm_clause", "ilm_policy_clause", 
                   "ilm_compression_policy", "ilm_tiering_policy", "ilm_after_on", 
                   "segment_group", "ilm_inmemory_policy", "ilm_time_period", 
                   "heap_org_table_clause", "external_table_clause", "access_driver_type", 
                   "external_table_data_props", "opaque_format_spec", "row_movement_clause", 
                   "flashback_archive_clause", "log_grp", "supplemental_table_logging", 
                   "supplemental_log_grp_clause", "supplemental_id_key_clause", 
                   "allocate_extent_clause", "deallocate_unused_clause", 
                   "shrink_clause", "records_per_block_clause", "upgrade_table_clause", 
                   "truncate_table", "drop_table", "drop_tablespace", "drop_tablespace_set", 
                   "including_contents_clause", "drop_view", "comment_on_column", 
                   "enable_or_disable", "allow_or_disallow", "alter_synonym", 
                   "create_synonym", "drop_synonym", "create_spfile", "spfile_name", 
                   "pfile_name", "comment_on_table", "comment_on_materialized", 
                   "alter_analytic_view", "alter_add_cache_clause", "levels_item", 
                   "measure_list", "alter_drop_cache_clause", "alter_attribute_dimension", 
                   "alter_audit_policy", "alter_cluster", "drop_analytic_view", 
                   "drop_attribute_dimension", "drop_audit_policy", "drop_flashback_archive", 
                   "drop_cluster", "drop_context", "drop_directory", "drop_diskgroup", 
                   "drop_edition", "truncate_cluster", "cache_or_nocache", 
                   "database_name", "alter_database", "database_clause", 
                   "startup_clauses", "resetlogs_or_noresetlogs", "upgrade_or_downgrade", 
                   "recovery_clauses", "begin_or_end", "general_recovery", 
                   "full_database_recovery", "partial_database_recovery", 
                   "partial_database_recovery_10g", "managed_standby_recovery", 
                   "db_name", "database_file_clauses", "create_datafile_clause", 
                   "alter_datafile_clause", "alter_tempfile_clause", "move_datafile_clause", 
                   "logfile_clauses", "add_logfile_clauses", "group_redo_logfile", 
                   "drop_logfile_clauses", "switch_logfile_clause", "supplemental_db_logging", 
                   "add_or_drop", "supplemental_plsql_clause", "logfile_descriptor", 
                   "controlfile_clauses", "trace_file_clause", "standby_database_clauses", 
                   "activate_standby_db_clause", "maximize_standby_db_clause", 
                   "register_logfile_clause", "commit_switchover_clause", 
                   "start_standby_clause", "stop_standby_clause", "convert_database_clause", 
                   "default_settings_clause", "set_time_zone_clause", "instance_clauses", 
                   "security_clause", "domain", "database", "edition_name", 
                   "filenumber", "filename", "prepare_clause", "drop_mirror_clause", 
                   "lost_write_protection", "cdb_fleet_clauses", "lead_cdb_clause", 
                   "lead_cdb_uri_clause", "property_clauses", "replay_upgrade_clauses", 
                   "alter_database_link", "password_value", "link_authentication", 
                   "create_database", "database_logging_clauses", "database_logging_sub_clause", 
                   "tablespace_clauses", "enable_pluggable_database", "file_name_convert", 
                   "filename_convert_sub_clause", "tablespace_datafile_clauses", 
                   "undo_mode_clause", "default_tablespace", "default_temp_tablespace", 
                   "undo_tablespace", "drop_database", "create_database_link", 
                   "drop_database_link", "alter_tablespace_set", "alter_tablespace_attrs", 
                   "alter_tablespace_encryption", "ts_file_name_convert", 
                   "alter_role", "role_identified_clause", "alter_table", 
                   "memoptimize_read_write_clause", "alter_table_properties", 
                   "alter_table_partitioning", "add_table_partition", "drop_table_partition", 
                   "merge_table_partition", "modify_table_partition", "split_table_partition", 
                   "truncate_table_partition", "exchange_table_partition", 
                   "coalesce_table_partition", "alter_interval_partition", 
                   "partition_extended_names", "subpartition_extended_names", 
                   "alter_table_properties_1", "alter_iot_clauses", "alter_mapping_table_clause", 
                   "alter_overflow_clause", "add_overflow_clause", "update_index_clauses", 
                   "update_global_index_clause", "update_all_indexes_clause", 
                   "update_all_indexes_index_clause", "update_index_partition", 
                   "update_index_subpartition", "enable_disable_clause", 
                   "using_index_clause", "index_attributes", "sort_or_nosort", 
                   "exceptions_clause", "move_table_clause", "index_org_table_clause", 
                   "mapping_table_clause", "key_compression", "index_org_overflow_clause", 
                   "column_clauses", "modify_collection_retrieval", "collection_item", 
                   "rename_column_clause", "old_column_name", "new_column_name", 
                   "add_modify_drop_column_clauses", "drop_column_clause", 
                   "modify_column_clauses", "modify_col_properties", "modify_col_visibility", 
                   "modify_col_substitutable", "add_column_clause", "alter_varray_col_properties", 
                   "varray_col_properties", "varray_storage_clause", "lob_segname", 
                   "lob_item", "lob_storage_parameters", "lob_storage_clause", 
                   "modify_lob_storage_clause", "modify_lob_parameters", 
                   "lob_parameters", "lob_deduplicate_clause", "lob_compression_clause", 
                   "lob_retention_clause", "encryption_spec", "tablespace", 
                   "varray_item", "column_properties", "lob_partition_storage", 
                   "period_definition", "start_time_column", "end_time_column", 
                   "column_definition", "column_collation_name", "identity_clause", 
                   "identity_options_parentheses", "identity_options", "virtual_column_definition", 
                   "autogenerated_sequence_definition", "evaluation_edition_clause", 
                   "out_of_line_part_storage", "nested_table_col_properties", 
                   "nested_item", "substitutable_column_clause", "partition_name", 
                   "supplemental_logging_props", "column_or_attribute", 
                   "object_type_col_properties", "constraint_clauses", "old_constraint_name", 
                   "new_constraint_name", "drop_constraint_clause", "add_constraint", 
                   "add_constraint_clause", "check_constraint", "drop_constraint", 
                   "enable_constraint", "disable_constraint", "foreign_key_clause", 
                   "references_clause", "on_delete_clause", "unique_key_clause", 
                   "primary_key_clause", "anonymous_block", "invoker_rights_clause", 
                   "call_spec", "java_spec", "c_spec", "c_agent_in_clause", 
                   "c_parameters_clause", "c_external_parameter", "c_property", 
                   "parameter", "default_value_part", "seq_of_declare_specs", 
                   "declare_spec", "variable_declaration", "subtype_declaration", 
                   "cursor_declaration", "parameter_spec", "exception_declaration", 
                   "pragma_declaration", "record_type_def", "field_spec", 
                   "ref_cursor_type_def", "type_declaration", "table_type_def", 
                   "table_indexed_by_part", "varray_type_def", "seq_of_statements", 
                   "label_declaration", "statement", "swallow_to_semi", 
                   "assignment_statement", "continue_statement", "exit_statement", 
                   "goto_statement", "if_statement", "elsif_part", "else_part", 
                   "loop_statement", "cursor_loop_param", "forall_statement", 
                   "bounds_clause", "between_bound", "lower_bound", "upper_bound", 
                   "null_statement", "raise_statement", "return_statement", 
                   "call_statement", "pipe_row_statement", "selection_directive", 
                   "error_directive", "selection_directive_body", "body", 
                   "exception_handler", "trigger_block", "tps_block", "block", 
                   "sql_statement", "execute_immediate", "dynamic_returning_clause", 
                   "data_manipulation_language_statements", "cursor_manipulation_statements", 
                   "close_statement", "open_statement", "fetch_statement", 
                   "variable_or_collection", "open_for_statement", "transaction_control_statements", 
                   "set_transaction_command", "set_constraint_command", 
                   "commit_statement", "write_clause", "rollback_statement", 
                   "savepoint_statement", "collection_method_call", "explain_statement", 
                   "select_only_statement", "select_statement", "with_clause", 
                   "with_factoring_clause", "subquery_factoring_clause", 
                   "search_clause", "cycle_clause", "subav_factoring_clause", 
                   "subav_clause", "hierarchies_clause", "filter_clauses", 
                   "filter_clause", "add_calcs_clause", "add_calc_meas_clause", 
                   "subquery", "subquery_basic_elements", "subquery_operation_part", 
                   "query_block", "selected_list", "from_clause", "select_list_elements", 
                   "table_ref_list", "table_ref", "table_ref_aux", "table_ref_aux_internal", 
                   "join_clause", "join_on_part", "join_using_part", "outer_join_type", 
                   "query_partition_clause", "flashback_query_clause", "pivot_clause", 
                   "pivot_element", "pivot_for_clause", "pivot_in_clause", 
                   "pivot_in_clause_element", "pivot_in_clause_elements", 
                   "unpivot_clause", "unpivot_in_clause", "unpivot_in_elements", 
                   "hierarchical_query_clause", "start_part", "group_by_clause", 
                   "group_by_elements", "rollup_cube_clause", "grouping_sets_clause", 
                   "grouping_sets_elements", "having_clause", "model_clause", 
                   "cell_reference_options", "return_rows_clause", "reference_model", 
                   "main_model", "model_column_clauses", "model_column_partition_part", 
                   "model_column_list", "model_column", "model_rules_clause", 
                   "model_rules_part", "model_rules_element", "cell_assignment", 
                   "model_iterate_clause", "until_part", "order_by_clause", 
                   "order_by_elements", "offset_clause", "fetch_clause", 
                   "for_update_clause", "for_update_of_part", "for_update_options", 
                   "update_statement", "update_set_clause", "column_based_update_set_clause", 
                   "delete_statement", "insert_statement", "single_table_insert", 
                   "multi_table_insert", "multi_table_element", "conditional_insert_clause", 
                   "conditional_insert_when_part", "conditional_insert_else_part", 
                   "insert_into_clause", "values_clause", "merge_statement", 
                   "merge_update_clause", "merge_element", "merge_update_delete_part", 
                   "merge_insert_clause", "selected_tableview", "lock_table_statement", 
                   "wait_nowait_part", "lock_table_element", "lock_mode", 
                   "general_table_ref", "static_returning_clause", "error_logging_clause", 
                   "error_logging_into_part", "error_logging_reject_part", 
                   "dml_table_expression_clause", "table_collection_expression", 
                   "subquery_restriction_clause", "sample_clause", "seed_part", 
                   "condition", "expressions", "expression", "cursor_expression", 
                   "logical_expression", "unary_logical_expression", "unary_logical_operation", 
                   "logical_operation", "multiset_expression", "relational_expression", 
                   "compound_expression", "relational_operator", "in_elements", 
                   "between_elements", "concatenation", "interval_expression", 
                   "model_expression", "model_expression_element", "single_column_for_loop", 
                   "multi_column_for_loop", "unary_expression", "implicit_cursor_expression", 
                   "collection_expression", "case_statement", "simple_case_statement", 
                   "simple_case_when_part", "searched_case_statement", "searched_case_when_part", 
                   "case_else_part", "atom", "quantified_expression", "string_function", 
                   "standard_function", "json_function", "json_object_content", 
                   "json_object_entry", "json_table_clause", "json_array_element", 
                   "json_on_null_clause", "json_return_clause", "json_transform_op", 
                   "json_column_clause", "json_column_definition", "json_query_returning_clause", 
                   "json_query_return_type", "json_query_wrapper_clause", 
                   "json_query_on_error_clause", "json_query_on_empty_clause", 
                   "json_value_return_clause", "json_value_return_type", 
                   "json_value_on_mismatch_clause", "literal", "numeric_function_wrapper", 
                   "numeric_function", "listagg_overflow_clause", "other_function", 
                   "over_clause_keyword", "within_or_over_clause_keyword", 
                   "standard_prediction_function_keyword", "over_clause", 
                   "windowing_clause", "windowing_type", "windowing_elements", 
                   "using_clause", "using_element", "collect_order_by_part", 
                   "within_or_over_part", "string_delimiter", "cost_matrix_clause", 
                   "xml_passing_clause", "xml_attributes_clause", "xml_namespaces_clause", 
                   "xml_table_column", "xml_general_default_part", "xml_multiuse_expression_element", 
                   "xmlroot_param_version_part", "xmlroot_param_standalone_part", 
                   "xmlserialize_param_enconding_part", "xmlserialize_param_version_part", 
                   "xmlserialize_param_ident_part", "sql_plus_command_no_semicolon", 
                   "sql_plus_command", "start_command", "whenever_command", 
                   "set_command", "timing_command", "partition_extension_clause", 
                   "column_alias", "table_alias", "where_clause", "quantitative_where_stmt", 
                   "into_clause", "xml_column_name", "cost_class_name", 
                   "attribute_name", "savepoint_name", "rollback_segment_name", 
                   "table_var_name", "schema_name", "routine_name", "package_name", 
                   "implementation_type_name", "parameter_name", "reference_model_name", 
                   "main_model_name", "container_tableview_name", "aggregate_function_name", 
                   "query_name", "grantee_name", "role_name", "constraint_name", 
                   "label_name", "type_name", "sequence_name", "exception_name", 
                   "function_name", "procedure_name", "trigger_name", "variable_name", 
                   "index_name", "cursor_name", "record_name", "collection_name", 
                   "link_name", "local_link_name", "connection_qualifier", 
                   "column_name", "tableview_name", "xmltable", "char_set_name", 
                   "synonym_name", "schema_object_name", "dir_object_name", 
                   "user_object_name", "grant_object_name", "column_list", 
                   "paren_column_list", "keep_clause", "function_argument", 
                   "function_argument_analytic", "function_argument_modeling", 
                   "respect_or_ignore_nulls", "argument", "type_spec", "datatype", 
                   "precision_part", "native_datatype_element", "bind_variable", 
                   "general_element", "general_element_part", "table_element", 
                   "object_privilege", "system_privilege", "constant", "numeric", 
                   "numeric_negative", "quoted_string", "identifier", "id_expression", 
                   "inquiry_directive", "outer_join_sign", "regular_id", 
                   "non_reserved_keywords_in_18c", "non_reserved_keywords_in_12c", 
                   "non_reserved_keywords_pre12c", "string_function_name", 
                   "numeric_function_name" ]

    EOF = Token.EOF
    ABORT=1
    ABS=2
    ABSENT=3
    ACCESS=4
    ACCESSED=5
    ACCESSIBLE=6
    ACCOUNT=7
    ACL=8
    ACOS=9
    ACROSS=10
    ACTION=11
    ACTIONS=12
    ACTIVATE=13
    ACTIVE=14
    ACTIVE_COMPONENT=15
    ACTIVE_DATA=16
    ACTIVE_FUNCTION=17
    ACTIVE_TAG=18
    ACTIVITY=19
    ADAPTIVE_PLAN=20
    ADD=21
    ADD_COLUMN=22
    ADD_GROUP=23
    ADD_MONTHS=24
    ADJ_DATE=25
    ADMIN=26
    ADMINISTER=27
    ADMINISTRATOR=28
    ADVANCED=29
    ADVISE=30
    ADVISOR=31
    AFD_DISKSTRING=32
    AFTER=33
    AGENT=34
    AGGREGATE=35
    A_LETTER=36
    ALIAS=37
    ALL=38
    ALLOCATE=39
    ALLOW=40
    ALL_ROWS=41
    ALTER=42
    ALTERNATE=43
    ALWAYS=44
    ANALYTIC=45
    ANALYZE=46
    ANCESTOR=47
    ANCILLARY=48
    AND=49
    AND_EQUAL=50
    ANOMALY=51
    ANSI_REARCH=52
    ANTIJOIN=53
    ANY=54
    ANYSCHEMA=55
    APPEND=56
    APPENDCHILDXML=57
    APPEND_VALUES=58
    APPLICATION=59
    APPLY=60
    APPROX_COUNT_DISTINCT=61
    ARCHIVAL=62
    ARCHIVE=63
    ARCHIVED=64
    ARCHIVELOG=65
    ARRAY=66
    AS=67
    ASC=68
    ASCII=69
    ASCIISTR=70
    ASIN=71
    ASIS=72
    ASSEMBLY=73
    ASSIGN=74
    ASSOCIATE=75
    ASYNC=76
    ASYNCHRONOUS=77
    ATAN2=78
    ATAN=79
    AT=80
    ATTRIBUTE=81
    ATTRIBUTES=82
    AUDIT=83
    AUTHENTICATED=84
    AUTHENTICATION=85
    AUTHID=86
    AUTHORIZATION=87
    AUTOALLOCATE=88
    AUTO=89
    AUTOBACKUP=90
    AUTOEXTEND=91
    AUTO_LOGIN=92
    AUTOMATIC=93
    AUTONOMOUS_TRANSACTION=94
    AUTO_REOPTIMIZE=95
    AVAILABILITY=96
    AVRO=97
    BACKGROUND=98
    BACKINGFILE=99
    BACKUP=100
    BACKUPS=101
    BACKUPSET=102
    BASIC=103
    BASICFILE=104
    BATCH=105
    BATCHSIZE=106
    BATCH_TABLE_ACCESS_BY_ROWID=107
    BECOME=108
    BEFORE=109
    BEGIN=110
    BEGINNING=111
    BEGIN_OUTLINE_DATA=112
    BEHALF=113
    BEQUEATH=114
    BETWEEN=115
    BFILE=116
    BFILENAME=117
    BIGFILE=118
    BINARY=119
    BINARY_DOUBLE=120
    BINARY_DOUBLE_INFINITY=121
    BINARY_DOUBLE_NAN=122
    BINARY_FLOAT=123
    BINARY_FLOAT_INFINITY=124
    BINARY_FLOAT_NAN=125
    BINARY_INTEGER=126
    BIND_AWARE=127
    BINDING=128
    BIN_TO_NUM=129
    BITAND=130
    BITMAP_AND=131
    BITMAP=132
    BITMAPS=133
    BITMAP_TREE=134
    BITS=135
    BLOB=136
    BLOCK=137
    BLOCK_RANGE=138
    BLOCKS=139
    BLOCKSIZE=140
    BODY=141
    BOOLEAN=142
    BOTH=143
    BOUND=144
    BRANCH=145
    BREADTH=146
    BROADCAST=147
    BSON=148
    BUFFER=149
    BUFFER_CACHE=150
    BUFFER_POOL=151
    BUILD=152
    BULK=153
    BY=154
    BYPASS_RECURSIVE_CHECK=155
    BYPASS_UJVC=156
    BYTE=157
    CACHE=158
    CACHE_CB=159
    CACHE_INSTANCES=160
    CACHE_TEMP_TABLE=161
    CACHING=162
    CALCULATED=163
    CALLBACK=164
    CALL=165
    CANCEL=166
    CANONICAL=167
    CAPACITY=168
    CAPTION=169
    CARDINALITY=170
    CASCADE=171
    CASE=172
    CAST=173
    CASESENSITIVE=174
    CATEGORY=175
    CDBDEFAULT=176
    CEIL=177
    CELL_FLASH_CACHE=178
    CERTIFICATE=179
    CFILE=180
    CHAINED=181
    CHANGE=182
    CHANGETRACKING=183
    CHANGE_DUPKEY_ERROR_INDEX=184
    CHARACTER=185
    CHAR=186
    CHAR_CS=187
    CHARTOROWID=188
    CHECK_ACL_REWRITE=189
    CHECK=190
    CHECKPOINT=191
    CHILD=192
    CHOOSE=193
    CHR=194
    CHUNK=195
    CLASS=196
    CLASSIFICATION=197
    CLASSIFIER=198
    CLAUSE=199
    CLEAN=200
    CLEANUP=201
    CLEAR=202
    C_LETTER=203
    CLIENT=204
    CLOB=205
    CLONE=206
    CLOSE_CACHED_OPEN_CURSORS=207
    CLOSE=208
    CLUSTER_BY_ROWID=209
    CLUSTER=210
    CLUSTER_DETAILS=211
    CLUSTER_DISTANCE=212
    CLUSTER_ID=213
    CLUSTERING=214
    CLUSTERING_FACTOR=215
    CLUSTER_PROBABILITY=216
    CLUSTER_SET=217
    COALESCE=218
    COALESCE_SQ=219
    COARSE=220
    CO_AUTH_IND=221
    COLD=222
    COLLECT=223
    COLUMNAR=224
    COLUMN_AUTH_INDICATOR=225
    COLUMN=226
    COLUMNS=227
    COLUMN_STATS=228
    COLUMN_VALUE=229
    COMMENT=230
    COMMIT=231
    COMMITTED=232
    COMMON=233
    COMMON_DATA=234
    COMPACT=235
    COMPATIBILITY=236
    COMPILE=237
    COMPLETE=238
    COMPLIANCE=239
    COMPONENT=240
    COMPONENTS=241
    COMPOSE=242
    COMPOSITE=243
    COMPOSITE_LIMIT=244
    COMPOUND=245
    COMPRESS=246
    COMPUTE=247
    CONCAT=248
    CON_DBID_TO_ID=249
    CONDITIONAL=250
    CONDITION=251
    CONFIRM=252
    CONFORMING=253
    CON_GUID_TO_ID=254
    CON_ID=255
    CON_NAME_TO_ID=256
    CONNECT_BY_CB_WHR_ONLY=257
    CONNECT_BY_COMBINE_SW=258
    CONNECT_BY_COST_BASED=259
    CONNECT_BY_ELIM_DUPS=260
    CONNECT_BY_FILTERING=261
    CONNECT_BY_ISCYCLE=262
    CONNECT_BY_ISLEAF=263
    CONNECT_BY_ROOT=264
    CONNECT=265
    CONNECT_TIME=266
    CONSIDER=267
    CONSISTENT=268
    CONSTANT=269
    CONST=270
    CONSTRAINT=271
    CONSTRAINTS=272
    CONSTRUCTOR=273
    CONTAINER=274
    CONTAINERS=275
    CONTAINERS_DEFAULT=276
    CONTAINER_DATA=277
    CONTAINER_MAP=278
    CONTENT=279
    CONTENTS=280
    CONTEXT=281
    CONTINUE=282
    CONTROLFILE=283
    CON_UID_TO_ID=284
    CONVERT=285
    CONVERSION=286
    COOKIE=287
    COPY=288
    CORR_K=289
    CORR_S=290
    CORRUPTION=291
    CORRUPT_XID_ALL=292
    CORRUPT_XID=293
    COS=294
    COSH=295
    COST=296
    COST_XML_QUERY_REWRITE=297
    COUNT=298
    COVAR_POP=299
    COVAR_SAMP=300
    CPU_COSTING=301
    CPU_PER_CALL=302
    CPU_PER_SESSION=303
    CRASH=304
    CREATE=305
    CREATE_FILE_DEST=306
    CREATE_STORED_OUTLINES=307
    CREATION=308
    CREDENTIAL=309
    CRITICAL=310
    CROSS=311
    CROSSEDITION=312
    CSCONVERT=313
    CUBE_AJ=314
    CUBE=315
    CUBE_GB=316
    CUBE_SJ=317
    CUME_DISTM=318
    CURRENT=319
    CURRENT_DATE=320
    CURRENT_SCHEMA=321
    CURRENT_TIME=322
    CURRENT_TIMESTAMP=323
    CURRENT_USER=324
    CURRENTV=325
    CURSOR=326
    CURSOR_SHARING_EXACT=327
    CURSOR_SPECIFIC_SEGMENT=328
    CUSTOMDATUM=329
    CV=330
    CYCLE=331
    DANGLING=332
    DATABASE=333
    DATA=334
    DATAFILE=335
    DATAFILES=336
    DATAGUARDCONFIG=337
    DATAMOVEMENT=338
    DATAOBJNO=339
    DATAOBJ_TO_MAT_PARTITION=340
    DATAOBJ_TO_PARTITION=341
    DATAPUMP=342
    DATA_SECURITY_REWRITE_LIMIT=343
    DATE=344
    DATE_MODE=345
    DAY=346
    DAYS=347
    DBA=348
    DBA_RECYCLEBIN=349
    DBMS_STATS=350
    DB_ROLE_CHANGE=351
    DBTIMEZONE=352
    DB_UNIQUE_NAME=353
    DB_VERSION=354
    DDL=355
    DEALLOCATE=356
    DEBUG=357
    DEBUGGER=358
    DEC=359
    DECIMAL=360
    DECLARE=361
    DECOMPOSE=362
    DECORRELATE=363
    DECR=364
    DECREMENT=365
    DECRYPT=366
    DEDUPLICATE=367
    DEFAULT=368
    DEFAULTS=369
    DEFAULT_COLLATION=370
    DEFAULT_CREDENTIAL=371
    DEFERRABLE=372
    DEFERRED=373
    DEFINED=374
    DEFINE=375
    DEFINER=376
    DEGREE=377
    DELAY=378
    DELEGATE=379
    DELETE_ALL=380
    DELETE=381
    DELETEXML=382
    DEMAND=383
    DENSE_RANKM=384
    DEPENDENT=385
    DEPRECATE=386
    DEPTH=387
    DEQUEUE=388
    DEREF=389
    DEREF_NO_REWRITE=390
    DESC=391
    DESCRIPTION=392
    DESTROY=393
    DETACHED=394
    DETERMINES=395
    DETERMINISTIC=396
    DICTIONARY=397
    DIMENSION=398
    DIMENSIONS=399
    DIRECT_LOAD=400
    DIRECTORY=401
    DIRECT_PATH=402
    DISABLE_ALL=403
    DISABLE=404
    DISABLE_PARALLEL_DML=405
    DISABLE_PRESET=406
    DISABLE_RPKE=407
    DISALLOW=408
    DISASSOCIATE=409
    DISCARD=410
    DISCONNECT=411
    DISK=412
    DISKGROUP=413
    DISKGROUP_PLUS=414
    DISKS=415
    DISMOUNT=416
    DISTINCT=417
    DISTINGUISHED=418
    DISTRIBUTED=419
    DISTRIBUTE=420
    DML=421
    DML_UPDATE=422
    DOCFIDELITY=423
    DOCUMENT=424
    DOLLAR_ELSE=425
    DOLLAR_ELSIF=426
    DOLLAR_END=427
    DOLLAR_ERROR=428
    DOLLAR_IF=429
    DOLLAR_THEN=430
    DOMAIN_INDEX_FILTER=431
    DOMAIN_INDEX_NO_SORT=432
    DOMAIN_INDEX_SORT=433
    DOUBLE=434
    DOWNGRADE=435
    DRIVING_SITE=436
    DROP_COLUMN=437
    DROP=438
    DROP_GROUP=439
    DSINTERVAL_UNCONSTRAINED=440
    DST_UPGRADE_INSERT_CONV=441
    DUMP=442
    DUMPSET=443
    DUPLICATE=444
    DV=445
    DYNAMIC=446
    DYNAMIC_SAMPLING=447
    DYNAMIC_SAMPLING_EST_CDN=448
    E_LETTER=449
    EACH=450
    EDITIONABLE=451
    EDITION=452
    EDITIONING=453
    EDITIONS=454
    ELEMENT=455
    ELIM_GROUPBY=456
    ELIMINATE_JOIN=457
    ELIMINATE_OBY=458
    ELIMINATE_OUTER_JOIN=459
    ELSE=460
    ELSIF=461
    EM=462
    EMPTY_BLOB=463
    EMPTY_CLOB=464
    EMPTY_=465
    ENABLE_ALL=466
    ENABLE=467
    ENABLE_PARALLEL_DML=468
    ENABLE_PRESET=469
    ENCODING=470
    ENCRYPT=471
    ENCRYPTION=472
    END=473
    END_OUTLINE_DATA=474
    ENFORCED=475
    ENFORCE=476
    ENQUEUE=477
    ENTERPRISE=478
    ENTITYESCAPING=479
    ENTRY=480
    EQUIPART=481
    ERR=482
    ERROR_ARGUMENT=483
    ERROR=484
    ERROR_ON_OVERLAP_TIME=485
    ERRORS=486
    ERROR_INDEX=487
    ERROR_CODE=488
    ESCAPE=489
    ESTIMATE=490
    EVAL=491
    EVALNAME=492
    EVALUATE=493
    EVALUATION=494
    EVENTS=495
    EVERY=496
    EXCEPT=497
    EXCEPTION=498
    EXCEPTION_INIT=499
    EXCEPTIONS=500
    EXCHANGE=501
    EXCLUDE=502
    EXCLUDING=503
    EXCLUSIVE=504
    EXECUTE=505
    EXEMPT=506
    EXISTING=507
    EXISTS=508
    EXISTSNODE=509
    EXIT=510
    EXPAND_GSET_TO_UNION=511
    EXPAND_TABLE=512
    EXP=513
    EXPIRE=514
    EXPLAIN=515
    EXPLOSION=516
    EXPORT=517
    EXPR_CORR_CHECK=518
    EXPRESS=519
    EXTENDS=520
    EXTENT=521
    EXTENTS=522
    EXTERNAL=523
    EXTERNALLY=524
    EXTRACTCLOBXML=525
    EXTRACT=526
    EXTRACTVALUE=527
    EXTRA=528
    FACILITY=529
    FACT=530
    FACTOR=531
    FACTORIZE_JOIN=532
    FAILED=533
    FAILED_LOGIN_ATTEMPTS=534
    FAILGROUP=535
    FAILOVER=536
    FAILURE=537
    FALSE=538
    FAMILY=539
    FAR=540
    FAST=541
    FASTSTART=542
    FBTSCAN=543
    FEATURE=544
    FEATURE_DETAILS=545
    FEATURE_ID=546
    FEATURE_SET=547
    FEATURE_VALUE=548
    FETCH=549
    FILE=550
    FILE_NAME_CONVERT=551
    FILEGROUP=552
    FILESTORE=553
    FILESYSTEM_LIKE_LOGGING=554
    FILTER=555
    FINAL=556
    FINE=557
    FINISH=558
    FIRST=559
    FIRSTM=560
    FIRST_ROWS=561
    FIRST_VALUE=562
    FIXED_VIEW_DATA=563
    FLAGGER=564
    FLASHBACK=565
    FLASH_CACHE=566
    FLOAT=567
    FLOB=568
    FLEX=569
    FLOOR=570
    FLUSH=571
    FOLDER=572
    FOLLOWING=573
    FOLLOWS=574
    FORALL=575
    FORCE=576
    FORCE_XML_QUERY_REWRITE=577
    FOREIGN=578
    FOREVER=579
    FOR=580
    FORMAT=581
    FORWARD=582
    FRAGMENT_NUMBER=583
    FREELIST=584
    FREELISTS=585
    FREEPOOLS=586
    FRESH=587
    FROM=588
    FROM_TZ=589
    FULL=590
    FULL_OUTER_JOIN_TO_OUTER=591
    FUNCTION=592
    FUNCTIONS=593
    FTP=594
    G_LETTER=595
    GATHER_OPTIMIZER_STATISTICS=596
    GATHER_PLAN_STATISTICS=597
    GBY_CONC_ROLLUP=598
    GBY_PUSHDOWN=599
    GENERATED=600
    GET=601
    GLOBAL=602
    GLOBALLY=603
    GLOBAL_NAME=604
    GLOBAL_TOPIC_ENABLED=605
    GOTO=606
    GRANT=607
    GROUP_BY=608
    GROUP=609
    GROUP_ID=610
    GROUPING=611
    GROUPING_ID=612
    GROUPS=613
    GUARANTEED=614
    GUARANTEE=615
    GUARD=616
    HALF_YEARS=617
    HASH_AJ=618
    HASH=619
    HASHKEYS=620
    HASH_SJ=621
    HAVING=622
    HEADER=623
    HEAP=624
    HELP=625
    HEXTORAW=626
    HEXTOREF=627
    HIDDEN_KEYWORD=628
    HIDE=629
    HIER_ORDER=630
    HIERARCHICAL=631
    HIERARCHIES=632
    HIERARCHY=633
    HIGH=634
    HINTSET_BEGIN=635
    HINTSET_END=636
    HOT=637
    HOUR=638
    HOURS=639
    HTTP=640
    HWM_BROKERED=641
    HYBRID=642
    H_LETTER=643
    IDENTIFIED=644
    IDENTIFIER=645
    IDENTITY=646
    IDGENERATORS=647
    ID=648
    IDLE_TIME=649
    IF=650
    IGNORE=651
    IGNORE_OPTIM_EMBEDDED_HINTS=652
    IGNORE_ROW_ON_DUPKEY_INDEX=653
    IGNORE_WHERE_CLAUSE=654
    ILM=655
    IMMEDIATE=656
    IMPACT=657
    IMPORT=658
    INACTIVE=659
    INACTIVE_ACCOUNT_TIME=660
    INCLUDE=661
    INCLUDE_VERSION=662
    INCLUDING=663
    INCREMENTAL=664
    INCREMENT=665
    INCR=666
    INDENT=667
    INDEX_ASC=668
    INDEX_COMBINE=669
    INDEX_DESC=670
    INDEXED=671
    INDEXES=672
    INDEX_FFS=673
    INDEX_FILTER=674
    INDEX=675
    INDEXING=676
    INDEX_JOIN=677
    INDEX_ROWS=678
    INDEX_RRS=679
    INDEX_RS_ASC=680
    INDEX_RS_DESC=681
    INDEX_RS=682
    INDEX_SCAN=683
    INDEX_SKIP_SCAN=684
    INDEX_SS_ASC=685
    INDEX_SS_DESC=686
    INDEX_SS=687
    INDEX_STATS=688
    INDEXTYPE=689
    INDEXTYPES=690
    INDICATOR=691
    INDICES=692
    INFINITE=693
    INFORMATIONAL=694
    INHERIT=695
    IN=696
    INITCAP=697
    INITIAL=698
    INITIALIZED=699
    INITIALLY=700
    INITRANS=701
    INLINE=702
    INLINE_XMLTYPE_NT=703
    INMEMORY=704
    IN_MEMORY_METADATA=705
    INMEMORY_PRUNING=706
    INNER=707
    INOUT=708
    INPLACE=709
    INSERTCHILDXMLAFTER=710
    INSERTCHILDXMLBEFORE=711
    INSERTCHILDXML=712
    INSERT=713
    INSERTXMLAFTER=714
    INSERTXMLBEFORE=715
    INSTANCE=716
    INSTANCES=717
    INSTANTIABLE=718
    INSTANTLY=719
    INSTEAD=720
    INSTR2=721
    INSTR4=722
    INSTRB=723
    INSTRC=724
    INSTR=725
    INTEGER=726
    INTERLEAVED=727
    INTERMEDIATE=728
    INTERNAL_CONVERT=729
    INTERNAL_USE=730
    INTERPRETED=731
    INTERSECT=732
    INTERVAL=733
    INT=734
    INTO=735
    INVALIDATE=736
    INVALIDATION=737
    INVISIBLE=738
    IN_XQUERY=739
    IS=740
    IS_LEAF=741
    ISOLATION=742
    ISOLATION_LEVEL=743
    ITERATE=744
    ITERATION_NUMBER=745
    JAVA=746
    JOB=747
    JOIN=748
    JSON_ARRAYAGG=749
    JSON_ARRAY=750
    JSON_EQUAL=751
    JSON_EXISTS2=752
    JSON_EXISTS=753
    JSONGET=754
    JSON=755
    JSON_OBJECTAGG=756
    JSON_OBJECT=757
    JSONPARSE=758
    JSON_QUERY=759
    JSON_SERIALIZE=760
    JSON_TABLE=761
    JSON_TEXTCONTAINS2=762
    JSON_TEXTCONTAINS=763
    JSON_TRANSFORM=764
    JSON_VALUE=765
    K_LETTER=766
    KEEP_DUPLICATES=767
    KEEP=768
    KERBEROS=769
    KEY=770
    KEY_LENGTH=771
    KEYSIZE=772
    KEYS=773
    KEYSTORE=774
    KILL=775
    LABEL=776
    LANGUAGE=777
    LAST_DAY=778
    LAST=779
    LAST_VALUE=780
    LATERAL=781
    LAX=782
    LAYER=783
    LDAP_REGISTRATION_ENABLED=784
    LDAP_REGISTRATION=785
    LDAP_REG_SYNC_INTERVAL=786
    LEAF=787
    LEAD_CDB=788
    LEAD_CDB_URI=789
    LEADING=790
    LEFT=791
    LENGTH2=792
    LENGTH4=793
    LENGTHB=794
    LENGTHC=795
    LENGTH=796
    LESS=797
    LEVEL=798
    LEVEL_NAME=799
    LEVELS=800
    LIBRARY=801
    LIFECYCLE=802
    LIFE=803
    LIFETIME=804
    LIKE2=805
    LIKE4=806
    LIKEC=807
    LIKE_EXPAND=808
    LIKE=809
    LIMIT=810
    LINEAR=811
    LINK=812
    LIST=813
    LN=814
    LNNVL=815
    LOAD=816
    LOB=817
    LOBNVL=818
    LOBS=819
    LOCAL_INDEXES=820
    LOCAL=821
    LOCALTIME=822
    LOCALTIMESTAMP=823
    LOCATION=824
    LOCATOR=825
    LOCKDOWN=826
    LOCKED=827
    LOCKING=828
    LOCK=829
    LOGFILE=830
    LOGFILES=831
    LOGGING=832
    LOGICAL=833
    LOGICAL_READS_PER_CALL=834
    LOGICAL_READS_PER_SESSION=835
    LOG=836
    LOGMINING=837
    LOGOFF=838
    LOGON=839
    LOG_READ_ONLY_VIOLATIONS=840
    LONG=841
    LOOP=842
    LOST=843
    LOWER=844
    LOW=845
    LPAD=846
    LTRIM=847
    M_LETTER=848
    MAIN=849
    MAKE_REF=850
    MANAGED=851
    MANAGE=852
    MANAGEMENT=853
    MANAGER=854
    MANDATORY=855
    MANUAL=856
    MAP=857
    MAPPING=858
    MASTER=859
    MATCHED=860
    MATCHES=861
    MATCH=862
    MATCH_NUMBER=863
    MATCH_RECOGNIZE=864
    MATERIALIZED=865
    MATERIALIZE=866
    MAXARCHLOGS=867
    MAXDATAFILES=868
    MAXEXTENTS=869
    MAXIMIZE=870
    MAXINSTANCES=871
    MAXLOGFILES=872
    MAXLOGHISTORY=873
    MAXLOGMEMBERS=874
    MAX_SHARED_TEMP_SIZE=875
    MAXSIZE=876
    MAXTRANS=877
    MAXVALUE=878
    MEASURE=879
    MEASURES=880
    MEDIUM=881
    MEMBER=882
    MEMBER_CAPTION=883
    MEMBER_DESCRIPTION=884
    MEMBER_NAME=885
    MEMBER_UNIQUE_NAME=886
    MEMCOMPRESS=887
    MEMORY=888
    MERGEACTIONS=889
    MERGE_AJ=890
    MERGE_CONST_ON=891
    MERGE=892
    MERGE_SJ=893
    METADATA=894
    METHOD=895
    MIGRATE=896
    MIGRATION=897
    MINEXTENTS=898
    MINIMIZE=899
    MINIMUM=900
    MINING=901
    MINUS=902
    MINUS_NULL=903
    MINUTE=904
    MINUTES=905
    MINVALUE=906
    MIRRORCOLD=907
    MIRRORHOT=908
    MIRROR=909
    MISSING=910
    MISMATCH=911
    MLSLABEL=912
    MODEL_COMPILE_SUBQUERY=913
    MODEL_DONTVERIFY_UNIQUENESS=914
    MODEL_DYNAMIC_SUBQUERY=915
    MODEL_MIN_ANALYSIS=916
    MODEL=917
    MODEL_NB=918
    MODEL_NO_ANALYSIS=919
    MODEL_PBY=920
    MODEL_PUSH_REF=921
    MODEL_SV=922
    MODE=923
    MODIFICATION=924
    MODIFY_COLUMN_TYPE=925
    MODIFY=926
    MOD=927
    MODULE=928
    MONITORING=929
    MONITOR=930
    MONTH=931
    MONTHS_BETWEEN=932
    MONTHS=933
    MOUNT=934
    MOUNTPATH=935
    MOUNTPOINT=936
    MOVEMENT=937
    MOVE=938
    MULTIDIMENSIONAL=939
    MULTISET=940
    MV_MERGE=941
    NAMED=942
    NAME=943
    NAMESPACE=944
    NAN=945
    NANVL=946
    NATIONAL=947
    NATIVE_FULL_OUTER_JOIN=948
    NATIVE=949
    NATURAL=950
    NATURALN=951
    NAV=952
    NCHAR_CS=953
    NCHAR=954
    NCHR=955
    NCLOB=956
    NEEDED=957
    NEG=958
    NESTED=959
    NESTED_TABLE_FAST_INSERT=960
    NESTED_TABLE_GET_REFS=961
    NESTED_TABLE_ID=962
    NESTED_TABLE_SET_REFS=963
    NESTED_TABLE_SET_SETID=964
    NETWORK=965
    NEVER=966
    NEW=967
    NEW_TIME=968
    NEXT_DAY=969
    NEXT=970
    NL_AJ=971
    NLJ_BATCHING=972
    NLJ_INDEX_FILTER=973
    NLJ_INDEX_SCAN=974
    NLJ_PREFETCH=975
    NLS_CALENDAR=976
    NLS_CHARACTERSET=977
    NLS_CHARSET_DECL_LEN=978
    NLS_CHARSET_ID=979
    NLS_CHARSET_NAME=980
    NLS_COMP=981
    NLS_CURRENCY=982
    NLS_DATE_FORMAT=983
    NLS_DATE_LANGUAGE=984
    NLS_INITCAP=985
    NLS_ISO_CURRENCY=986
    NL_SJ=987
    NLS_LANG=988
    NLS_LANGUAGE=989
    NLS_LENGTH_SEMANTICS=990
    NLS_LOWER=991
    NLS_NCHAR_CONV_EXCP=992
    NLS_NUMERIC_CHARACTERS=993
    NLS_SORT=994
    NLSSORT=995
    NLS_SPECIAL_CHARS=996
    NLS_TERRITORY=997
    NLS_UPPER=998
    NO_ACCESS=999
    NO_ADAPTIVE_PLAN=1000
    NO_ANSI_REARCH=1001
    NOAPPEND=1002
    NOARCHIVELOG=1003
    NOAUDIT=1004
    NO_AUTO_REOPTIMIZE=1005
    NO_BASETABLE_MULTIMV_REWRITE=1006
    NO_BATCH_TABLE_ACCESS_BY_ROWID=1007
    NO_BIND_AWARE=1008
    NO_BUFFER=1009
    NOCACHE=1010
    NO_CARTESIAN=1011
    NO_CHECK_ACL_REWRITE=1012
    NO_CLUSTER_BY_ROWID=1013
    NO_CLUSTERING=1014
    NO_COALESCE_SQ=1015
    NO_COMMON_DATA=1016
    NOCOMPRESS=1017
    NO_CONNECT_BY_CB_WHR_ONLY=1018
    NO_CONNECT_BY_COMBINE_SW=1019
    NO_CONNECT_BY_COST_BASED=1020
    NO_CONNECT_BY_ELIM_DUPS=1021
    NO_CONNECT_BY_FILTERING=1022
    NOCOPY=1023
    NO_COST_XML_QUERY_REWRITE=1024
    NO_CPU_COSTING=1025
    NOCPU_COSTING=1026
    NOCYCLE=1027
    NO_DATA_SECURITY_REWRITE=1028
    NO_DECORRELATE=1029
    NODELAY=1030
    NO_DOMAIN_INDEX_FILTER=1031
    NO_DST_UPGRADE_INSERT_CONV=1032
    NO_ELIM_GROUPBY=1033
    NO_ELIMINATE_JOIN=1034
    NO_ELIMINATE_OBY=1035
    NO_ELIMINATE_OUTER_JOIN=1036
    NOENTITYESCAPING=1037
    NO_EXPAND_GSET_TO_UNION=1038
    NO_EXPAND=1039
    NO_EXPAND_TABLE=1040
    NO_FACT=1041
    NO_FACTORIZE_JOIN=1042
    NO_FILTERING=1043
    NOFORCE=1044
    NO_FULL_OUTER_JOIN_TO_OUTER=1045
    NO_GATHER_OPTIMIZER_STATISTICS=1046
    NO_GBY_PUSHDOWN=1047
    NOGUARANTEE=1048
    NO_INDEX_FFS=1049
    NO_INDEX=1050
    NO_INDEX_SS=1051
    NO_INMEMORY=1052
    NO_INMEMORY_PRUNING=1053
    NOKEEP=1054
    NO_LOAD=1055
    NOLOCAL=1056
    NOLOGGING=1057
    NOMAPPING=1058
    NOMAXVALUE=1059
    NO_MERGE=1060
    NOMINIMIZE=1061
    NOMINVALUE=1062
    NO_MODEL_PUSH_REF=1063
    NO_MONITORING=1064
    NOMONITORING=1065
    NO_MONITOR=1066
    NO_MULTIMV_REWRITE=1067
    NO_NATIVE_FULL_OUTER_JOIN=1068
    NONBLOCKING=1069
    NONEDITIONABLE=1070
    NONE=1071
    NO_NLJ_BATCHING=1072
    NO_NLJ_PREFETCH=1073
    NO=1074
    NONSCHEMA=1075
    NO_OBJECT_LINK=1076
    NOORDER=1077
    NO_ORDER_ROLLUPS=1078
    NO_OUTER_JOIN_TO_ANTI=1079
    NO_OUTER_JOIN_TO_INNER=1080
    NOOVERRIDE=1081
    NO_PARALLEL_INDEX=1082
    NOPARALLEL_INDEX=1083
    NO_PARALLEL=1084
    NOPARALLEL=1085
    NO_PARTIAL_COMMIT=1086
    NO_PARTIAL_JOIN=1087
    NO_PARTIAL_ROLLUP_PUSHDOWN=1088
    NOPARTITION=1089
    NO_PLACE_DISTINCT=1090
    NO_PLACE_GROUP_BY=1091
    NO_PQ_CONCURRENT_UNION=1092
    NO_PQ_MAP=1093
    NOPROMPT=1094
    NO_PQ_REPLICATE=1095
    NO_PQ_SKEW=1096
    NO_PRUNE_GSETS=1097
    NO_PULL_PRED=1098
    NO_PUSH_PRED=1099
    NO_PUSH_SUBQ=1100
    NO_PX_FAULT_TOLERANCE=1101
    NO_PX_JOIN_FILTER=1102
    NO_QKN_BUFF=1103
    NO_QUERY_TRANSFORMATION=1104
    NO_REF_CASCADE=1105
    NORELOCATE=1106
    NORELY=1107
    NOREPAIR=1108
    NOREPLAY=1109
    NORESETLOGS=1110
    NO_RESULT_CACHE=1111
    NOREVERSE=1112
    NO_REWRITE=1113
    NOREWRITE=1114
    NORMAL=1115
    NO_ROOT_SW_FOR_LOCAL=1116
    NOROWDEPENDENCIES=1117
    NOSCHEMACHECK=1118
    NOSEGMENT=1119
    NO_SEMIJOIN=1120
    NO_SEMI_TO_INNER=1121
    NO_SET_TO_JOIN=1122
    NOSORT=1123
    NO_SQL_TRANSLATION=1124
    NO_SQL_TUNE=1125
    NO_STAR_TRANSFORMATION=1126
    NO_STATEMENT_QUEUING=1127
    NO_STATS_GSETS=1128
    NOSTRICT=1129
    NO_SUBQUERY_PRUNING=1130
    NO_SUBSTRB_PAD=1131
    NO_SWAP_JOIN_INPUTS=1132
    NOSWITCH=1133
    NO_TABLE_LOOKUP_BY_NL=1134
    NO_TEMP_TABLE=1135
    NOTHING=1136
    NOTIFICATION=1137
    NOT=1138
    NO_TRANSFORM_DISTINCT_AGG=1139
    NO_UNNEST=1140
    NO_USE_CUBE=1141
    NO_USE_HASH_AGGREGATION=1142
    NO_USE_HASH_GBY_FOR_PUSHDOWN=1143
    NO_USE_HASH=1144
    NO_USE_INVISIBLE_INDEXES=1145
    NO_USE_MERGE=1146
    NO_USE_NL=1147
    NO_USE_VECTOR_AGGREGATION=1148
    NOVALIDATE=1149
    NO_VECTOR_TRANSFORM_DIMS=1150
    NO_VECTOR_TRANSFORM_FACT=1151
    NO_VECTOR_TRANSFORM=1152
    NOWAIT=1153
    NO_XDB_FASTPATH_INSERT=1154
    NO_XML_DML_REWRITE=1155
    NO_XMLINDEX_REWRITE_IN_SELECT=1156
    NO_XMLINDEX_REWRITE=1157
    NO_XML_QUERY_REWRITE=1158
    NO_ZONEMAP=1159
    NTH_VALUE=1160
    NULLIF=1161
    NULL_=1162
    NULLS=1163
    NUMBER=1164
    NUMERIC=1165
    NUM_INDEX_KEYS=1166
    NUMTODSINTERVAL=1167
    NUMTOYMINTERVAL=1168
    NVARCHAR2=1169
    NVL2=1170
    OBJECT2XML=1171
    OBJECT=1172
    OBJ_ID=1173
    OBJNO=1174
    OBJNO_REUSE=1175
    OCCURENCES=1176
    OFFLINE=1177
    OFF=1178
    OFFSET=1179
    OF=1180
    OIDINDEX=1181
    OID=1182
    OLAP=1183
    OLD=1184
    OLD_PUSH_PRED=1185
    OLS=1186
    OLTP=1187
    OMIT=1188
    ONE=1189
    ONLINE=1190
    ONLINELOG=1191
    ONLY=1192
    ON=1193
    OPAQUE=1194
    OPAQUE_TRANSFORM=1195
    OPAQUE_XCANONICAL=1196
    OPCODE=1197
    OPEN=1198
    OPERATIONS=1199
    OPERATOR=1200
    OPT_ESTIMATE=1201
    OPTIMAL=1202
    OPTIMIZE=1203
    OPTIMIZER_FEATURES_ENABLE=1204
    OPTIMIZER_GOAL=1205
    OPTION=1206
    OPT_PARAM=1207
    ORA_BRANCH=1208
    ORA_CHECK_ACL=1209
    ORA_CHECK_PRIVILEGE=1210
    ORA_CLUSTERING=1211
    ORADATA=1212
    ORADEBUG=1213
    ORA_DST_AFFECTED=1214
    ORA_DST_CONVERT=1215
    ORA_DST_ERROR=1216
    ORA_GET_ACLIDS=1217
    ORA_GET_PRIVILEGES=1218
    ORA_HASH=1219
    ORA_INVOKING_USERID=1220
    ORA_INVOKING_USER=1221
    ORA_INVOKING_XS_USER_GUID=1222
    ORA_INVOKING_XS_USER=1223
    ORA_RAWCOMPARE=1224
    ORA_RAWCONCAT=1225
    ORA_ROWSCN=1226
    ORA_ROWSCN_RAW=1227
    ORA_ROWVERSION=1228
    ORA_TABVERSION=1229
    ORA_WRITE_TIME=1230
    ORDERED=1231
    ORDERED_PREDICATES=1232
    ORDER=1233
    ORDINALITY=1234
    OR_EXPAND=1235
    ORGANIZATION=1236
    OR=1237
    OR_PREDICATES=1238
    OSERROR=1239
    OTHER=1240
    OUTER_JOIN_TO_ANTI=1241
    OUTER_JOIN_TO_INNER=1242
    OUTER=1243
    OUTLINE_LEAF=1244
    OUTLINE=1245
    OUT_OF_LINE=1246
    OUT=1247
    OVERFLOW_NOMOVE=1248
    OVERFLOW=1249
    OVERLAPS=1250
    OVER=1251
    OVERRIDING=1252
    OWNER=1253
    OWNERSHIP=1254
    OWN=1255
    P_LETTER=1256
    PACKAGE=1257
    PACKAGES=1258
    PARALLEL_ENABLE=1259
    PARALLEL_INDEX=1260
    PARALLEL=1261
    PARAMETERFILE=1262
    PARAMETERS=1263
    PARAM=1264
    PARENT=1265
    PARENT_LEVEL_NAME=1266
    PARENT_UNIQUE_NAME=1267
    PARITY=1268
    PARTIAL_JOIN=1269
    PARTIALLY=1270
    PARTIAL=1271
    PARTIAL_ROLLUP_PUSHDOWN=1272
    PARTITION_HASH=1273
    PARTITION_LIST=1274
    PARTITION=1275
    PARTITION_RANGE=1276
    PARTITIONS=1277
    PARTNUMINST=1278
    PASSING=1279
    PASSWORD_GRACE_TIME=1280
    PASSWORD_LIFE_TIME=1281
    PASSWORD_LOCK_TIME=1282
    PASSWORD=1283
    PASSWORD_REUSE_MAX=1284
    PASSWORD_REUSE_TIME=1285
    PASSWORD_ROLLOVER_TIME=1286
    PASSWORD_VERIFY_FUNCTION=1287
    PAST=1288
    PATCH=1289
    PATH=1290
    PATH_PREFIX=1291
    PATHS=1292
    PATTERN=1293
    PBL_HS_BEGIN=1294
    PBL_HS_END=1295
    PCTFREE=1296
    PCTINCREASE=1297
    PCTTHRESHOLD=1298
    PCTUSED=1299
    PCTVERSION=1300
    PENDING=1301
    PERCENT_FOUND=1302
    PERCENT_ISOPEN=1303
    PERCENT_NOTFOUND=1304
    PERCENT_KEYWORD=1305
    PERCENT_RANKM=1306
    PERCENT_ROWCOUNT=1307
    PERCENT_ROWTYPE=1308
    PERCENT_TYPE=1309
    PERCENT_BULK_EXCEPTIONS=1310
    PERCENT_BULK_ROWCOUNT=1311
    PERFORMANCE=1312
    PERIOD_KEYWORD=1313
    PERMANENT=1314
    PERMISSION=1315
    PERMUTE=1316
    PER=1317
    PFILE=1318
    PHYSICAL=1319
    PIKEY=1320
    PIPELINED=1321
    PIPE=1322
    PIV_GB=1323
    PIVOT=1324
    PIV_SSF=1325
    PLACE_DISTINCT=1326
    PLACE_GROUP_BY=1327
    PLAN=1328
    PLSCOPE_SETTINGS=1329
    PLS_INTEGER=1330
    PLSQL_CCFLAGS=1331
    PLSQL_CODE_TYPE=1332
    PLSQL_DEBUG=1333
    PLSQL_OPTIMIZE_LEVEL=1334
    PLSQL_WARNINGS=1335
    PLUGGABLE=1336
    PMEM=1337
    POINT=1338
    POLICY=1339
    POOL_16K=1340
    POOL_2K=1341
    POOL_32K=1342
    POOL_4K=1343
    POOL_8K=1344
    POSITIVEN=1345
    POSITIVE=1346
    POST_TRANSACTION=1347
    POWERMULTISET_BY_CARDINALITY=1348
    POWERMULTISET=1349
    POWER=1350
    PQ_CONCURRENT_UNION=1351
    PQ_DISTRIBUTE=1352
    PQ_DISTRIBUTE_WINDOW=1353
    PQ_FILTER=1354
    PQ_MAP=1355
    PQ_NOMAP=1356
    PQ_REPLICATE=1357
    PQ_SKEW=1358
    PRAGMA=1359
    PREBUILT=1360
    PRECEDES=1361
    PRECEDING=1362
    PRECISION=1363
    PRECOMPUTE_SUBQUERY=1364
    PREDICATE_REORDERS=1365
    PRELOAD=1366
    PREPARE=1367
    PRESENTNNV=1368
    PRESENT=1369
    PRESENTV=1370
    PRESERVE_OID=1371
    PRESERVE=1372
    PRETTY=1373
    PREVIOUS=1374
    PREV=1375
    PRIMARY=1376
    PRINTBLOBTOCLOB=1377
    PRIORITY=1378
    PRIOR=1379
    PRIVATE=1380
    PRIVATE_SGA=1381
    PRIVILEGED=1382
    PRIVILEGE=1383
    PRIVILEGES=1384
    PROCEDURAL=1385
    PROCEDURE=1386
    PROCESS=1387
    PROFILE=1388
    PROGRAM=1389
    PROJECT=1390
    PROPAGATE=1391
    PROPERTY=1392
    PROTECTED=1393
    PROTECTION=1394
    PROTOCOL=1395
    PROXY=1396
    PRUNING=1397
    PUBLIC=1398
    PULL_PRED=1399
    PURGE=1400
    PUSH_PRED=1401
    PUSH_SUBQ=1402
    PX_FAULT_TOLERANCE=1403
    PX_GRANULE=1404
    PX_JOIN_FILTER=1405
    QB_NAME=1406
    QUARTERS=1407
    QUERY_BLOCK=1408
    QUERY=1409
    QUEUE_CURR=1410
    QUEUE=1411
    QUEUE_ROWP=1412
    QUIESCE=1413
    QUORUM=1414
    QUOTA=1415
    QUOTAGROUP=1416
    RAISE=1417
    RANDOM_LOCAL=1418
    RANDOM=1419
    RANGE=1420
    RANKM=1421
    RAPIDLY=1422
    RAW=1423
    RAWTOHEX=1424
    RAWTONHEX=1425
    RBA=1426
    RBO_OUTLINE=1427
    RDBA=1428
    READ=1429
    READS=1430
    REALM=1431
    REAL=1432
    REBALANCE=1433
    REBUILD=1434
    RECORD=1435
    RECORDS_PER_BLOCK=1436
    RECOVERABLE=1437
    RECOVER=1438
    RECOVERY=1439
    RECYCLEBIN=1440
    RECYCLE=1441
    REDACTION=1442
    REDEFINE=1443
    REDO=1444
    REDUCED=1445
    REDUNDANCY=1446
    REF_CASCADE_CURSOR=1447
    REFERENCED=1448
    REFERENCE=1449
    REFERENCES=1450
    REFERENCING=1451
    REF=1452
    REFRESH=1453
    REFTOHEX=1454
    REGEXP_COUNT=1455
    REGEXP_INSTR=1456
    REGEXP_LIKE=1457
    REGEXP_REPLACE=1458
    REGEXP_SUBSTR=1459
    REGISTER=1460
    REGR_AVGX=1461
    REGR_AVGY=1462
    REGR_COUNT=1463
    REGR_INTERCEPT=1464
    REGR_R2=1465
    REGR_SLOPE=1466
    REGR_SXX=1467
    REGR_SXY=1468
    REGR_SYY=1469
    REGULAR=1470
    REJECT=1471
    REKEY=1472
    RELATIONAL=1473
    RELIES_ON=1474
    RELOCATE=1475
    RELY=1476
    REMAINDER=1477
    REMOTE=1478
    REMOTE_MAPPED=1479
    REMOVE=1480
    RENAME=1481
    REPAIR=1482
    REPEAT=1483
    REPLACE=1484
    REPLICATION=1485
    REQUIRED=1486
    RESETLOGS=1487
    RESET=1488
    RESIZE=1489
    RESOLVE=1490
    RESOLVER=1491
    RESOURCE=1492
    RESPECT=1493
    RESTART=1494
    RESTORE_AS_INTERVALS=1495
    RESTORE=1496
    RESTRICT_ALL_REF_CONS=1497
    RESTRICTED=1498
    RESTRICT_REFERENCES=1499
    RESTRICT=1500
    RESULT_CACHE=1501
    RESULT=1502
    RESUMABLE=1503
    RESUME=1504
    RETENTION=1505
    RETRY_ON_ROW_CHANGE=1506
    RETURNING=1507
    RETURN=1508
    REUSE=1509
    REVERSE=1510
    REVOKE=1511
    REWRITE_OR_ERROR=1512
    REWRITE=1513
    RIGHT=1514
    ROLE=1515
    ROLESET=1516
    ROLES=1517
    ROLLBACK=1518
    ROLLING=1519
    ROLLUP=1520
    ROWDEPENDENCIES=1521
    ROWID_MAPPING_TABLE=1522
    ROWID=1523
    ROWIDTOCHAR=1524
    ROWIDTONCHAR=1525
    ROW_LENGTH=1526
    ROWNUM=1527
    ROW=1528
    ROWS=1529
    RPAD=1530
    RTRIM=1531
    RULE=1532
    RULES=1533
    RUNNING=1534
    SALT=1535
    SAMPLE=1536
    SAVE_AS_INTERVALS=1537
    SAVEPOINT=1538
    SAVE=1539
    SB4=1540
    SCALE_ROWS=1541
    SCALE=1542
    SCAN_INSTANCES=1543
    SCAN=1544
    SCHEDULER=1545
    SCHEMACHECK=1546
    SCHEMA=1547
    SCN_ASCENDING=1548
    SCN=1549
    SCOPE=1550
    SCRUB=1551
    SD_ALL=1552
    SD_INHIBIT=1553
    SDO_GEOM_MBR=1554
    SDO_GEOMETRY=1555
    SD_SHOW=1556
    SEARCH=1557
    SECOND=1558
    SECONDS=1559
    SECRET=1560
    SECUREFILE_DBA=1561
    SECUREFILE=1562
    SECURITY=1563
    SEED=1564
    SEG_BLOCK=1565
    SEG_FILE=1566
    SEGMENT=1567
    SELECTIVITY=1568
    SELECT=1569
    SELF=1570
    SEMIJOIN_DRIVER=1571
    SEMIJOIN=1572
    SEMI_TO_INNER=1573
    SEQUENCED=1574
    SEQUENCE=1575
    SEQUENTIAL=1576
    SEQ=1577
    SERIALIZABLE=1578
    SERIALLY_REUSABLE=1579
    SERIAL=1580
    SERVERERROR=1581
    SERVICE_NAME_CONVERT=1582
    SERVICE=1583
    SERVICES=1584
    SESSION_CACHED_CURSORS=1585
    SESSION=1586
    SESSIONS_PER_USER=1587
    SESSIONTIMEZONE=1588
    SESSIONTZNAME=1589
    SET=1590
    SETS=1591
    SETTINGS=1592
    SET_TO_JOIN=1593
    SEVERE=1594
    SHARDSPACE=1595
    SHARED_POOL=1596
    SHARED=1597
    SHARE=1598
    SHARING=1599
    SHELFLIFE=1600
    SHOW=1601
    SHRINK=1602
    SHUTDOWN=1603
    SIBLINGS=1604
    SID=1605
    SITE=1606
    SIGNAL_COMPONENT=1607
    SIGNAL_FUNCTION=1608
    SIGN=1609
    SIGNTYPE=1610
    SIMPLE_INTEGER=1611
    SIMPLE=1612
    SINGLE=1613
    SINGLETASK=1614
    SINH=1615
    SIN=1616
    SIZE=1617
    SKIP_EXT_OPTIMIZER=1618
    SKIP_=1619
    SKIP_UNQ_UNUSABLE_IDX=1620
    SKIP_UNUSABLE_INDEXES=1621
    SMALLFILE=1622
    SMALLINT=1623
    SNAPSHOT=1624
    SOME=1625
    SORT=1626
    SOUNDEX=1627
    SOURCE_FILE_DIRECTORY=1628
    SOURCE_FILE_NAME_CONVERT=1629
    SOURCE=1630
    SPACE_KEYWORD=1631
    SPECIFICATION=1632
    SPFILE=1633
    SPLIT=1634
    SPREADSHEET=1635
    SQLDATA=1636
    SQLERROR=1637
    SQLLDR=1638
    SQL=1639
    FILE_EXT=1640
    SQL_MACRO=1641
    SQL_TRACE=1642
    SQL_TRANSLATION_PROFILE=1643
    SQRT=1644
    STALE=1645
    STANDALONE=1646
    STANDARD=1647
    STANDARD_HASH=1648
    STANDBY_MAX_DATA_DELAY=1649
    STANDBYS=1650
    STANDBY=1651
    STAR=1652
    STAR_TRANSFORMATION=1653
    START=1654
    STARTUP=1655
    STATEMENT_ID=1656
    STATEMENT_QUEUING=1657
    STATEMENTS=1658
    STATEMENT=1659
    STATE=1660
    STATIC=1661
    STATISTICS=1662
    STATS_BINOMIAL_TEST=1663
    STATS_CROSSTAB=1664
    STATS_F_TEST=1665
    STATS_KS_TEST=1666
    STATS_MODE=1667
    STATS_MW_TEST=1668
    STATS_ONE_WAY_ANOVA=1669
    STATS_T_TEST_INDEP=1670
    STATS_T_TEST_INDEPU=1671
    STATS_T_TEST_ONE=1672
    STATS_T_TEST_PAIRED=1673
    STATS_WSR_TEST=1674
    STDDEV_POP=1675
    STDDEV_SAMP=1676
    STOP=1677
    STORAGE=1678
    STORE=1679
    STREAMS=1680
    STREAM=1681
    STRICT=1682
    STRING=1683
    STRIPE_COLUMNS=1684
    STRIPE_WIDTH=1685
    STRIP=1686
    STRUCTURE=1687
    SUBMULTISET=1688
    SUBPARTITION_REL=1689
    SUBPARTITIONS=1690
    SUBPARTITION=1691
    SUBQUERIES=1692
    SUBQUERY_PRUNING=1693
    SUBSCRIBE=1694
    SUBSET=1695
    SUBSTITUTABLE=1696
    SUBSTR2=1697
    SUBSTR4=1698
    SUBSTRB=1699
    SUBSTRC=1700
    SUBTYPE=1701
    SUCCESSFUL=1702
    SUCCESS=1703
    SUMMARY=1704
    SUPPLEMENTAL=1705
    SUSPEND=1706
    SWAP_JOIN_INPUTS=1707
    SWITCHOVER=1708
    SWITCH=1709
    SYNCHRONOUS=1710
    SYNC=1711
    SYNONYM=1712
    SYS=1713
    SYSASM=1714
    SYS_AUDIT=1715
    SYSAUX=1716
    SYSBACKUP=1717
    SYS_CHECKACL=1718
    SYS_CHECK_PRIVILEGE=1719
    SYS_CONNECT_BY_PATH=1720
    SYS_CONTEXT=1721
    SYSDATE=1722
    SYSDBA=1723
    SYS_DBURIGEN=1724
    SYSDG=1725
    SYS_DL_CURSOR=1726
    SYS_DM_RXFORM_CHR=1727
    SYS_DM_RXFORM_NUM=1728
    SYS_DOM_COMPARE=1729
    SYS_DST_PRIM2SEC=1730
    SYS_DST_SEC2PRIM=1731
    SYS_ET_BFILE_TO_RAW=1732
    SYS_ET_BLOB_TO_IMAGE=1733
    SYS_ET_IMAGE_TO_BLOB=1734
    SYS_ET_RAW_TO_BFILE=1735
    SYS_EXTPDTXT=1736
    SYS_EXTRACT_UTC=1737
    SYS_FBT_INSDEL=1738
    SYS_FILTER_ACLS=1739
    SYS_FNMATCHES=1740
    SYS_FNREPLACE=1741
    SYS_GET_ACLIDS=1742
    SYS_GET_COL_ACLIDS=1743
    SYS_GET_PRIVILEGES=1744
    SYS_GETTOKENID=1745
    SYS_GETXTIVAL=1746
    SYS_GUID=1747
    SYSGUID=1748
    SYSKM=1749
    SYS_MAKE_XMLNODEID=1750
    SYS_MAKEXML=1751
    SYS_MKXMLATTR=1752
    SYS_MKXTI=1753
    SYSOBJ=1754
    SYS_OP_ADT2BIN=1755
    SYS_OP_ADTCONS=1756
    SYS_OP_ALSCRVAL=1757
    SYS_OP_ATG=1758
    SYS_OP_BIN2ADT=1759
    SYS_OP_BITVEC=1760
    SYS_OP_BL2R=1761
    SYS_OP_BLOOM_FILTER_LIST=1762
    SYS_OP_BLOOM_FILTER=1763
    SYS_OP_C2C=1764
    SYS_OP_CAST=1765
    SYS_OP_CEG=1766
    SYS_OP_CL2C=1767
    SYS_OP_COMBINED_HASH=1768
    SYS_OP_COMP=1769
    SYS_OP_CONVERT=1770
    SYS_OP_COUNTCHG=1771
    SYS_OP_CSCONV=1772
    SYS_OP_CSCONVTEST=1773
    SYS_OP_CSR=1774
    SYS_OP_CSX_PATCH=1775
    SYS_OP_CYCLED_SEQ=1776
    SYS_OP_DECOMP=1777
    SYS_OP_DESCEND=1778
    SYS_OP_DISTINCT=1779
    SYS_OP_DRA=1780
    SYS_OP_DUMP=1781
    SYS_OP_DV_CHECK=1782
    SYS_OP_ENFORCE_NOT_NULL=1783
    SYSOPER=1784
    SYS_OP_EXTRACT=1785
    SYS_OP_GROUPING=1786
    SYS_OP_GUID=1787
    SYS_OP_HASH=1788
    SYS_OP_IIX=1789
    SYS_OP_ITR=1790
    SYS_OP_KEY_VECTOR_CREATE=1791
    SYS_OP_KEY_VECTOR_FILTER_LIST=1792
    SYS_OP_KEY_VECTOR_FILTER=1793
    SYS_OP_KEY_VECTOR_SUCCEEDED=1794
    SYS_OP_KEY_VECTOR_USE=1795
    SYS_OP_LBID=1796
    SYS_OP_LOBLOC2BLOB=1797
    SYS_OP_LOBLOC2CLOB=1798
    SYS_OP_LOBLOC2ID=1799
    SYS_OP_LOBLOC2NCLOB=1800
    SYS_OP_LOBLOC2TYP=1801
    SYS_OP_LSVI=1802
    SYS_OP_LVL=1803
    SYS_OP_MAKEOID=1804
    SYS_OP_MAP_NONNULL=1805
    SYS_OP_MSR=1806
    SYS_OP_NICOMBINE=1807
    SYS_OP_NIEXTRACT=1808
    SYS_OP_NII=1809
    SYS_OP_NIX=1810
    SYS_OP_NOEXPAND=1811
    SYS_OP_NTCIMG=1812
    SYS_OP_NUMTORAW=1813
    SYS_OP_OIDVALUE=1814
    SYS_OP_OPNSIZE=1815
    SYS_OP_PAR_1=1816
    SYS_OP_PARGID_1=1817
    SYS_OP_PARGID=1818
    SYS_OP_PAR=1819
    SYS_OP_PART_ID=1820
    SYS_OP_PIVOT=1821
    SYS_OP_R2O=1822
    SYS_OP_RAWTONUM=1823
    SYS_OP_RDTM=1824
    SYS_OP_REF=1825
    SYS_OP_RMTD=1826
    SYS_OP_ROWIDTOOBJ=1827
    SYS_OP_RPB=1828
    SYS_OPTLOBPRBSC=1829
    SYS_OP_TOSETID=1830
    SYS_OP_TPR=1831
    SYS_OP_TRTB=1832
    SYS_OPTXICMP=1833
    SYS_OPTXQCASTASNQ=1834
    SYS_OP_UNDESCEND=1835
    SYS_OP_VECAND=1836
    SYS_OP_VECBIT=1837
    SYS_OP_VECOR=1838
    SYS_OP_VECXOR=1839
    SYS_OP_VERSION=1840
    SYS_OP_VREF=1841
    SYS_OP_VVD=1842
    SYS_OP_XMLCONS_FOR_CSX=1843
    SYS_OP_XPTHATG=1844
    SYS_OP_XPTHIDX=1845
    SYS_OP_XPTHOP=1846
    SYS_OP_XTXT2SQLT=1847
    SYS_OP_ZONE_ID=1848
    SYS_ORDERKEY_DEPTH=1849
    SYS_ORDERKEY_MAXCHILD=1850
    SYS_ORDERKEY_PARENT=1851
    SYS_PARALLEL_TXN=1852
    SYS_PATHID_IS_ATTR=1853
    SYS_PATHID_IS_NMSPC=1854
    SYS_PATHID_LASTNAME=1855
    SYS_PATHID_LASTNMSPC=1856
    SYS_PATH_REVERSE=1857
    SYS_PXQEXTRACT=1858
    SYS_RAW_TO_XSID=1859
    SYS_RID_ORDER=1860
    SYS_ROW_DELTA=1861
    SYS_SC_2_XMLT=1862
    SYS_SYNRCIREDO=1863
    SYSTEM_DEFINED=1864
    SYSTEM=1865
    SYSTIMESTAMP=1866
    SYS_TYPEID=1867
    SYS_UMAKEXML=1868
    SYS_XMLANALYZE=1869
    SYS_XMLCONTAINS=1870
    SYS_XMLCONV=1871
    SYS_XMLEXNSURI=1872
    SYS_XMLGEN=1873
    SYS_XMLI_LOC_ISNODE=1874
    SYS_XMLI_LOC_ISTEXT=1875
    SYS_XMLINSTR=1876
    SYS_XMLLOCATOR_GETSVAL=1877
    SYS_XMLNODEID_GETCID=1878
    SYS_XMLNODEID_GETLOCATOR=1879
    SYS_XMLNODEID_GETOKEY=1880
    SYS_XMLNODEID_GETPATHID=1881
    SYS_XMLNODEID_GETPTRID=1882
    SYS_XMLNODEID_GETRID=1883
    SYS_XMLNODEID_GETSVAL=1884
    SYS_XMLNODEID_GETTID=1885
    SYS_XMLNODEID=1886
    SYS_XMLT_2_SC=1887
    SYS_XMLTRANSLATE=1888
    SYS_XMLTYPE2SQL=1889
    SYS_XQ_ASQLCNV=1890
    SYS_XQ_ATOMCNVCHK=1891
    SYS_XQBASEURI=1892
    SYS_XQCASTABLEERRH=1893
    SYS_XQCODEP2STR=1894
    SYS_XQCODEPEQ=1895
    SYS_XQCON2SEQ=1896
    SYS_XQCONCAT=1897
    SYS_XQDELETE=1898
    SYS_XQDFLTCOLATION=1899
    SYS_XQDOC=1900
    SYS_XQDOCURI=1901
    SYS_XQDURDIV=1902
    SYS_XQED4URI=1903
    SYS_XQENDSWITH=1904
    SYS_XQERRH=1905
    SYS_XQERR=1906
    SYS_XQESHTMLURI=1907
    SYS_XQEXLOBVAL=1908
    SYS_XQEXSTWRP=1909
    SYS_XQEXTRACT=1910
    SYS_XQEXTRREF=1911
    SYS_XQEXVAL=1912
    SYS_XQFB2STR=1913
    SYS_XQFNBOOL=1914
    SYS_XQFNCMP=1915
    SYS_XQFNDATIM=1916
    SYS_XQFNLNAME=1917
    SYS_XQFNNM=1918
    SYS_XQFNNSURI=1919
    SYS_XQFNPREDTRUTH=1920
    SYS_XQFNQNM=1921
    SYS_XQFNROOT=1922
    SYS_XQFORMATNUM=1923
    SYS_XQFTCONTAIN=1924
    SYS_XQFUNCR=1925
    SYS_XQGETCONTENT=1926
    SYS_XQINDXOF=1927
    SYS_XQINSERT=1928
    SYS_XQINSPFX=1929
    SYS_XQIRI2URI=1930
    SYS_XQLANG=1931
    SYS_XQLLNMFRMQNM=1932
    SYS_XQMKNODEREF=1933
    SYS_XQNILLED=1934
    SYS_XQNODENAME=1935
    SYS_XQNORMSPACE=1936
    SYS_XQNORMUCODE=1937
    SYS_XQ_NRNG=1938
    SYS_XQNSP4PFX=1939
    SYS_XQNSPFRMQNM=1940
    SYS_XQPFXFRMQNM=1941
    SYS_XQ_PKSQL2XML=1942
    SYS_XQPOLYABS=1943
    SYS_XQPOLYADD=1944
    SYS_XQPOLYCEL=1945
    SYS_XQPOLYCSTBL=1946
    SYS_XQPOLYCST=1947
    SYS_XQPOLYDIV=1948
    SYS_XQPOLYFLR=1949
    SYS_XQPOLYMOD=1950
    SYS_XQPOLYMUL=1951
    SYS_XQPOLYRND=1952
    SYS_XQPOLYSQRT=1953
    SYS_XQPOLYSUB=1954
    SYS_XQPOLYUMUS=1955
    SYS_XQPOLYUPLS=1956
    SYS_XQPOLYVEQ=1957
    SYS_XQPOLYVGE=1958
    SYS_XQPOLYVGT=1959
    SYS_XQPOLYVLE=1960
    SYS_XQPOLYVLT=1961
    SYS_XQPOLYVNE=1962
    SYS_XQREF2VAL=1963
    SYS_XQRENAME=1964
    SYS_XQREPLACE=1965
    SYS_XQRESVURI=1966
    SYS_XQRNDHALF2EVN=1967
    SYS_XQRSLVQNM=1968
    SYS_XQRYENVPGET=1969
    SYS_XQRYVARGET=1970
    SYS_XQRYWRP=1971
    SYS_XQSEQ2CON4XC=1972
    SYS_XQSEQ2CON=1973
    SYS_XQSEQDEEPEQ=1974
    SYS_XQSEQINSB=1975
    SYS_XQSEQRM=1976
    SYS_XQSEQRVS=1977
    SYS_XQSEQSUB=1978
    SYS_XQSEQTYPMATCH=1979
    SYS_XQSTARTSWITH=1980
    SYS_XQSTATBURI=1981
    SYS_XQSTR2CODEP=1982
    SYS_XQSTRJOIN=1983
    SYS_XQSUBSTRAFT=1984
    SYS_XQSUBSTRBEF=1985
    SYS_XQTOKENIZE=1986
    SYS_XQTREATAS=1987
    SYS_XQ_UPKXML2SQL=1988
    SYS_XQXFORM=1989
    SYS_XSID_TO_RAW=1990
    SYS_ZMAP_FILTER=1991
    SYS_ZMAP_REFRESH=1992
    T_LETTER=1993
    TABLE_LOOKUP_BY_NL=1994
    TABLESPACE_NO=1995
    TABLESPACE=1996
    TABLES=1997
    TABLE_STATS=1998
    TABLE=1999
    TABNO=2000
    TAG=2001
    TANH=2002
    TAN=2003
    TBLORIDXPARTNUM=2004
    TEMPFILE=2005
    TEMPLATE=2006
    TEMPORARY=2007
    TEMP_TABLE=2008
    TEST=2009
    TEXT=2010
    THAN=2011
    THEN=2012
    THE=2013
    THREAD=2014
    THROUGH=2015
    TIER=2016
    TIES=2017
    TIMEOUT=2018
    TIMESTAMP_LTZ_UNCONSTRAINED=2019
    TIMESTAMP=2020
    TIMESTAMP_TZ_UNCONSTRAINED=2021
    TIMESTAMP_UNCONSTRAINED=2022
    TIMES=2023
    TIME=2024
    TIMEZONE=2025
    TIMEZONE_ABBR=2026
    TIMEZONE_HOUR=2027
    TIMEZONE_MINUTE=2028
    TIMEZONE_OFFSET=2029
    TIMEZONE_REGION=2030
    TIME_ZONE=2031
    TIMING=2032
    TIV_GB=2033
    TIV_SSF=2034
    TO_ACLID=2035
    TO_BINARY_DOUBLE=2036
    TO_BINARY_FLOAT=2037
    TO_BLOB=2038
    TO_CLOB=2039
    TO_DSINTERVAL=2040
    TO_LOB=2041
    TO_MULTI_BYTE=2042
    TO_NCHAR=2043
    TO_NCLOB=2044
    TO_NUMBER=2045
    TOPLEVEL=2046
    TO_SINGLE_BYTE=2047
    TO_TIMESTAMP=2048
    TO_TIMESTAMP_TZ=2049
    TO_TIME=2050
    TO_TIME_TZ=2051
    TO=2052
    TO_YMINTERVAL=2053
    TRACE=2054
    TRACING=2055
    TRACKING=2056
    TRAILING=2057
    TRANSACTION=2058
    TRANSFORM=2059
    TRANSFORM_DISTINCT_AGG=2060
    TRANSITIONAL=2061
    TRANSITION=2062
    TRANSLATE=2063
    TRANSLATION=2064
    TREAT=2065
    TRIGGERS=2066
    TRIGGER=2067
    TRUE=2068
    TRUNCATE=2069
    TRUNC=2070
    TRUSTED=2071
    TRUST=2072
    TUNING=2073
    TX=2074
    TYPES=2075
    TYPE=2076
    TZ_OFFSET=2077
    UB2=2078
    UBA=2079
    UCS2=2080
    UID=2081
    UNARCHIVED=2082
    UNBOUNDED=2083
    UNBOUND=2084
    UNCONDITIONAL=2085
    UNDER=2086
    UNDO=2087
    UNDROP=2088
    UNIFORM=2089
    UNION=2090
    UNIQUE=2091
    UNISTR=2092
    UNLIMITED=2093
    UNLOAD=2094
    UNLOCK=2095
    UNMATCHED=2096
    UNNEST_INNERJ_DISTINCT_VIEW=2097
    UNNEST_NOSEMIJ_NODISTINCTVIEW=2098
    UNNEST_SEMIJ_VIEW=2099
    UNNEST=2100
    UNPACKED=2101
    UNPIVOT=2102
    UNPLUG=2103
    UNPROTECTED=2104
    UNQUIESCE=2105
    UNRECOVERABLE=2106
    UNRESTRICTED=2107
    UNSUBSCRIBE=2108
    UNTIL=2109
    UNUSABLE=2110
    UNUSED=2111
    UPDATABLE=2112
    UPDATED=2113
    UPDATE=2114
    UPDATEXML=2115
    UPD_INDEXES=2116
    UPD_JOININDEX=2117
    UPGRADE=2118
    UPPER=2119
    UPSERT=2120
    UROWID=2121
    USABLE=2122
    USAGE=2123
    USE_ANTI=2124
    USE_CONCAT=2125
    USE_CUBE=2126
    USE_HASH_AGGREGATION=2127
    USE_HASH_GBY_FOR_PUSHDOWN=2128
    USE_HASH=2129
    USE_HIDDEN_PARTITIONS=2130
    USE_INVISIBLE_INDEXES=2131
    USE_MERGE_CARTESIAN=2132
    USE_MERGE=2133
    USE_NL=2134
    USE_NL_WITH_INDEX=2135
    USE_PRIVATE_OUTLINES=2136
    USER_DATA=2137
    USER_DEFINED=2138
    USERENV=2139
    USERGROUP=2140
    USER_RECYCLEBIN=2141
    USERS=2142
    USER_TABLESPACES=2143
    USER=2144
    USE_SEMI=2145
    USE_STORED_OUTLINES=2146
    USE_TTT_FOR_GSETS=2147
    USE=2148
    USE_VECTOR_AGGREGATION=2149
    USE_WEAK_NAME_RESL=2150
    USING_NO_EXPAND=2151
    USING_NLS_COMP=2152
    USING=2153
    UTF16BE=2154
    UTF16LE=2155
    UTF32=2156
    UTF8=2157
    V1=2158
    V2=2159
    VALIDATE=2160
    VALIDATE_CONVERSION=2161
    VALIDATION=2162
    VALID_TIME_END=2163
    VALUES=2164
    VALUE=2165
    VARCHAR2=2166
    VARCHAR=2167
    VARIABLE=2168
    VAR_POP=2169
    VARRAYS=2170
    VARRAY=2171
    VAR_SAMP=2172
    VARYING=2173
    VECTOR_READ_TRACE=2174
    VECTOR_READ=2175
    VECTOR_TRANSFORM_DIMS=2176
    VECTOR_TRANSFORM_FACT=2177
    VECTOR_TRANSFORM=2178
    VERIFIER=2179
    VERIFY=2180
    VERSIONING=2181
    VERSIONS_ENDSCN=2182
    VERSIONS_ENDTIME=2183
    VERSIONS_OPERATION=2184
    VERSIONS_STARTSCN=2185
    VERSIONS_STARTTIME=2186
    VERSIONS=2187
    VERSIONS_XID=2188
    VERSION=2189
    VIEW=2190
    VIOLATION=2191
    VIRTUAL=2192
    VISIBILITY=2193
    VISIBLE=2194
    VOLUME=2195
    VSIZE=2196
    WAIT=2197
    WALLET=2198
    WARNING=2199
    WEEKS=2200
    WEEK=2201
    WELLFORMED=2202
    WHENEVER=2203
    WHEN=2204
    WHERE=2205
    WHILE=2206
    WHITESPACE=2207
    WIDTH_BUCKET=2208
    WITHIN=2209
    WITHOUT=2210
    WITH_PLSQL=2211
    WITH=2212
    WORK=2213
    WRAPPED=2214
    WRAPPER=2215
    WRITE=2216
    XDB_FASTPATH_INSERT=2217
    XDB=2218
    X_DYN_PRUNE=2219
    XID=2220
    XML2OBJECT=2221
    XMLAGG=2222
    XMLATTRIBUTES=2223
    XMLCAST=2224
    XMLCDATA=2225
    XMLCOLATTVAL=2226
    XMLCOMMENT=2227
    XMLCONCAT=2228
    XMLDIFF=2229
    XML_DML_RWT_STMT=2230
    XMLELEMENT=2231
    XMLEXISTS2=2232
    XMLEXISTS=2233
    XMLFOREST=2234
    XMLINDEX=2235
    XMLINDEX_REWRITE_IN_SELECT=2236
    XMLINDEX_REWRITE=2237
    XMLINDEX_SEL_IDX_TBL=2238
    XMLISNODE=2239
    XMLISVALID=2240
    XMLNAMESPACES=2241
    XMLPARSE=2242
    XMLPATCH=2243
    XMLPI=2244
    XMLQUERYVAL=2245
    XMLQUERY=2246
    XMLROOT=2247
    XMLSCHEMA=2248
    XMLSERIALIZE=2249
    XMLTABLE=2250
    XMLTRANSFORMBLOB=2251
    XMLTRANSFORM=2252
    XMLTYPE=2253
    XML=2254
    XPATHTABLE=2255
    XS_SYS_CONTEXT=2256
    XS=2257
    XTRANSPORT=2258
    YEARS=2259
    YEAR=2260
    YES=2261
    YMINTERVAL_UNCONSTRAINED=2262
    ZONEMAP=2263
    ZONE=2264
    PREDICTION=2265
    PREDICTION_BOUNDS=2266
    PREDICTION_COST=2267
    PREDICTION_DETAILS=2268
    PREDICTION_PROBABILITY=2269
    PREDICTION_SET=2270
    BLOCKCHAIN=2271
    COLLATE=2272
    COLLATION=2273
    DEFINITION=2274
    DUPLICATED=2275
    EXTENDED=2276
    HASHING=2277
    IDLE=2278
    IMMUTABLE=2279
    ORACLE_DATAPUMP=2280
    ORACLE_HDFS=2281
    ORACLE_HIVE=2282
    ORACLE_LOADER=2283
    SHA2_512_Q=2284
    SHARDED=2285
    V1_Q=2286
    ISOLATE=2287
    ROOT=2288
    UNITE=2289
    ALGORITHM=2290
    CUME_DIST=2291
    DENSE_RANK=2292
    LISTAGG=2293
    PERCENT_RANK=2294
    PERCENTILE_CONT=2295
    PERCENTILE_DISC=2296
    RANK=2297
    AVG=2298
    CORR=2299
    COVAR_=2300
    DECODE=2301
    LAG=2302
    LAG_DIFF=2303
    LAG_DIFF_PERCENT=2304
    LEAD=2305
    MAX=2306
    MEDIAN=2307
    MEMOPTIMIZE=2308
    MIN=2309
    NTILE=2310
    NVL=2311
    RATIO_TO_REPORT=2312
    REGR_=2313
    ROUND=2314
    ROW_NUMBER=2315
    SUBSTR=2316
    TO_CHAR=2317
    TRIM=2318
    SUM=2319
    STDDEV=2320
    VAR_=2321
    VARIANCE=2322
    LEAST=2323
    GREATEST=2324
    TO_DATE=2325
    CHARSETID=2326
    CHARSETFORM=2327
    DURATION=2328
    EXTEND=2329
    MAXLEN=2330
    PERSISTABLE=2331
    POLYMORPHIC=2332
    STRUCT=2333
    TDO=2334
    WM_CONCAT=2335
    NATIONAL_CHAR_STRING_LIT=2336
    BIT_STRING_LIT=2337
    HEX_STRING_LIT=2338
    DOUBLE_PERIOD=2339
    PERIOD=2340
    UNSIGNED_INTEGER=2341
    APPROXIMATE_NUM_LIT=2342
    CHAR_STRING=2343
    DELIMITED_ID=2344
    PERCENT=2345
    AMPERSAND=2346
    LEFT_PAREN=2347
    RIGHT_PAREN=2348
    DOUBLE_ASTERISK=2349
    ASTERISK=2350
    PLUS_SIGN=2351
    MINUS_SIGN=2352
    COMMA=2353
    SOLIDUS=2354
    AT_SIGN=2355
    ASSIGN_OP=2356
    HASH_OP=2357
    SQ=2358
    BINDVAR=2359
    NOT_EQUAL_OP=2360
    CARRET_OPERATOR_PART=2361
    TILDE_OPERATOR_PART=2362
    EXCLAMATION_OPERATOR_PART=2363
    GREATER_THAN_OP=2364
    LESS_THAN_OP=2365
    COLON=2366
    SEMICOLON=2367
    BAR=2368
    EQUALS_OP=2369
    LEFT_BRACKET=2370
    RIGHT_BRACKET=2371
    INTRODUCER=2372
    SINGLE_LINE_COMMENT=2373
    MULTI_LINE_COMMENT=2374
    REMARK_COMMENT=2375
    PROMPT_MESSAGE=2376
    START_CMD=2377
    REGULAR_ID=2378
    INQUIRY_DIRECTIVE=2379
    SPACES=2380

    def __init__(self, input:TokenStream, output:TextIO = sys.stdout):
        super().__init__(input, output)
        self.checkVersion("4.13.1")
        self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache)
        self._predicates = None




    class Sql_scriptContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EOF(self):
            return self.getToken(PlSqlParser.EOF, 0)

        def sql_plus_command_no_semicolon(self):
            return self.getTypedRuleContext(PlSqlParser.Sql_plus_command_no_semicolonContext,0)


        def sql_plus_command(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sql_plus_commandContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sql_plus_commandContext,i)


        def unit_statement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Unit_statementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Unit_statementContext,i)


        def SEMICOLON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEMICOLON)
            else:
                return self.getToken(PlSqlParser.SEMICOLON, i)

        def SOLIDUS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SOLIDUS)
            else:
                return self.getToken(PlSqlParser.SOLIDUS, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_script

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_script" ):
                listener.enterSql_script(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_script" ):
                listener.exitSql_script(self)




    def sql_script(self):

        localctx = PlSqlParser.Sql_scriptContext(self, self._ctx, self.state)
        self.enterRule(localctx, 0, self.RULE_sql_script)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2383
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,0,self._ctx)
            if la_ == 1:
                self.state = 2382
                self.sql_plus_command_no_semicolon()


            self.state = 2387
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1,self._ctx)
            if la_ == 1:
                self.state = 2385
                self.sql_plus_command()
                pass

            elif la_ == 2:
                self.state = 2386
                self.unit_statement()
                pass


            self.state = 2399
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,4,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 2389
                    self.match(PlSqlParser.SEMICOLON)
                    self.state = 2391
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2,self._ctx)
                    if la_ == 1:
                        self.state = 2390
                        self.match(PlSqlParser.SOLIDUS)


                    self.state = 2395
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,3,self._ctx)
                    if la_ == 1:
                        self.state = 2393
                        self.sql_plus_command()
                        pass

                    elif la_ == 2:
                        self.state = 2394
                        self.unit_statement()
                        pass

             
                self.state = 2401
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,4,self._ctx)

            self.state = 2403
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2367:
                self.state = 2402
                self.match(PlSqlParser.SEMICOLON)


            self.state = 2406
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2354:
                self.state = 2405
                self.match(PlSqlParser.SOLIDUS)


            self.state = 2408
            self.match(PlSqlParser.EOF)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unit_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def alter_analytic_view(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_analytic_viewContext,0)


        def alter_attribute_dimension(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_attribute_dimensionContext,0)


        def alter_audit_policy(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_audit_policyContext,0)


        def alter_cluster(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_clusterContext,0)


        def alter_database(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_databaseContext,0)


        def alter_database_link(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_database_linkContext,0)


        def alter_dimension(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_dimensionContext,0)


        def alter_diskgroup(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_diskgroupContext,0)


        def alter_flashback_archive(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_flashback_archiveContext,0)


        def alter_function(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_functionContext,0)


        def alter_hierarchy(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_hierarchyContext,0)


        def alter_index(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_indexContext,0)


        def alter_inmemory_join_group(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_inmemory_join_groupContext,0)


        def alter_java(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_javaContext,0)


        def alter_library(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_libraryContext,0)


        def alter_lockdown_profile(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_lockdown_profileContext,0)


        def alter_materialized_view(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_materialized_viewContext,0)


        def alter_materialized_view_log(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_materialized_view_logContext,0)


        def alter_materialized_zonemap(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_materialized_zonemapContext,0)


        def alter_operator(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_operatorContext,0)


        def alter_outline(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_outlineContext,0)


        def alter_package(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_packageContext,0)


        def alter_pmem_filestore(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_pmem_filestoreContext,0)


        def alter_procedure(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_procedureContext,0)


        def alter_resource_cost(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_resource_costContext,0)


        def alter_role(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_roleContext,0)


        def alter_rollback_segment(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_rollback_segmentContext,0)


        def alter_sequence(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_sequenceContext,0)


        def alter_session(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_sessionContext,0)


        def alter_synonym(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_synonymContext,0)


        def alter_table(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_tableContext,0)


        def alter_tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_tablespaceContext,0)


        def alter_tablespace_set(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_tablespace_setContext,0)


        def alter_trigger(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_triggerContext,0)


        def alter_type(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_typeContext,0)


        def alter_user(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_userContext,0)


        def alter_view(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_viewContext,0)


        def call_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Call_statementContext,0)


        def create_analytic_view(self):
            return self.getTypedRuleContext(PlSqlParser.Create_analytic_viewContext,0)


        def create_attribute_dimension(self):
            return self.getTypedRuleContext(PlSqlParser.Create_attribute_dimensionContext,0)


        def create_audit_policy(self):
            return self.getTypedRuleContext(PlSqlParser.Create_audit_policyContext,0)


        def create_cluster(self):
            return self.getTypedRuleContext(PlSqlParser.Create_clusterContext,0)


        def create_context(self):
            return self.getTypedRuleContext(PlSqlParser.Create_contextContext,0)


        def create_controlfile(self):
            return self.getTypedRuleContext(PlSqlParser.Create_controlfileContext,0)


        def create_database(self):
            return self.getTypedRuleContext(PlSqlParser.Create_databaseContext,0)


        def create_database_link(self):
            return self.getTypedRuleContext(PlSqlParser.Create_database_linkContext,0)


        def create_dimension(self):
            return self.getTypedRuleContext(PlSqlParser.Create_dimensionContext,0)


        def create_directory(self):
            return self.getTypedRuleContext(PlSqlParser.Create_directoryContext,0)


        def create_diskgroup(self):
            return self.getTypedRuleContext(PlSqlParser.Create_diskgroupContext,0)


        def create_edition(self):
            return self.getTypedRuleContext(PlSqlParser.Create_editionContext,0)


        def create_flashback_archive(self):
            return self.getTypedRuleContext(PlSqlParser.Create_flashback_archiveContext,0)


        def create_function_body(self):
            return self.getTypedRuleContext(PlSqlParser.Create_function_bodyContext,0)


        def create_hierarchy(self):
            return self.getTypedRuleContext(PlSqlParser.Create_hierarchyContext,0)


        def create_index(self):
            return self.getTypedRuleContext(PlSqlParser.Create_indexContext,0)


        def create_inmemory_join_group(self):
            return self.getTypedRuleContext(PlSqlParser.Create_inmemory_join_groupContext,0)


        def create_java(self):
            return self.getTypedRuleContext(PlSqlParser.Create_javaContext,0)


        def create_library(self):
            return self.getTypedRuleContext(PlSqlParser.Create_libraryContext,0)


        def create_lockdown_profile(self):
            return self.getTypedRuleContext(PlSqlParser.Create_lockdown_profileContext,0)


        def create_materialized_view(self):
            return self.getTypedRuleContext(PlSqlParser.Create_materialized_viewContext,0)


        def create_materialized_view_log(self):
            return self.getTypedRuleContext(PlSqlParser.Create_materialized_view_logContext,0)


        def create_materialized_zonemap(self):
            return self.getTypedRuleContext(PlSqlParser.Create_materialized_zonemapContext,0)


        def create_operator(self):
            return self.getTypedRuleContext(PlSqlParser.Create_operatorContext,0)


        def create_outline(self):
            return self.getTypedRuleContext(PlSqlParser.Create_outlineContext,0)


        def create_package(self):
            return self.getTypedRuleContext(PlSqlParser.Create_packageContext,0)


        def create_package_body(self):
            return self.getTypedRuleContext(PlSqlParser.Create_package_bodyContext,0)


        def create_pmem_filestore(self):
            return self.getTypedRuleContext(PlSqlParser.Create_pmem_filestoreContext,0)


        def create_procedure_body(self):
            return self.getTypedRuleContext(PlSqlParser.Create_procedure_bodyContext,0)


        def create_profile(self):
            return self.getTypedRuleContext(PlSqlParser.Create_profileContext,0)


        def create_restore_point(self):
            return self.getTypedRuleContext(PlSqlParser.Create_restore_pointContext,0)


        def create_role(self):
            return self.getTypedRuleContext(PlSqlParser.Create_roleContext,0)


        def create_rollback_segment(self):
            return self.getTypedRuleContext(PlSqlParser.Create_rollback_segmentContext,0)


        def create_sequence(self):
            return self.getTypedRuleContext(PlSqlParser.Create_sequenceContext,0)


        def create_spfile(self):
            return self.getTypedRuleContext(PlSqlParser.Create_spfileContext,0)


        def create_synonym(self):
            return self.getTypedRuleContext(PlSqlParser.Create_synonymContext,0)


        def create_table(self):
            return self.getTypedRuleContext(PlSqlParser.Create_tableContext,0)


        def create_tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.Create_tablespaceContext,0)


        def create_tablespace_set(self):
            return self.getTypedRuleContext(PlSqlParser.Create_tablespace_setContext,0)


        def create_trigger(self):
            return self.getTypedRuleContext(PlSqlParser.Create_triggerContext,0)


        def create_type(self):
            return self.getTypedRuleContext(PlSqlParser.Create_typeContext,0)


        def create_user(self):
            return self.getTypedRuleContext(PlSqlParser.Create_userContext,0)


        def create_view(self):
            return self.getTypedRuleContext(PlSqlParser.Create_viewContext,0)


        def drop_analytic_view(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_analytic_viewContext,0)


        def drop_attribute_dimension(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_attribute_dimensionContext,0)


        def drop_audit_policy(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_audit_policyContext,0)


        def drop_cluster(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_clusterContext,0)


        def drop_context(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_contextContext,0)


        def drop_database(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_databaseContext,0)


        def drop_database_link(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_database_linkContext,0)


        def drop_directory(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_directoryContext,0)


        def drop_diskgroup(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_diskgroupContext,0)


        def drop_edition(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_editionContext,0)


        def drop_flashback_archive(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_flashback_archiveContext,0)


        def drop_function(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_functionContext,0)


        def drop_hierarchy(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_hierarchyContext,0)


        def drop_index(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_indexContext,0)


        def drop_indextype(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_indextypeContext,0)


        def drop_inmemory_join_group(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_inmemory_join_groupContext,0)


        def drop_java(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_javaContext,0)


        def drop_library(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_libraryContext,0)


        def drop_lockdown_profile(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_lockdown_profileContext,0)


        def drop_materialized_view(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_materialized_viewContext,0)


        def drop_materialized_zonemap(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_materialized_zonemapContext,0)


        def drop_operator(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_operatorContext,0)


        def drop_outline(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_outlineContext,0)


        def drop_package(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_packageContext,0)


        def drop_pmem_filestore(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_pmem_filestoreContext,0)


        def drop_procedure(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_procedureContext,0)


        def drop_restore_point(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_restore_pointContext,0)


        def drop_role(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_roleContext,0)


        def drop_rollback_segment(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_rollback_segmentContext,0)


        def drop_sequence(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_sequenceContext,0)


        def drop_synonym(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_synonymContext,0)


        def drop_table(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_tableContext,0)


        def drop_tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_tablespaceContext,0)


        def drop_tablespace_set(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_tablespace_setContext,0)


        def drop_trigger(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_triggerContext,0)


        def drop_type(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_typeContext,0)


        def drop_user(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_userContext,0)


        def drop_view(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_viewContext,0)


        def administer_key_management(self):
            return self.getTypedRuleContext(PlSqlParser.Administer_key_managementContext,0)


        def analyze(self):
            return self.getTypedRuleContext(PlSqlParser.AnalyzeContext,0)


        def anonymous_block(self):
            return self.getTypedRuleContext(PlSqlParser.Anonymous_blockContext,0)


        def associate_statistics(self):
            return self.getTypedRuleContext(PlSqlParser.Associate_statisticsContext,0)


        def audit_traditional(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_traditionalContext,0)


        def comment_on_column(self):
            return self.getTypedRuleContext(PlSqlParser.Comment_on_columnContext,0)


        def comment_on_materialized(self):
            return self.getTypedRuleContext(PlSqlParser.Comment_on_materializedContext,0)


        def comment_on_table(self):
            return self.getTypedRuleContext(PlSqlParser.Comment_on_tableContext,0)


        def data_manipulation_language_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Data_manipulation_language_statementsContext,0)


        def disassociate_statistics(self):
            return self.getTypedRuleContext(PlSqlParser.Disassociate_statisticsContext,0)


        def flashback_table(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_tableContext,0)


        def grant_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Grant_statementContext,0)


        def noaudit_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Noaudit_statementContext,0)


        def purge_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Purge_statementContext,0)


        def rename_object(self):
            return self.getTypedRuleContext(PlSqlParser.Rename_objectContext,0)


        def revoke_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Revoke_statementContext,0)


        def transaction_control_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Transaction_control_statementsContext,0)


        def truncate_cluster(self):
            return self.getTypedRuleContext(PlSqlParser.Truncate_clusterContext,0)


        def truncate_table(self):
            return self.getTypedRuleContext(PlSqlParser.Truncate_tableContext,0)


        def unified_auditing(self):
            return self.getTypedRuleContext(PlSqlParser.Unified_auditingContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_unit_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnit_statement" ):
                listener.enterUnit_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnit_statement" ):
                listener.exitUnit_statement(self)




    def unit_statement(self):

        localctx = PlSqlParser.Unit_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2, self.RULE_unit_statement)
        try:
            self.state = 2549
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,7,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 2410
                self.alter_analytic_view()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 2411
                self.alter_attribute_dimension()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 2412
                self.alter_audit_policy()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 2413
                self.alter_cluster()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 2414
                self.alter_database()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 2415
                self.alter_database_link()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 2416
                self.alter_dimension()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 2417
                self.alter_diskgroup()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 2418
                self.alter_flashback_archive()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 2419
                self.alter_function()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 2420
                self.alter_hierarchy()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 2421
                self.alter_index()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 2422
                self.alter_inmemory_join_group()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 2423
                self.alter_java()
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 2424
                self.alter_library()
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 2425
                self.alter_lockdown_profile()
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 2426
                self.alter_materialized_view()
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 2427
                self.alter_materialized_view_log()
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 2428
                self.alter_materialized_zonemap()
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 2429
                self.alter_operator()
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 2430
                self.alter_outline()
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 2431
                self.alter_package()
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 2432
                self.alter_pmem_filestore()
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 2433
                self.alter_procedure()
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 2434
                self.alter_resource_cost()
                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 2435
                self.alter_role()
                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 2436
                self.alter_rollback_segment()
                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 2437
                self.alter_sequence()
                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 2438
                self.alter_session()
                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 2439
                self.alter_synonym()
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 2440
                self.alter_table()
                pass

            elif la_ == 32:
                self.enterOuterAlt(localctx, 32)
                self.state = 2441
                self.alter_tablespace()
                pass

            elif la_ == 33:
                self.enterOuterAlt(localctx, 33)
                self.state = 2442
                self.alter_tablespace_set()
                pass

            elif la_ == 34:
                self.enterOuterAlt(localctx, 34)
                self.state = 2443
                self.alter_trigger()
                pass

            elif la_ == 35:
                self.enterOuterAlt(localctx, 35)
                self.state = 2444
                self.alter_type()
                pass

            elif la_ == 36:
                self.enterOuterAlt(localctx, 36)
                self.state = 2445
                self.alter_user()
                pass

            elif la_ == 37:
                self.enterOuterAlt(localctx, 37)
                self.state = 2446
                self.alter_view()
                pass

            elif la_ == 38:
                self.enterOuterAlt(localctx, 38)
                self.state = 2447
                self.call_statement()
                pass

            elif la_ == 39:
                self.enterOuterAlt(localctx, 39)
                self.state = 2448
                self.create_analytic_view()
                pass

            elif la_ == 40:
                self.enterOuterAlt(localctx, 40)
                self.state = 2449
                self.create_attribute_dimension()
                pass

            elif la_ == 41:
                self.enterOuterAlt(localctx, 41)
                self.state = 2450
                self.create_audit_policy()
                pass

            elif la_ == 42:
                self.enterOuterAlt(localctx, 42)
                self.state = 2451
                self.create_cluster()
                pass

            elif la_ == 43:
                self.enterOuterAlt(localctx, 43)
                self.state = 2452
                self.create_context()
                pass

            elif la_ == 44:
                self.enterOuterAlt(localctx, 44)
                self.state = 2453
                self.create_controlfile()
                pass

            elif la_ == 45:
                self.enterOuterAlt(localctx, 45)
                self.state = 2454
                self.create_database()
                pass

            elif la_ == 46:
                self.enterOuterAlt(localctx, 46)
                self.state = 2455
                self.create_database_link()
                pass

            elif la_ == 47:
                self.enterOuterAlt(localctx, 47)
                self.state = 2456
                self.create_dimension()
                pass

            elif la_ == 48:
                self.enterOuterAlt(localctx, 48)
                self.state = 2457
                self.create_directory()
                pass

            elif la_ == 49:
                self.enterOuterAlt(localctx, 49)
                self.state = 2458
                self.create_diskgroup()
                pass

            elif la_ == 50:
                self.enterOuterAlt(localctx, 50)
                self.state = 2459
                self.create_edition()
                pass

            elif la_ == 51:
                self.enterOuterAlt(localctx, 51)
                self.state = 2460
                self.create_flashback_archive()
                pass

            elif la_ == 52:
                self.enterOuterAlt(localctx, 52)
                self.state = 2461
                self.create_function_body()
                pass

            elif la_ == 53:
                self.enterOuterAlt(localctx, 53)
                self.state = 2462
                self.create_hierarchy()
                pass

            elif la_ == 54:
                self.enterOuterAlt(localctx, 54)
                self.state = 2463
                self.create_index()
                pass

            elif la_ == 55:
                self.enterOuterAlt(localctx, 55)
                self.state = 2464
                self.create_inmemory_join_group()
                pass

            elif la_ == 56:
                self.enterOuterAlt(localctx, 56)
                self.state = 2465
                self.create_java()
                pass

            elif la_ == 57:
                self.enterOuterAlt(localctx, 57)
                self.state = 2466
                self.create_library()
                pass

            elif la_ == 58:
                self.enterOuterAlt(localctx, 58)
                self.state = 2467
                self.create_lockdown_profile()
                pass

            elif la_ == 59:
                self.enterOuterAlt(localctx, 59)
                self.state = 2468
                self.create_materialized_view()
                pass

            elif la_ == 60:
                self.enterOuterAlt(localctx, 60)
                self.state = 2469
                self.create_materialized_view_log()
                pass

            elif la_ == 61:
                self.enterOuterAlt(localctx, 61)
                self.state = 2470
                self.create_materialized_zonemap()
                pass

            elif la_ == 62:
                self.enterOuterAlt(localctx, 62)
                self.state = 2471
                self.create_operator()
                pass

            elif la_ == 63:
                self.enterOuterAlt(localctx, 63)
                self.state = 2472
                self.create_outline()
                pass

            elif la_ == 64:
                self.enterOuterAlt(localctx, 64)
                self.state = 2473
                self.create_package()
                pass

            elif la_ == 65:
                self.enterOuterAlt(localctx, 65)
                self.state = 2474
                self.create_package_body()
                pass

            elif la_ == 66:
                self.enterOuterAlt(localctx, 66)
                self.state = 2475
                self.create_pmem_filestore()
                pass

            elif la_ == 67:
                self.enterOuterAlt(localctx, 67)
                self.state = 2476
                self.create_procedure_body()
                pass

            elif la_ == 68:
                self.enterOuterAlt(localctx, 68)
                self.state = 2477
                self.create_profile()
                pass

            elif la_ == 69:
                self.enterOuterAlt(localctx, 69)
                self.state = 2478
                self.create_restore_point()
                pass

            elif la_ == 70:
                self.enterOuterAlt(localctx, 70)
                self.state = 2479
                self.create_role()
                pass

            elif la_ == 71:
                self.enterOuterAlt(localctx, 71)
                self.state = 2480
                self.create_rollback_segment()
                pass

            elif la_ == 72:
                self.enterOuterAlt(localctx, 72)
                self.state = 2481
                self.create_sequence()
                pass

            elif la_ == 73:
                self.enterOuterAlt(localctx, 73)
                self.state = 2482
                self.create_spfile()
                pass

            elif la_ == 74:
                self.enterOuterAlt(localctx, 74)
                self.state = 2483
                self.create_synonym()
                pass

            elif la_ == 75:
                self.enterOuterAlt(localctx, 75)
                self.state = 2484
                self.create_table()
                pass

            elif la_ == 76:
                self.enterOuterAlt(localctx, 76)
                self.state = 2485
                self.create_tablespace()
                pass

            elif la_ == 77:
                self.enterOuterAlt(localctx, 77)
                self.state = 2486
                self.create_tablespace_set()
                pass

            elif la_ == 78:
                self.enterOuterAlt(localctx, 78)
                self.state = 2487
                self.create_trigger()
                pass

            elif la_ == 79:
                self.enterOuterAlt(localctx, 79)
                self.state = 2488
                self.create_type()
                pass

            elif la_ == 80:
                self.enterOuterAlt(localctx, 80)
                self.state = 2489
                self.create_user()
                pass

            elif la_ == 81:
                self.enterOuterAlt(localctx, 81)
                self.state = 2490
                self.create_view()
                pass

            elif la_ == 82:
                self.enterOuterAlt(localctx, 82)
                self.state = 2491
                self.drop_analytic_view()
                pass

            elif la_ == 83:
                self.enterOuterAlt(localctx, 83)
                self.state = 2492
                self.drop_attribute_dimension()
                pass

            elif la_ == 84:
                self.enterOuterAlt(localctx, 84)
                self.state = 2493
                self.drop_audit_policy()
                pass

            elif la_ == 85:
                self.enterOuterAlt(localctx, 85)
                self.state = 2494
                self.drop_cluster()
                pass

            elif la_ == 86:
                self.enterOuterAlt(localctx, 86)
                self.state = 2495
                self.drop_context()
                pass

            elif la_ == 87:
                self.enterOuterAlt(localctx, 87)
                self.state = 2496
                self.drop_database()
                pass

            elif la_ == 88:
                self.enterOuterAlt(localctx, 88)
                self.state = 2497
                self.drop_database_link()
                pass

            elif la_ == 89:
                self.enterOuterAlt(localctx, 89)
                self.state = 2498
                self.drop_directory()
                pass

            elif la_ == 90:
                self.enterOuterAlt(localctx, 90)
                self.state = 2499
                self.drop_diskgroup()
                pass

            elif la_ == 91:
                self.enterOuterAlt(localctx, 91)
                self.state = 2500
                self.drop_edition()
                pass

            elif la_ == 92:
                self.enterOuterAlt(localctx, 92)
                self.state = 2501
                self.drop_flashback_archive()
                pass

            elif la_ == 93:
                self.enterOuterAlt(localctx, 93)
                self.state = 2502
                self.drop_function()
                pass

            elif la_ == 94:
                self.enterOuterAlt(localctx, 94)
                self.state = 2503
                self.drop_hierarchy()
                pass

            elif la_ == 95:
                self.enterOuterAlt(localctx, 95)
                self.state = 2504
                self.drop_index()
                pass

            elif la_ == 96:
                self.enterOuterAlt(localctx, 96)
                self.state = 2505
                self.drop_indextype()
                pass

            elif la_ == 97:
                self.enterOuterAlt(localctx, 97)
                self.state = 2506
                self.drop_inmemory_join_group()
                pass

            elif la_ == 98:
                self.enterOuterAlt(localctx, 98)
                self.state = 2507
                self.drop_java()
                pass

            elif la_ == 99:
                self.enterOuterAlt(localctx, 99)
                self.state = 2508
                self.drop_library()
                pass

            elif la_ == 100:
                self.enterOuterAlt(localctx, 100)
                self.state = 2509
                self.drop_lockdown_profile()
                pass

            elif la_ == 101:
                self.enterOuterAlt(localctx, 101)
                self.state = 2510
                self.drop_materialized_view()
                pass

            elif la_ == 102:
                self.enterOuterAlt(localctx, 102)
                self.state = 2511
                self.drop_materialized_zonemap()
                pass

            elif la_ == 103:
                self.enterOuterAlt(localctx, 103)
                self.state = 2512
                self.drop_operator()
                pass

            elif la_ == 104:
                self.enterOuterAlt(localctx, 104)
                self.state = 2513
                self.drop_outline()
                pass

            elif la_ == 105:
                self.enterOuterAlt(localctx, 105)
                self.state = 2514
                self.drop_package()
                pass

            elif la_ == 106:
                self.enterOuterAlt(localctx, 106)
                self.state = 2515
                self.drop_pmem_filestore()
                pass

            elif la_ == 107:
                self.enterOuterAlt(localctx, 107)
                self.state = 2516
                self.drop_procedure()
                pass

            elif la_ == 108:
                self.enterOuterAlt(localctx, 108)
                self.state = 2517
                self.drop_restore_point()
                pass

            elif la_ == 109:
                self.enterOuterAlt(localctx, 109)
                self.state = 2518
                self.drop_role()
                pass

            elif la_ == 110:
                self.enterOuterAlt(localctx, 110)
                self.state = 2519
                self.drop_rollback_segment()
                pass

            elif la_ == 111:
                self.enterOuterAlt(localctx, 111)
                self.state = 2520
                self.drop_sequence()
                pass

            elif la_ == 112:
                self.enterOuterAlt(localctx, 112)
                self.state = 2521
                self.drop_synonym()
                pass

            elif la_ == 113:
                self.enterOuterAlt(localctx, 113)
                self.state = 2522
                self.drop_table()
                pass

            elif la_ == 114:
                self.enterOuterAlt(localctx, 114)
                self.state = 2523
                self.drop_tablespace()
                pass

            elif la_ == 115:
                self.enterOuterAlt(localctx, 115)
                self.state = 2524
                self.drop_tablespace_set()
                pass

            elif la_ == 116:
                self.enterOuterAlt(localctx, 116)
                self.state = 2525
                self.drop_trigger()
                pass

            elif la_ == 117:
                self.enterOuterAlt(localctx, 117)
                self.state = 2526
                self.drop_type()
                pass

            elif la_ == 118:
                self.enterOuterAlt(localctx, 118)
                self.state = 2527
                self.drop_user()
                pass

            elif la_ == 119:
                self.enterOuterAlt(localctx, 119)
                self.state = 2528
                self.drop_view()
                pass

            elif la_ == 120:
                self.enterOuterAlt(localctx, 120)
                self.state = 2529
                self.administer_key_management()
                pass

            elif la_ == 121:
                self.enterOuterAlt(localctx, 121)
                self.state = 2530
                self.analyze()
                pass

            elif la_ == 122:
                self.enterOuterAlt(localctx, 122)
                self.state = 2531
                self.anonymous_block()
                pass

            elif la_ == 123:
                self.enterOuterAlt(localctx, 123)
                self.state = 2532
                self.associate_statistics()
                pass

            elif la_ == 124:
                self.enterOuterAlt(localctx, 124)
                self.state = 2533
                self.audit_traditional()
                pass

            elif la_ == 125:
                self.enterOuterAlt(localctx, 125)
                self.state = 2534
                self.comment_on_column()
                pass

            elif la_ == 126:
                self.enterOuterAlt(localctx, 126)
                self.state = 2535
                self.comment_on_materialized()
                pass

            elif la_ == 127:
                self.enterOuterAlt(localctx, 127)
                self.state = 2536
                self.comment_on_table()
                pass

            elif la_ == 128:
                self.enterOuterAlt(localctx, 128)
                self.state = 2537
                self.data_manipulation_language_statements()
                pass

            elif la_ == 129:
                self.enterOuterAlt(localctx, 129)
                self.state = 2538
                self.disassociate_statistics()
                pass

            elif la_ == 130:
                self.enterOuterAlt(localctx, 130)
                self.state = 2539
                self.flashback_table()
                pass

            elif la_ == 131:
                self.enterOuterAlt(localctx, 131)
                self.state = 2540
                self.grant_statement()
                pass

            elif la_ == 132:
                self.enterOuterAlt(localctx, 132)
                self.state = 2541
                self.noaudit_statement()
                pass

            elif la_ == 133:
                self.enterOuterAlt(localctx, 133)
                self.state = 2542
                self.purge_statement()
                pass

            elif la_ == 134:
                self.enterOuterAlt(localctx, 134)
                self.state = 2543
                self.rename_object()
                pass

            elif la_ == 135:
                self.enterOuterAlt(localctx, 135)
                self.state = 2544
                self.revoke_statement()
                pass

            elif la_ == 136:
                self.enterOuterAlt(localctx, 136)
                self.state = 2545
                self.transaction_control_statements()
                pass

            elif la_ == 137:
                self.enterOuterAlt(localctx, 137)
                self.state = 2546
                self.truncate_cluster()
                pass

            elif la_ == 138:
                self.enterOuterAlt(localctx, 138)
                self.state = 2547
                self.truncate_table()
                pass

            elif la_ == 139:
                self.enterOuterAlt(localctx, 139)
                self.state = 2548
                self.unified_auditing()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_diskgroupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def DISKGROUP(self):
            return self.getToken(PlSqlParser.DISKGROUP, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def undrop_disk_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Undrop_disk_clauseContext,0)


        def diskgroup_availability(self):
            return self.getTypedRuleContext(PlSqlParser.Diskgroup_availabilityContext,0)


        def enable_disable_volume(self):
            return self.getTypedRuleContext(PlSqlParser.Enable_disable_volumeContext,0)


        def resize_disk_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Resize_disk_clauseContext,0)


        def replace_disk_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Replace_disk_clauseContext,0)


        def rename_disk_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Rename_disk_clauseContext,0)


        def disk_online_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Disk_online_clauseContext,0)


        def disk_offline_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Disk_offline_clauseContext,0)


        def rebalance_diskgroup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Rebalance_diskgroup_clauseContext,0)


        def check_diskgroup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Check_diskgroup_clauseContext,0)


        def diskgroup_template_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Diskgroup_template_clausesContext,0)


        def diskgroup_directory_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Diskgroup_directory_clausesContext,0)


        def diskgroup_alias_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Diskgroup_alias_clausesContext,0)


        def diskgroup_volume_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Diskgroup_volume_clausesContext,0)


        def diskgroup_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Diskgroup_attributesContext,0)


        def drop_diskgroup_file_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_diskgroup_file_clauseContext,0)


        def convert_redundancy_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Convert_redundancy_clauseContext,0)


        def usergroup_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Usergroup_clausesContext,0)


        def user_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.User_clausesContext,0)


        def file_permissions_clause(self):
            return self.getTypedRuleContext(PlSqlParser.File_permissions_clauseContext,0)


        def file_owner_clause(self):
            return self.getTypedRuleContext(PlSqlParser.File_owner_clauseContext,0)


        def scrub_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Scrub_clauseContext,0)


        def quotagroup_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Quotagroup_clausesContext,0)


        def filegroup_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Filegroup_clausesContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def add_disk_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Add_disk_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Add_disk_clauseContext,i)


        def drop_disk_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Drop_disk_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Drop_disk_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_diskgroup

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_diskgroup" ):
                listener.enterAlter_diskgroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_diskgroup" ):
                listener.exitAlter_diskgroup(self)




    def alter_diskgroup(self):

        localctx = PlSqlParser.Alter_diskgroupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 4, self.RULE_alter_diskgroup)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2551
            self.match(PlSqlParser.ALTER)
            self.state = 2552
            self.match(PlSqlParser.DISKGROUP)
            self.state = 2606
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,17,self._ctx)
            if la_ == 1:
                self.state = 2553
                self.id_expression()
                self.state = 2588
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,13,self._ctx)
                if la_ == 1:
                    self.state = 2561
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [21, 438]:
                        self.state = 2556 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while True:
                            self.state = 2556
                            self._errHandler.sync(self)
                            token = self._input.LA(1)
                            if token in [21]:
                                self.state = 2554
                                self.add_disk_clause()
                                pass
                            elif token in [438]:
                                self.state = 2555
                                self.drop_disk_clause()
                                pass
                            else:
                                raise NoViableAltException(self)

                            self.state = 2558 
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if not (_la==21 or _la==438):
                                break

                        pass
                    elif token in [1489]:
                        self.state = 2560
                        self.resize_disk_clause()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 2564
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1433:
                        self.state = 2563
                        self.rebalance_diskgroup_clause()


                    pass

                elif la_ == 2:
                    self.state = 2586
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,12,self._ctx)
                    if la_ == 1:
                        self.state = 2566
                        self.replace_disk_clause()
                        pass

                    elif la_ == 2:
                        self.state = 2567
                        self.rename_disk_clause()
                        pass

                    elif la_ == 3:
                        self.state = 2568
                        self.disk_online_clause()
                        pass

                    elif la_ == 4:
                        self.state = 2569
                        self.disk_offline_clause()
                        pass

                    elif la_ == 5:
                        self.state = 2570
                        self.rebalance_diskgroup_clause()
                        pass

                    elif la_ == 6:
                        self.state = 2571
                        self.check_diskgroup_clause()
                        pass

                    elif la_ == 7:
                        self.state = 2572
                        self.diskgroup_template_clauses()
                        pass

                    elif la_ == 8:
                        self.state = 2573
                        self.diskgroup_directory_clauses()
                        pass

                    elif la_ == 9:
                        self.state = 2574
                        self.diskgroup_alias_clauses()
                        pass

                    elif la_ == 10:
                        self.state = 2575
                        self.diskgroup_volume_clauses()
                        pass

                    elif la_ == 11:
                        self.state = 2576
                        self.diskgroup_attributes()
                        pass

                    elif la_ == 12:
                        self.state = 2577
                        self.drop_diskgroup_file_clause()
                        pass

                    elif la_ == 13:
                        self.state = 2578
                        self.convert_redundancy_clause()
                        pass

                    elif la_ == 14:
                        self.state = 2579
                        self.usergroup_clauses()
                        pass

                    elif la_ == 15:
                        self.state = 2580
                        self.user_clauses()
                        pass

                    elif la_ == 16:
                        self.state = 2581
                        self.file_permissions_clause()
                        pass

                    elif la_ == 17:
                        self.state = 2582
                        self.file_owner_clause()
                        pass

                    elif la_ == 18:
                        self.state = 2583
                        self.scrub_clause()
                        pass

                    elif la_ == 19:
                        self.state = 2584
                        self.quotagroup_clauses()
                        pass

                    elif la_ == 20:
                        self.state = 2585
                        self.filegroup_clauses()
                        pass


                    pass


                pass

            elif la_ == 2:
                self.state = 2599
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                    self.state = 2590
                    self.id_expression()
                    self.state = 2595
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 2591
                        self.match(PlSqlParser.COMMA)
                        self.state = 2592
                        self.id_expression()
                        self.state = 2597
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass
                elif token in [38]:
                    self.state = 2598
                    self.match(PlSqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 2604
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2088]:
                    self.state = 2601
                    self.undrop_disk_clause()
                    pass
                elif token in [416, 934]:
                    self.state = 2602
                    self.diskgroup_availability()
                    pass
                elif token in [404, 467]:
                    self.state = 2603
                    self.enable_disable_volume()
                    pass
                else:
                    raise NoViableAltException(self)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.sn = None # Id_expressionContext
            self.fgn = None # Id_expressionContext

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def DISK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISK)
            else:
                return self.getToken(PlSqlParser.DISK, i)

        def qualified_disk_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Qualified_disk_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Qualified_disk_clauseContext,i)


        def SITE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SITE)
            else:
                return self.getToken(PlSqlParser.SITE, i)

        def quorum_regular(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quorum_regularContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quorum_regularContext,i)


        def FAILGROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FAILGROUP)
            else:
                return self.getToken(PlSqlParser.FAILGROUP, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_disk_clause" ):
                listener.enterAdd_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_disk_clause" ):
                listener.exitAdd_disk_clause(self)




    def add_disk_clause(self):

        localctx = PlSqlParser.Add_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 6, self.RULE_add_disk_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2608
            self.match(PlSqlParser.ADD)
            self.state = 2629 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 2611
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1606:
                    self.state = 2609
                    self.match(PlSqlParser.SITE)
                    self.state = 2610
                    localctx.sn = self.id_expression()


                self.state = 2614
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1414 or _la==1470:
                    self.state = 2613
                    self.quorum_regular()


                self.state = 2618
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==535:
                    self.state = 2616
                    self.match(PlSqlParser.FAILGROUP)
                    self.state = 2617
                    localctx.fgn = self.id_expression()


                self.state = 2620
                self.match(PlSqlParser.DISK)
                self.state = 2621
                self.qualified_disk_clause()
                self.state = 2626
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2622
                    self.match(PlSqlParser.COMMA)
                    self.state = 2623
                    self.qualified_disk_clause()
                    self.state = 2628
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 2631 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==412 or _la==535 or _la==1414 or _la==1470 or _la==1606):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def DISK(self):
            return self.getToken(PlSqlParser.DISK, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def DISKS(self):
            return self.getToken(PlSqlParser.DISKS, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def FAILGROUP(self):
            return self.getToken(PlSqlParser.FAILGROUP, 0)

        def quorum_regular(self):
            return self.getTypedRuleContext(PlSqlParser.Quorum_regularContext,0)


        def force_noforce(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Force_noforceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Force_noforceContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_disk_clause" ):
                listener.enterDrop_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_disk_clause" ):
                listener.exitDrop_disk_clause(self)




    def drop_disk_clause(self):

        localctx = PlSqlParser.Drop_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 8, self.RULE_drop_disk_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2633
            self.match(PlSqlParser.DROP)
            self.state = 2672
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [412, 1414, 1470]:
                self.state = 2635
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1414 or _la==1470:
                    self.state = 2634
                    self.quorum_regular()


                self.state = 2637
                self.match(PlSqlParser.DISK)
                self.state = 2638
                self.id_expression()
                self.state = 2640
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576 or _la==1044:
                    self.state = 2639
                    self.force_noforce()


                self.state = 2649
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2642
                    self.match(PlSqlParser.COMMA)
                    self.state = 2643
                    self.id_expression()
                    self.state = 2645
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==576 or _la==1044:
                        self.state = 2644
                        self.force_noforce()


                    self.state = 2651
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [415]:
                self.state = 2652
                self.match(PlSqlParser.DISKS)
                self.state = 2653
                self.match(PlSqlParser.IN)
                self.state = 2655
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1414 or _la==1470:
                    self.state = 2654
                    self.quorum_regular()


                self.state = 2657
                self.match(PlSqlParser.FAILGROUP)
                self.state = 2658
                self.id_expression()
                self.state = 2660
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576 or _la==1044:
                    self.state = 2659
                    self.force_noforce()


                self.state = 2669
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2662
                    self.match(PlSqlParser.COMMA)
                    self.state = 2663
                    self.id_expression()
                    self.state = 2665
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==576 or _la==1044:
                        self.state = 2664
                        self.force_noforce()


                    self.state = 2671
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Resize_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_resize_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResize_disk_clause" ):
                listener.enterResize_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResize_disk_clause" ):
                listener.exitResize_disk_clause(self)




    def resize_disk_clause(self):

        localctx = PlSqlParser.Resize_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 10, self.RULE_resize_disk_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2674
            self.match(PlSqlParser.RESIZE)
            self.state = 2675
            self.match(PlSqlParser.ALL)
            self.state = 2678
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1617:
                self.state = 2676
                self.match(PlSqlParser.SIZE)
                self.state = 2677
                self.size_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Replace_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def DISK(self):
            return self.getToken(PlSqlParser.DISK, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def force_noforce(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Force_noforceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Force_noforceContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def POWER(self):
            return self.getToken(PlSqlParser.POWER, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def wait_nowait(self):
            return self.getTypedRuleContext(PlSqlParser.Wait_nowaitContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_replace_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReplace_disk_clause" ):
                listener.enterReplace_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReplace_disk_clause" ):
                listener.exitReplace_disk_clause(self)




    def replace_disk_clause(self):

        localctx = PlSqlParser.Replace_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 12, self.RULE_replace_disk_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2680
            self.match(PlSqlParser.REPLACE)
            self.state = 2681
            self.match(PlSqlParser.DISK)
            self.state = 2682
            self.id_expression()
            self.state = 2683
            self.match(PlSqlParser.WITH)
            self.state = 2684
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 2686
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1044:
                self.state = 2685
                self.force_noforce()


            self.state = 2697
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 2688
                self.match(PlSqlParser.COMMA)
                self.state = 2689
                self.id_expression()
                self.state = 2690
                self.match(PlSqlParser.WITH)
                self.state = 2691
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 2693
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576 or _la==1044:
                    self.state = 2692
                    self.force_noforce()


                self.state = 2699
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 2702
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1350:
                self.state = 2700
                self.match(PlSqlParser.POWER)
                self.state = 2701
                self.numeric()


            self.state = 2705
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1153 or _la==2197:
                self.state = 2704
                self.wait_nowait()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Wait_nowaitContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def NOWAIT(self):
            return self.getToken(PlSqlParser.NOWAIT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_wait_nowait

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWait_nowait" ):
                listener.enterWait_nowait(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWait_nowait" ):
                listener.exitWait_nowait(self)




    def wait_nowait(self):

        localctx = PlSqlParser.Wait_nowaitContext(self, self._ctx, self.state)
        self.enterRule(localctx, 14, self.RULE_wait_nowait)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2707
            _la = self._input.LA(1)
            if not(_la==1153 or _la==2197):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rename_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def DISK(self):
            return self.getToken(PlSqlParser.DISK, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def TO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TO)
            else:
                return self.getToken(PlSqlParser.TO, i)

        def DISKS(self):
            return self.getToken(PlSqlParser.DISKS, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_rename_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRename_disk_clause" ):
                listener.enterRename_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRename_disk_clause" ):
                listener.exitRename_disk_clause(self)




    def rename_disk_clause(self):

        localctx = PlSqlParser.Rename_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 16, self.RULE_rename_disk_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2709
            self.match(PlSqlParser.RENAME)
            self.state = 2726
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [412]:
                self.state = 2710
                self.match(PlSqlParser.DISK)
                self.state = 2711
                self.id_expression()
                self.state = 2712
                self.match(PlSqlParser.TO)
                self.state = 2713
                self.id_expression()
                self.state = 2721
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2714
                    self.match(PlSqlParser.COMMA)
                    self.state = 2715
                    self.id_expression()
                    self.state = 2716
                    self.match(PlSqlParser.TO)
                    self.state = 2717
                    self.id_expression()
                    self.state = 2723
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [415]:
                self.state = 2724
                self.match(PlSqlParser.DISKS)
                self.state = 2725
                self.match(PlSqlParser.ALL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Disk_online_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def POWER(self):
            return self.getToken(PlSqlParser.POWER, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def wait_nowait(self):
            return self.getTypedRuleContext(PlSqlParser.Wait_nowaitContext,0)


        def DISK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISK)
            else:
                return self.getToken(PlSqlParser.DISK, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def DISKS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISKS)
            else:
                return self.getToken(PlSqlParser.DISKS, i)

        def IN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IN)
            else:
                return self.getToken(PlSqlParser.IN, i)

        def FAILGROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FAILGROUP)
            else:
                return self.getToken(PlSqlParser.FAILGROUP, i)

        def quorum_regular(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quorum_regularContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quorum_regularContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_disk_online_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDisk_online_clause" ):
                listener.enterDisk_online_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDisk_online_clause" ):
                listener.exitDisk_online_clause(self)




    def disk_online_clause(self):

        localctx = PlSqlParser.Disk_online_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 18, self.RULE_disk_online_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2728
            self.match(PlSqlParser.ONLINE)
            self.state = 2760
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [412, 415, 1414, 1470]:
                self.state = 2755 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 2755
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [412, 1414, 1470]:
                        self.state = 2730
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1414 or _la==1470:
                            self.state = 2729
                            self.quorum_regular()


                        self.state = 2732
                        self.match(PlSqlParser.DISK)
                        self.state = 2733
                        self.id_expression()
                        self.state = 2738
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 2734
                            self.match(PlSqlParser.COMMA)
                            self.state = 2735
                            self.id_expression()
                            self.state = 2740
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass
                    elif token in [415]:
                        self.state = 2741
                        self.match(PlSqlParser.DISKS)
                        self.state = 2742
                        self.match(PlSqlParser.IN)
                        self.state = 2744
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1414 or _la==1470:
                            self.state = 2743
                            self.quorum_regular()


                        self.state = 2746
                        self.match(PlSqlParser.FAILGROUP)
                        self.state = 2747
                        self.id_expression()
                        self.state = 2752
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 2748
                            self.match(PlSqlParser.COMMA)
                            self.state = 2749
                            self.id_expression()
                            self.state = 2754
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 2757 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==412 or _la==415 or _la==1414 or _la==1470):
                        break

                pass
            elif token in [38]:
                self.state = 2759
                self.match(PlSqlParser.ALL)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 2764
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1350:
                self.state = 2762
                self.match(PlSqlParser.POWER)
                self.state = 2763
                self.numeric()


            self.state = 2767
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1153 or _la==2197:
                self.state = 2766
                self.wait_nowait()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Disk_offline_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def DISK(self):
            return self.getToken(PlSqlParser.DISK, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def DISKS(self):
            return self.getToken(PlSqlParser.DISKS, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def FAILGROUP(self):
            return self.getToken(PlSqlParser.FAILGROUP, 0)

        def timeout_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Timeout_clauseContext,0)


        def quorum_regular(self):
            return self.getTypedRuleContext(PlSqlParser.Quorum_regularContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_disk_offline_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDisk_offline_clause" ):
                listener.enterDisk_offline_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDisk_offline_clause" ):
                listener.exitDisk_offline_clause(self)




    def disk_offline_clause(self):

        localctx = PlSqlParser.Disk_offline_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 20, self.RULE_disk_offline_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2769
            self.match(PlSqlParser.OFFLINE)
            self.state = 2796
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [412, 1414, 1470]:
                self.state = 2771
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1414 or _la==1470:
                    self.state = 2770
                    self.quorum_regular()


                self.state = 2773
                self.match(PlSqlParser.DISK)
                self.state = 2774
                self.id_expression()
                self.state = 2779
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2775
                    self.match(PlSqlParser.COMMA)
                    self.state = 2776
                    self.id_expression()
                    self.state = 2781
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [415]:
                self.state = 2782
                self.match(PlSqlParser.DISKS)
                self.state = 2783
                self.match(PlSqlParser.IN)
                self.state = 2785
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1414 or _la==1470:
                    self.state = 2784
                    self.quorum_regular()


                self.state = 2787
                self.match(PlSqlParser.FAILGROUP)
                self.state = 2788
                self.id_expression()
                self.state = 2793
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2789
                    self.match(PlSqlParser.COMMA)
                    self.state = 2790
                    self.id_expression()
                    self.state = 2795
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

            self.state = 2799
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==438:
                self.state = 2798
                self.timeout_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Timeout_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def M_LETTER(self):
            return self.getToken(PlSqlParser.M_LETTER, 0)

        def H_LETTER(self):
            return self.getToken(PlSqlParser.H_LETTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_timeout_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTimeout_clause" ):
                listener.enterTimeout_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTimeout_clause" ):
                listener.exitTimeout_clause(self)




    def timeout_clause(self):

        localctx = PlSqlParser.Timeout_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 22, self.RULE_timeout_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2801
            self.match(PlSqlParser.DROP)
            self.state = 2802
            self.match(PlSqlParser.AFTER)
            self.state = 2803
            self.numeric()
            self.state = 2804
            _la = self._input.LA(1)
            if not(_la==643 or _la==848):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rebalance_diskgroup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REBALANCE(self):
            return self.getToken(PlSqlParser.REBALANCE, 0)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def POWER(self):
            return self.getToken(PlSqlParser.POWER, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def NOWAIT(self):
            return self.getToken(PlSqlParser.NOWAIT, 0)

        def phase(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.PhaseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.PhaseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_rebalance_diskgroup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRebalance_diskgroup_clause" ):
                listener.enterRebalance_diskgroup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRebalance_diskgroup_clause" ):
                listener.exitRebalance_diskgroup_clause(self)




    def rebalance_diskgroup_clause(self):

        localctx = PlSqlParser.Rebalance_diskgroup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 24, self.RULE_rebalance_diskgroup_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2806
            self.match(PlSqlParser.REBALANCE)
            self.state = 2826
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1350, 2210, 2212]:
                self.state = 2813
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2210 or _la==2212:
                    self.state = 2807
                    _la = self._input.LA(1)
                    if not(_la==2210 or _la==2212):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 2809 
                    self._errHandler.sync(self)
                    _alt = 1
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt == 1:
                            self.state = 2808
                            self.phase()

                        else:
                            raise NoViableAltException(self)
                        self.state = 2811 
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,55,self._ctx)



                self.state = 2815
                self.match(PlSqlParser.POWER)
                self.state = 2816
                self.numeric()
                self.state = 2819
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1153 or _la==2197:
                    self.state = 2818
                    _la = self._input.LA(1)
                    if not(_la==1153 or _la==2197):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            elif token in [926]:
                self.state = 2821
                self.match(PlSqlParser.MODIFY)
                self.state = 2822
                self.match(PlSqlParser.POWER)
                self.state = 2824
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2341 or _la==2342:
                    self.state = 2823
                    self.numeric()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PhaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_phase

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPhase" ):
                listener.enterPhase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPhase" ):
                listener.exitPhase(self)




    def phase(self):

        localctx = PlSqlParser.PhaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 26, self.RULE_phase)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2828
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Check_diskgroup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHECK(self):
            return self.getToken(PlSqlParser.CHECK, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def REPAIR(self):
            return self.getToken(PlSqlParser.REPAIR, 0)

        def NOREPAIR(self):
            return self.getToken(PlSqlParser.NOREPAIR, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_check_diskgroup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCheck_diskgroup_clause" ):
                listener.enterCheck_diskgroup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCheck_diskgroup_clause" ):
                listener.exitCheck_diskgroup_clause(self)




    def check_diskgroup_clause(self):

        localctx = PlSqlParser.Check_diskgroup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 28, self.RULE_check_diskgroup_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2830
            self.match(PlSqlParser.CHECK)
            self.state = 2832
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==38:
                self.state = 2831
                self.match(PlSqlParser.ALL)


            self.state = 2835
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1108 or _la==1482:
                self.state = 2834
                _la = self._input.LA(1)
                if not(_la==1108 or _la==1482):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Diskgroup_template_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TEMPLATE(self):
            return self.getToken(PlSqlParser.TEMPLATE, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def qualified_template_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Qualified_template_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Qualified_template_clauseContext,i)


        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_diskgroup_template_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiskgroup_template_clauses" ):
                listener.enterDiskgroup_template_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiskgroup_template_clauses" ):
                listener.exitDiskgroup_template_clauses(self)




    def diskgroup_template_clauses(self):

        localctx = PlSqlParser.Diskgroup_template_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 30, self.RULE_diskgroup_template_clauses)
        self._la = 0 # Token type
        try:
            self.state = 2860
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21, 926]:
                self.enterOuterAlt(localctx, 1)
                self.state = 2837
                _la = self._input.LA(1)
                if not(_la==21 or _la==926):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 2838
                self.match(PlSqlParser.TEMPLATE)
                self.state = 2839
                self.id_expression()
                self.state = 2840
                self.qualified_template_clause()
                self.state = 2847
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2841
                    self.match(PlSqlParser.COMMA)
                    self.state = 2842
                    self.id_expression()
                    self.state = 2843
                    self.qualified_template_clause()
                    self.state = 2849
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 2850
                self.match(PlSqlParser.DROP)
                self.state = 2851
                self.match(PlSqlParser.TEMPLATE)
                self.state = 2852
                self.id_expression()
                self.state = 2857
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2853
                    self.match(PlSqlParser.COMMA)
                    self.state = 2854
                    self.id_expression()
                    self.state = 2859
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Qualified_template_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def redundancy_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Redundancy_clauseContext,0)


        def striping_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Striping_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_qualified_template_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQualified_template_clause" ):
                listener.enterQualified_template_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQualified_template_clause" ):
                listener.exitQualified_template_clause(self)




    def qualified_template_clause(self):

        localctx = PlSqlParser.Qualified_template_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 32, self.RULE_qualified_template_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2862
            self.match(PlSqlParser.ATTRIBUTES)
            self.state = 2863
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 2865
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==434 or _la==634 or _la==909 or _la==1268 or _la==2104:
                self.state = 2864
                self.redundancy_clause()


            self.state = 2868
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==220 or _la==557:
                self.state = 2867
                self.striping_clause()


            self.state = 2870
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Redundancy_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MIRROR(self):
            return self.getToken(PlSqlParser.MIRROR, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def UNPROTECTED(self):
            return self.getToken(PlSqlParser.UNPROTECTED, 0)

        def PARITY(self):
            return self.getToken(PlSqlParser.PARITY, 0)

        def DOUBLE(self):
            return self.getToken(PlSqlParser.DOUBLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_redundancy_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRedundancy_clause" ):
                listener.enterRedundancy_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRedundancy_clause" ):
                listener.exitRedundancy_clause(self)




    def redundancy_clause(self):

        localctx = PlSqlParser.Redundancy_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 34, self.RULE_redundancy_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2872
            _la = self._input.LA(1)
            if not(_la==434 or _la==634 or _la==909 or _la==1268 or _la==2104):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Striping_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FINE(self):
            return self.getToken(PlSqlParser.FINE, 0)

        def COARSE(self):
            return self.getToken(PlSqlParser.COARSE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_striping_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStriping_clause" ):
                listener.enterStriping_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStriping_clause" ):
                listener.exitStriping_clause(self)




    def striping_clause(self):

        localctx = PlSqlParser.Striping_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 36, self.RULE_striping_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2874
            _la = self._input.LA(1)
            if not(_la==220 or _la==557):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Force_noforceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def NOFORCE(self):
            return self.getToken(PlSqlParser.NOFORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_force_noforce

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterForce_noforce" ):
                listener.enterForce_noforce(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitForce_noforce" ):
                listener.exitForce_noforce(self)




    def force_noforce(self):

        localctx = PlSqlParser.Force_noforceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 38, self.RULE_force_noforce)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2876
            _la = self._input.LA(1)
            if not(_la==576 or _la==1044):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Diskgroup_directory_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def force_noforce(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Force_noforceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Force_noforceContext,i)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def dir_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Dir_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Dir_nameContext,i)


        def TO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TO)
            else:
                return self.getToken(PlSqlParser.TO, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_diskgroup_directory_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiskgroup_directory_clauses" ):
                listener.enterDiskgroup_directory_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiskgroup_directory_clauses" ):
                listener.exitDiskgroup_directory_clauses(self)




    def diskgroup_directory_clauses(self):

        localctx = PlSqlParser.Diskgroup_directory_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 40, self.RULE_diskgroup_directory_clauses)
        self._la = 0 # Token type
        try:
            self.state = 2919
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 2878
                self.match(PlSqlParser.ADD)
                self.state = 2879
                self.match(PlSqlParser.DIRECTORY)
                self.state = 2880
                self.filename()
                self.state = 2885
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2881
                    self.match(PlSqlParser.COMMA)
                    self.state = 2882
                    self.filename()
                    self.state = 2887
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 2888
                self.match(PlSqlParser.DROP)
                self.state = 2889
                self.match(PlSqlParser.DIRECTORY)
                self.state = 2890
                self.filename()
                self.state = 2892
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576 or _la==1044:
                    self.state = 2891
                    self.force_noforce()


                self.state = 2901
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2894
                    self.match(PlSqlParser.COMMA)
                    self.state = 2895
                    self.filename()
                    self.state = 2897
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==576 or _la==1044:
                        self.state = 2896
                        self.force_noforce()


                    self.state = 2903
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1481]:
                self.enterOuterAlt(localctx, 3)
                self.state = 2904
                self.match(PlSqlParser.RENAME)
                self.state = 2905
                self.match(PlSqlParser.DIRECTORY)
                self.state = 2906
                self.dir_name()
                self.state = 2907
                self.match(PlSqlParser.TO)
                self.state = 2908
                self.dir_name()
                self.state = 2916
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2909
                    self.match(PlSqlParser.COMMA)
                    self.state = 2910
                    self.dir_name()
                    self.state = 2911
                    self.match(PlSqlParser.TO)
                    self.state = 2912
                    self.dir_name()
                    self.state = 2918
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dir_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dir_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDir_name" ):
                listener.enterDir_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDir_name" ):
                listener.exitDir_name(self)




    def dir_name(self):

        localctx = PlSqlParser.Dir_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 42, self.RULE_dir_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2921
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Diskgroup_alias_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def ALIAS(self):
            return self.getToken(PlSqlParser.ALIAS, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def FOR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FOR)
            else:
                return self.getToken(PlSqlParser.FOR, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TO)
            else:
                return self.getToken(PlSqlParser.TO, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_diskgroup_alias_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiskgroup_alias_clauses" ):
                listener.enterDiskgroup_alias_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiskgroup_alias_clauses" ):
                listener.exitDiskgroup_alias_clauses(self)




    def diskgroup_alias_clauses(self):

        localctx = PlSqlParser.Diskgroup_alias_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 44, self.RULE_diskgroup_alias_clauses)
        self._la = 0 # Token type
        try:
            self.state = 2961
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 2923
                self.match(PlSqlParser.ADD)
                self.state = 2924
                self.match(PlSqlParser.ALIAS)
                self.state = 2925
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 2926
                self.match(PlSqlParser.FOR)
                self.state = 2927
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 2934
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2928
                    self.match(PlSqlParser.COMMA)
                    self.state = 2929
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 2930
                    self.match(PlSqlParser.FOR)
                    self.state = 2931
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 2936
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 2937
                self.match(PlSqlParser.DROP)
                self.state = 2938
                self.match(PlSqlParser.ALIAS)
                self.state = 2939
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 2944
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2940
                    self.match(PlSqlParser.COMMA)
                    self.state = 2941
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 2946
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1481]:
                self.enterOuterAlt(localctx, 3)
                self.state = 2947
                self.match(PlSqlParser.RENAME)
                self.state = 2948
                self.match(PlSqlParser.ALIAS)
                self.state = 2949
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 2950
                self.match(PlSqlParser.TO)
                self.state = 2951
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 2958
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 2952
                    self.match(PlSqlParser.COMMA)
                    self.state = 2953
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 2954
                    self.match(PlSqlParser.TO)
                    self.state = 2955
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 2960
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Diskgroup_volume_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_volume_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Add_volume_clauseContext,0)


        def modify_volume_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_volume_clauseContext,0)


        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def VOLUME(self):
            return self.getToken(PlSqlParser.VOLUME, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_diskgroup_volume_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiskgroup_volume_clauses" ):
                listener.enterDiskgroup_volume_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiskgroup_volume_clauses" ):
                listener.exitDiskgroup_volume_clauses(self)




    def diskgroup_volume_clauses(self):

        localctx = PlSqlParser.Diskgroup_volume_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 46, self.RULE_diskgroup_volume_clauses)
        try:
            self.state = 2974
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 2963
                self.add_volume_clause()
                pass
            elif token in [926]:
                self.enterOuterAlt(localctx, 2)
                self.state = 2964
                self.modify_volume_clause()
                pass
            elif token in [1489]:
                self.enterOuterAlt(localctx, 3)
                self.state = 2965
                self.match(PlSqlParser.RESIZE)
                self.state = 2966
                self.match(PlSqlParser.VOLUME)
                self.state = 2967
                self.id_expression()
                self.state = 2968
                self.match(PlSqlParser.SIZE)
                self.state = 2969
                self.size_clause()
                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 4)
                self.state = 2971
                self.match(PlSqlParser.DROP)
                self.state = 2972
                self.match(PlSqlParser.VOLUME)
                self.state = 2973
                self.id_expression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_volume_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def VOLUME(self):
            return self.getToken(PlSqlParser.VOLUME, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def redundancy_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Redundancy_clauseContext,0)


        def STRIPE_WIDTH(self):
            return self.getToken(PlSqlParser.STRIPE_WIDTH, 0)

        def numeric(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.NumericContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.NumericContext,i)


        def STRIPE_COLUMNS(self):
            return self.getToken(PlSqlParser.STRIPE_COLUMNS, 0)

        def K_LETTER(self):
            return self.getToken(PlSqlParser.K_LETTER, 0)

        def M_LETTER(self):
            return self.getToken(PlSqlParser.M_LETTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_volume_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_volume_clause" ):
                listener.enterAdd_volume_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_volume_clause" ):
                listener.exitAdd_volume_clause(self)




    def add_volume_clause(self):

        localctx = PlSqlParser.Add_volume_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 48, self.RULE_add_volume_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2976
            self.match(PlSqlParser.ADD)
            self.state = 2977
            self.match(PlSqlParser.VOLUME)
            self.state = 2978
            self.id_expression()
            self.state = 2979
            self.match(PlSqlParser.SIZE)
            self.state = 2980
            self.size_clause()
            self.state = 2982
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==434 or _la==634 or _la==909 or _la==1268 or _la==2104:
                self.state = 2981
                self.redundancy_clause()


            self.state = 2988
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1685:
                self.state = 2984
                self.match(PlSqlParser.STRIPE_WIDTH)
                self.state = 2985
                self.numeric()
                self.state = 2986
                _la = self._input.LA(1)
                if not(_la==766 or _la==848):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 2992
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1684:
                self.state = 2990
                self.match(PlSqlParser.STRIPE_COLUMNS)
                self.state = 2991
                self.numeric()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_volume_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def VOLUME(self):
            return self.getToken(PlSqlParser.VOLUME, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def MOUNTPATH(self):
            return self.getToken(PlSqlParser.MOUNTPATH, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def USAGE(self):
            return self.getToken(PlSqlParser.USAGE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_volume_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_volume_clause" ):
                listener.enterModify_volume_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_volume_clause" ):
                listener.exitModify_volume_clause(self)




    def modify_volume_clause(self):

        localctx = PlSqlParser.Modify_volume_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 50, self.RULE_modify_volume_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 2994
            self.match(PlSqlParser.MODIFY)
            self.state = 2995
            self.match(PlSqlParser.VOLUME)
            self.state = 2996
            self.id_expression()
            self.state = 2999
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==935:
                self.state = 2997
                self.match(PlSqlParser.MOUNTPATH)
                self.state = 2998
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 3003
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2123:
                self.state = 3001
                self.match(PlSqlParser.USAGE)
                self.state = 3002
                self.match(PlSqlParser.CHAR_STRING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Diskgroup_attributesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_diskgroup_attributes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiskgroup_attributes" ):
                listener.enterDiskgroup_attributes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiskgroup_attributes" ):
                listener.exitDiskgroup_attributes(self)




    def diskgroup_attributes(self):

        localctx = PlSqlParser.Diskgroup_attributesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 52, self.RULE_diskgroup_attributes)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3005
            self.match(PlSqlParser.SET)
            self.state = 3006
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 3007
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3008
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 3009
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_diskgroup_fileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def ATTRIBUTE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ATTRIBUTE)
            else:
                return self.getToken(PlSqlParser.ATTRIBUTE, i)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def disk_region_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Disk_region_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Disk_region_clauseContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_diskgroup_file

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_diskgroup_file" ):
                listener.enterModify_diskgroup_file(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_diskgroup_file" ):
                listener.exitModify_diskgroup_file(self)




    def modify_diskgroup_file(self):

        localctx = PlSqlParser.Modify_diskgroup_fileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 54, self.RULE_modify_diskgroup_file)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3011
            self.match(PlSqlParser.MODIFY)
            self.state = 3012
            self.match(PlSqlParser.FILE)
            self.state = 3013
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3014
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 3015
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 3016
            self.disk_region_clause()
            self.state = 3017
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 3027
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3018
                self.match(PlSqlParser.COMMA)
                self.state = 3019
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3020
                self.match(PlSqlParser.ATTRIBUTE)
                self.state = 3021
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3022
                self.disk_region_clause()
                self.state = 3023
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 3029
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Disk_region_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return PlSqlParser.RULE_disk_region_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDisk_region_clause" ):
                listener.enterDisk_region_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDisk_region_clause" ):
                listener.exitDisk_region_clause(self)




    def disk_region_clause(self):

        localctx = PlSqlParser.Disk_region_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 56, self.RULE_disk_region_clause)
        try:
            self.enterOuterAlt(localctx, 1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_diskgroup_file_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_diskgroup_file_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_diskgroup_file_clause" ):
                listener.enterDrop_diskgroup_file_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_diskgroup_file_clause" ):
                listener.exitDrop_diskgroup_file_clause(self)




    def drop_diskgroup_file_clause(self):

        localctx = PlSqlParser.Drop_diskgroup_file_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 58, self.RULE_drop_diskgroup_file_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3032
            self.match(PlSqlParser.DROP)
            self.state = 3033
            self.match(PlSqlParser.FILE)
            self.state = 3034
            self.filename()
            self.state = 3039
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3035
                self.match(PlSqlParser.COMMA)
                self.state = 3036
                self.filename()
                self.state = 3041
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Convert_redundancy_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONVERT(self):
            return self.getToken(PlSqlParser.CONVERT, 0)

        def REDUNDANCY(self):
            return self.getToken(PlSqlParser.REDUNDANCY, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def FLEX(self):
            return self.getToken(PlSqlParser.FLEX, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_convert_redundancy_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConvert_redundancy_clause" ):
                listener.enterConvert_redundancy_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConvert_redundancy_clause" ):
                listener.exitConvert_redundancy_clause(self)




    def convert_redundancy_clause(self):

        localctx = PlSqlParser.Convert_redundancy_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 60, self.RULE_convert_redundancy_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3042
            self.match(PlSqlParser.CONVERT)
            self.state = 3043
            self.match(PlSqlParser.REDUNDANCY)
            self.state = 3044
            self.match(PlSqlParser.TO)
            self.state = 3045
            self.match(PlSqlParser.FLEX)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Usergroup_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def USERGROUP(self):
            return self.getToken(PlSqlParser.USERGROUP, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_usergroup_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsergroup_clauses" ):
                listener.enterUsergroup_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsergroup_clauses" ):
                listener.exitUsergroup_clauses(self)




    def usergroup_clauses(self):

        localctx = PlSqlParser.Usergroup_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 62, self.RULE_usergroup_clauses)
        self._la = 0 # Token type
        try:
            self.state = 3076
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3047
                self.match(PlSqlParser.ADD)
                self.state = 3048
                self.match(PlSqlParser.USERGROUP)
                self.state = 3049
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3050
                self.match(PlSqlParser.WITH)
                self.state = 3051
                self.match(PlSqlParser.MEMBER)
                self.state = 3052
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3057
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3053
                    self.match(PlSqlParser.COMMA)
                    self.state = 3054
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 3059
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [926]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3060
                self.match(PlSqlParser.MODIFY)
                self.state = 3061
                self.match(PlSqlParser.USERGROUP)
                self.state = 3062
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3063
                _la = self._input.LA(1)
                if not(_la==21 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3064
                self.match(PlSqlParser.MEMBER)
                self.state = 3065
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3070
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3066
                    self.match(PlSqlParser.COMMA)
                    self.state = 3067
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 3072
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 3)
                self.state = 3073
                self.match(PlSqlParser.DROP)
                self.state = 3074
                self.match(PlSqlParser.USERGROUP)
                self.state = 3075
                self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class User_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_user_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUser_clauses" ):
                listener.enterUser_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUser_clauses" ):
                listener.exitUser_clauses(self)




    def user_clauses(self):

        localctx = PlSqlParser.User_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 64, self.RULE_user_clauses)
        self._la = 0 # Token type
        try:
            self.state = 3115
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3078
                self.match(PlSqlParser.ADD)
                self.state = 3079
                self.match(PlSqlParser.USER)
                self.state = 3080
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3085
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3081
                    self.match(PlSqlParser.COMMA)
                    self.state = 3082
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 3087
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3088
                self.match(PlSqlParser.DROP)
                self.state = 3089
                self.match(PlSqlParser.USER)
                self.state = 3090
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3095
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3091
                    self.match(PlSqlParser.COMMA)
                    self.state = 3092
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 3097
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3099
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==171:
                    self.state = 3098
                    self.match(PlSqlParser.CASCADE)


                pass
            elif token in [1484]:
                self.enterOuterAlt(localctx, 3)
                self.state = 3101
                self.match(PlSqlParser.REPLACE)
                self.state = 3102
                self.match(PlSqlParser.USER)
                self.state = 3103
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3104
                self.match(PlSqlParser.WITH)
                self.state = 3105
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3112
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3106
                    self.match(PlSqlParser.COMMA)
                    self.state = 3107
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 3108
                    self.match(PlSqlParser.WITH)
                    self.state = 3109
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 3114
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class File_permissions_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def PERMISSION(self):
            return self.getToken(PlSqlParser.PERMISSION, 0)

        def EQUALS_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EQUALS_OP)
            else:
                return self.getToken(PlSqlParser.EQUALS_OP, i)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def OWNER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OWNER)
            else:
                return self.getToken(PlSqlParser.OWNER, i)

        def GROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GROUP)
            else:
                return self.getToken(PlSqlParser.GROUP, i)

        def OTHER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OTHER)
            else:
                return self.getToken(PlSqlParser.OTHER, i)

        def NONE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NONE)
            else:
                return self.getToken(PlSqlParser.NONE, i)

        def READ(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.READ)
            else:
                return self.getToken(PlSqlParser.READ, i)

        def ONLY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ONLY)
            else:
                return self.getToken(PlSqlParser.ONLY, i)

        def WRITE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WRITE)
            else:
                return self.getToken(PlSqlParser.WRITE, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_file_permissions_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFile_permissions_clause" ):
                listener.enterFile_permissions_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFile_permissions_clause" ):
                listener.exitFile_permissions_clause(self)




    def file_permissions_clause(self):

        localctx = PlSqlParser.File_permissions_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 66, self.RULE_file_permissions_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3117
            self.match(PlSqlParser.SET)
            self.state = 3118
            self.match(PlSqlParser.PERMISSION)
            self.state = 3119
            _la = self._input.LA(1)
            if not(_la==609 or _la==1240 or _la==1253):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3120
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 3124
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1071]:
                self.state = 3121
                self.match(PlSqlParser.NONE)
                pass
            elif token in [1429]:
                self.state = 3122
                self.match(PlSqlParser.READ)
                self.state = 3123
                _la = self._input.LA(1)
                if not(_la==1192 or _la==2216):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 3136
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3126
                self.match(PlSqlParser.COMMA)
                self.state = 3127
                _la = self._input.LA(1)
                if not(_la==609 or _la==1240 or _la==1253):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3128
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3132
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1071]:
                    self.state = 3129
                    self.match(PlSqlParser.NONE)
                    pass
                elif token in [1429]:
                    self.state = 3130
                    self.match(PlSqlParser.READ)
                    self.state = 3131
                    _la = self._input.LA(1)
                    if not(_la==1192 or _la==2216):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 3138
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3139
            self.match(PlSqlParser.FOR)
            self.state = 3140
            self.match(PlSqlParser.FILE)
            self.state = 3141
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3146
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3142
                self.match(PlSqlParser.COMMA)
                self.state = 3143
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3148
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class File_owner_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def OWNERSHIP(self):
            return self.getToken(PlSqlParser.OWNERSHIP, 0)

        def EQUALS_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EQUALS_OP)
            else:
                return self.getToken(PlSqlParser.EQUALS_OP, i)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def OWNER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OWNER)
            else:
                return self.getToken(PlSqlParser.OWNER, i)

        def GROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GROUP)
            else:
                return self.getToken(PlSqlParser.GROUP, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_file_owner_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFile_owner_clause" ):
                listener.enterFile_owner_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFile_owner_clause" ):
                listener.exitFile_owner_clause(self)




    def file_owner_clause(self):

        localctx = PlSqlParser.File_owner_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 68, self.RULE_file_owner_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3149
            self.match(PlSqlParser.SET)
            self.state = 3150
            self.match(PlSqlParser.OWNERSHIP)
            self.state = 3151
            _la = self._input.LA(1)
            if not(_la==609 or _la==1253):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3152
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 3153
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3160
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3154
                self.match(PlSqlParser.COMMA)
                self.state = 3155
                _la = self._input.LA(1)
                if not(_la==609 or _la==1253):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3156
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3157
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3162
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3163
            self.match(PlSqlParser.FOR)
            self.state = 3164
            self.match(PlSqlParser.FILE)
            self.state = 3165
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3170
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3166
                self.match(PlSqlParser.COMMA)
                self.state = 3167
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3172
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Scrub_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SCRUB(self):
            return self.getToken(PlSqlParser.SCRUB, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def DISK(self):
            return self.getToken(PlSqlParser.DISK, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def POWER(self):
            return self.getToken(PlSqlParser.POWER, 0)

        def wait_nowait(self):
            return self.getTypedRuleContext(PlSqlParser.Wait_nowaitContext,0)


        def force_noforce(self):
            return self.getTypedRuleContext(PlSqlParser.Force_noforceContext,0)


        def STOP(self):
            return self.getToken(PlSqlParser.STOP, 0)

        def REPAIR(self):
            return self.getToken(PlSqlParser.REPAIR, 0)

        def NOREPAIR(self):
            return self.getToken(PlSqlParser.NOREPAIR, 0)

        def AUTO(self):
            return self.getToken(PlSqlParser.AUTO, 0)

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def MAX(self):
            return self.getToken(PlSqlParser.MAX, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_scrub_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterScrub_clause" ):
                listener.enterScrub_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitScrub_clause" ):
                listener.exitScrub_clause(self)




    def scrub_clause(self):

        localctx = PlSqlParser.Scrub_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 70, self.RULE_scrub_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3173
            self.match(PlSqlParser.SCRUB)
            self.state = 3178
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [550]:
                self.state = 3174
                self.match(PlSqlParser.FILE)
                self.state = 3175
                self.match(PlSqlParser.CHAR_STRING)
                pass
            elif token in [412]:
                self.state = 3176
                self.match(PlSqlParser.DISK)
                self.state = 3177
                self.id_expression()
                pass
            elif token in [-1, 576, 1044, 1108, 1153, 1350, 1482, 1677, 2197, 2354, 2367]:
                pass
            else:
                pass
            self.state = 3181
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1108 or _la==1482:
                self.state = 3180
                _la = self._input.LA(1)
                if not(_la==1108 or _la==1482):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3185
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1350:
                self.state = 3183
                self.match(PlSqlParser.POWER)
                self.state = 3184
                _la = self._input.LA(1)
                if not(_la==89 or _la==634 or _la==845 or _la==2306):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3188
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1153 or _la==2197:
                self.state = 3187
                self.wait_nowait()


            self.state = 3191
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1044:
                self.state = 3190
                self.force_noforce()


            self.state = 3194
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1677:
                self.state = 3193
                self.match(PlSqlParser.STOP)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Quotagroup_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def QUOTAGROUP(self):
            return self.getToken(PlSqlParser.QUOTAGROUP, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def property_name(self):
            return self.getTypedRuleContext(PlSqlParser.Property_nameContext,0)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def property_value(self):
            return self.getTypedRuleContext(PlSqlParser.Property_valueContext,0)


        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_quotagroup_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuotagroup_clauses" ):
                listener.enterQuotagroup_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuotagroup_clauses" ):
                listener.exitQuotagroup_clauses(self)




    def quotagroup_clauses(self):

        localctx = PlSqlParser.Quotagroup_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 72, self.RULE_quotagroup_clauses)
        self._la = 0 # Token type
        try:
            self.state = 3223
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3196
                self.match(PlSqlParser.ADD)
                self.state = 3197
                self.match(PlSqlParser.QUOTAGROUP)
                self.state = 3198
                self.id_expression()
                self.state = 3204
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1590:
                    self.state = 3199
                    self.match(PlSqlParser.SET)
                    self.state = 3200
                    self.property_name()
                    self.state = 3201
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 3202
                    self.property_value()


                pass
            elif token in [926]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3206
                self.match(PlSqlParser.MODIFY)
                self.state = 3207
                self.match(PlSqlParser.QUOTAGROUP)
                self.state = 3208
                self.id_expression()
                self.state = 3209
                self.match(PlSqlParser.SET)
                self.state = 3210
                self.property_name()
                self.state = 3211
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3212
                self.property_value()
                pass
            elif token in [938]:
                self.enterOuterAlt(localctx, 3)
                self.state = 3214
                self.match(PlSqlParser.MOVE)
                self.state = 3215
                self.match(PlSqlParser.QUOTAGROUP)
                self.state = 3216
                self.id_expression()
                self.state = 3217
                self.match(PlSqlParser.TO)
                self.state = 3218
                self.id_expression()
                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 4)
                self.state = 3220
                self.match(PlSqlParser.DROP)
                self.state = 3221
                self.match(PlSqlParser.QUOTAGROUP)
                self.state = 3222
                self.id_expression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Property_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_property_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProperty_name" ):
                listener.enterProperty_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProperty_name" ):
                listener.exitProperty_name(self)




    def property_name(self):

        localctx = PlSqlParser.Property_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 74, self.RULE_property_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3225
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Property_valueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_property_value

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProperty_value" ):
                listener.enterProperty_value(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProperty_value" ):
                listener.exitProperty_value(self)




    def property_value(self):

        localctx = PlSqlParser.Property_valueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 76, self.RULE_property_value)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3227
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Filegroup_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_filegroup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Add_filegroup_clauseContext,0)


        def modify_filegroup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_filegroup_clauseContext,0)


        def move_to_filegroup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Move_to_filegroup_clauseContext,0)


        def drop_filegroup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_filegroup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_filegroup_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFilegroup_clauses" ):
                listener.enterFilegroup_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFilegroup_clauses" ):
                listener.exitFilegroup_clauses(self)




    def filegroup_clauses(self):

        localctx = PlSqlParser.Filegroup_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 78, self.RULE_filegroup_clauses)
        try:
            self.state = 3233
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3229
                self.add_filegroup_clause()
                pass
            elif token in [926]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3230
                self.modify_filegroup_clause()
                pass
            elif token in [938]:
                self.enterOuterAlt(localctx, 3)
                self.state = 3231
                self.move_to_filegroup_clause()
                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 4)
                self.state = 3232
                self.drop_filegroup_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_filegroup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def FILEGROUP(self):
            return self.getToken(PlSqlParser.FILEGROUP, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def TEMPLATE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TEMPLATE)
            else:
                return self.getToken(PlSqlParser.TEMPLATE, i)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def VOLUME(self):
            return self.getToken(PlSqlParser.VOLUME, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_filegroup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_filegroup_clause" ):
                listener.enterAdd_filegroup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_filegroup_clause" ):
                listener.exitAdd_filegroup_clause(self)




    def add_filegroup_clause(self):

        localctx = PlSqlParser.Add_filegroup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 80, self.RULE_add_filegroup_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3235
            self.match(PlSqlParser.ADD)
            self.state = 3236
            self.match(PlSqlParser.FILEGROUP)
            self.state = 3237
            self.id_expression()
            self.state = 3241
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [210, 333, 2195]:
                self.state = 3238
                _la = self._input.LA(1)
                if not(_la==210 or _la==333 or _la==2195):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3239
                self.id_expression()
                pass
            elif token in [2006]:
                self.state = 3240
                self.match(PlSqlParser.TEMPLATE)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 3246
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==588:
                self.state = 3243
                self.match(PlSqlParser.FROM)
                self.state = 3244
                self.match(PlSqlParser.TEMPLATE)
                self.state = 3245
                self.id_expression()


            self.state = 3252
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1590:
                self.state = 3248
                self.match(PlSqlParser.SET)
                self.state = 3249
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3250
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3251
                self.match(PlSqlParser.CHAR_STRING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_filegroup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def FILEGROUP(self):
            return self.getToken(PlSqlParser.FILEGROUP, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_filegroup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_filegroup_clause" ):
                listener.enterModify_filegroup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_filegroup_clause" ):
                listener.exitModify_filegroup_clause(self)




    def modify_filegroup_clause(self):

        localctx = PlSqlParser.Modify_filegroup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 82, self.RULE_modify_filegroup_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3254
            self.match(PlSqlParser.MODIFY)
            self.state = 3255
            self.match(PlSqlParser.FILEGROUP)
            self.state = 3256
            self.id_expression()
            self.state = 3257
            self.match(PlSqlParser.SET)
            self.state = 3258
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3259
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 3260
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Move_to_filegroup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def FILEGROUP(self):
            return self.getToken(PlSqlParser.FILEGROUP, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_move_to_filegroup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMove_to_filegroup_clause" ):
                listener.enterMove_to_filegroup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMove_to_filegroup_clause" ):
                listener.exitMove_to_filegroup_clause(self)




    def move_to_filegroup_clause(self):

        localctx = PlSqlParser.Move_to_filegroup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 84, self.RULE_move_to_filegroup_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3262
            self.match(PlSqlParser.MOVE)
            self.state = 3263
            self.match(PlSqlParser.FILE)
            self.state = 3264
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3265
            self.match(PlSqlParser.TO)
            self.state = 3266
            self.match(PlSqlParser.FILEGROUP)
            self.state = 3267
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_filegroup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def FILEGROUP(self):
            return self.getToken(PlSqlParser.FILEGROUP, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_filegroup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_filegroup_clause" ):
                listener.enterDrop_filegroup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_filegroup_clause" ):
                listener.exitDrop_filegroup_clause(self)




    def drop_filegroup_clause(self):

        localctx = PlSqlParser.Drop_filegroup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 86, self.RULE_drop_filegroup_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3269
            self.match(PlSqlParser.DROP)
            self.state = 3270
            self.match(PlSqlParser.FILEGROUP)
            self.state = 3271
            self.id_expression()
            self.state = 3273
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 3272
                self.match(PlSqlParser.CASCADE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Quorum_regularContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def QUORUM(self):
            return self.getToken(PlSqlParser.QUORUM, 0)

        def REGULAR(self):
            return self.getToken(PlSqlParser.REGULAR, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_quorum_regular

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuorum_regular" ):
                listener.enterQuorum_regular(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuorum_regular" ):
                listener.exitQuorum_regular(self)




    def quorum_regular(self):

        localctx = PlSqlParser.Quorum_regularContext(self, self._ctx, self.state)
        self.enterRule(localctx, 88, self.RULE_quorum_regular)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3275
            _la = self._input.LA(1)
            if not(_la==1414 or _la==1470):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Undrop_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNDROP(self):
            return self.getToken(PlSqlParser.UNDROP, 0)

        def DISKS(self):
            return self.getToken(PlSqlParser.DISKS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_undrop_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUndrop_disk_clause" ):
                listener.enterUndrop_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUndrop_disk_clause" ):
                listener.exitUndrop_disk_clause(self)




    def undrop_disk_clause(self):

        localctx = PlSqlParser.Undrop_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 90, self.RULE_undrop_disk_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3277
            self.match(PlSqlParser.UNDROP)
            self.state = 3278
            self.match(PlSqlParser.DISKS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Diskgroup_availabilityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOUNT(self):
            return self.getToken(PlSqlParser.MOUNT, 0)

        def RESTRICTED(self):
            return self.getToken(PlSqlParser.RESTRICTED, 0)

        def NORMAL(self):
            return self.getToken(PlSqlParser.NORMAL, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def NOFORCE(self):
            return self.getToken(PlSqlParser.NOFORCE, 0)

        def DISMOUNT(self):
            return self.getToken(PlSqlParser.DISMOUNT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_diskgroup_availability

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDiskgroup_availability" ):
                listener.enterDiskgroup_availability(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDiskgroup_availability" ):
                listener.exitDiskgroup_availability(self)




    def diskgroup_availability(self):

        localctx = PlSqlParser.Diskgroup_availabilityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 92, self.RULE_diskgroup_availability)
        self._la = 0 # Token type
        try:
            self.state = 3291
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [934]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3280
                self.match(PlSqlParser.MOUNT)
                self.state = 3282
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1115 or _la==1498:
                    self.state = 3281
                    _la = self._input.LA(1)
                    if not(_la==1115 or _la==1498):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 3285
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576 or _la==1044:
                    self.state = 3284
                    _la = self._input.LA(1)
                    if not(_la==576 or _la==1044):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            elif token in [416]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3287
                self.match(PlSqlParser.DISMOUNT)
                self.state = 3289
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576 or _la==1044:
                    self.state = 3288
                    _la = self._input.LA(1)
                    if not(_la==576 or _la==1044):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Enable_disable_volumeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VOLUME(self):
            return self.getToken(PlSqlParser.VOLUME, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_enable_disable_volume

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnable_disable_volume" ):
                listener.enterEnable_disable_volume(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnable_disable_volume" ):
                listener.exitEnable_disable_volume(self)




    def enable_disable_volume(self):

        localctx = PlSqlParser.Enable_disable_volumeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 94, self.RULE_enable_disable_volume)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3293
            _la = self._input.LA(1)
            if not(_la==404 or _la==467):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3294
            self.match(PlSqlParser.VOLUME)
            self.state = 3304
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 3295
                self.id_expression()
                self.state = 3300
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3296
                    self.match(PlSqlParser.COMMA)
                    self.state = 3297
                    self.id_expression()
                    self.state = 3302
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [38]:
                self.state = 3303
                self.match(PlSqlParser.ALL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_function" ):
                listener.enterDrop_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_function" ):
                listener.exitDrop_function(self)




    def drop_function(self):

        localctx = PlSqlParser.Drop_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 96, self.RULE_drop_function)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3306
            self.match(PlSqlParser.DROP)
            self.state = 3307
            self.match(PlSqlParser.FUNCTION)
            self.state = 3308
            self.function_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_flashback_archiveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fa = None # Id_expressionContext
            self.ts = None # Id_expressionContext
            self.rts = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def flashback_archive_retention(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_archive_retentionContext,0)


        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def OPTIMIZE(self):
            return self.getToken(PlSqlParser.OPTIMIZE, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def BEFORE(self):
            return self.getToken(PlSqlParser.BEFORE, 0)

        def flashback_archive_quota(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_archive_quotaContext,0)


        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def SCN(self):
            return self.getToken(PlSqlParser.SCN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_flashback_archive

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_flashback_archive" ):
                listener.enterAlter_flashback_archive(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_flashback_archive" ):
                listener.exitAlter_flashback_archive(self)




    def alter_flashback_archive(self):

        localctx = PlSqlParser.Alter_flashback_archiveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 98, self.RULE_alter_flashback_archive)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3310
            self.match(PlSqlParser.ALTER)
            self.state = 3311
            self.match(PlSqlParser.FLASHBACK)
            self.state = 3312
            self.match(PlSqlParser.ARCHIVE)
            self.state = 3313
            localctx.fa = self.id_expression()
            self.state = 3343
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,122,self._ctx)
            if la_ == 1:
                self.state = 3314
                self.match(PlSqlParser.SET)
                self.state = 3315
                self.match(PlSqlParser.DEFAULT)
                pass

            elif la_ == 2:
                self.state = 3316
                _la = self._input.LA(1)
                if not(_la==21 or _la==926):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3317
                self.match(PlSqlParser.TABLESPACE)
                self.state = 3318
                localctx.ts = self.id_expression()
                self.state = 3320
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1415:
                    self.state = 3319
                    self.flashback_archive_quota()


                pass

            elif la_ == 3:
                self.state = 3322
                self.match(PlSqlParser.REMOVE)
                self.state = 3323
                self.match(PlSqlParser.TABLESPACE)
                self.state = 3324
                localctx.rts = self.id_expression()
                pass

            elif la_ == 4:
                self.state = 3325
                self.match(PlSqlParser.MODIFY)
                self.state = 3326
                self.flashback_archive_retention()
                pass

            elif la_ == 5:
                self.state = 3327
                self.match(PlSqlParser.PURGE)
                self.state = 3336
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [38]:
                    self.state = 3328
                    self.match(PlSqlParser.ALL)
                    pass
                elif token in [109]:
                    self.state = 3329
                    self.match(PlSqlParser.BEFORE)
                    self.state = 3334
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1549]:
                        self.state = 3330
                        self.match(PlSqlParser.SCN)
                        self.state = 3331
                        self.expression()
                        pass
                    elif token in [2020]:
                        self.state = 3332
                        self.match(PlSqlParser.TIMESTAMP)
                        self.state = 3333
                        self.expression()
                        pass
                    else:
                        raise NoViableAltException(self)

                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 6:
                self.state = 3339
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 3338
                    self.match(PlSqlParser.NO)


                self.state = 3341
                self.match(PlSqlParser.OPTIMIZE)
                self.state = 3342
                self.match(PlSqlParser.DATA)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_hierarchyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.hn = None # Id_expressionContext
            self.nhn = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_hierarchy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_hierarchy" ):
                listener.enterAlter_hierarchy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_hierarchy" ):
                listener.exitAlter_hierarchy(self)




    def alter_hierarchy(self):

        localctx = PlSqlParser.Alter_hierarchyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 100, self.RULE_alter_hierarchy)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3345
            self.match(PlSqlParser.ALTER)
            self.state = 3346
            self.match(PlSqlParser.HIERARCHY)
            self.state = 3350
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,123,self._ctx)
            if la_ == 1:
                self.state = 3347
                self.schema_name()
                self.state = 3348
                self.match(PlSqlParser.PERIOD)


            self.state = 3352
            localctx.hn = self.id_expression()
            self.state = 3357
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1481]:
                self.state = 3353
                self.match(PlSqlParser.RENAME)
                self.state = 3354
                self.match(PlSqlParser.TO)
                self.state = 3355
                localctx.nhn = self.id_expression()
                pass
            elif token in [237]:
                self.state = 3356
                self.match(PlSqlParser.COMPILE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def compiler_parameters_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compiler_parameters_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compiler_parameters_clauseContext,i)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_function" ):
                listener.enterAlter_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_function" ):
                listener.exitAlter_function(self)




    def alter_function(self):

        localctx = PlSqlParser.Alter_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 102, self.RULE_alter_function)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3359
            self.match(PlSqlParser.ALTER)
            self.state = 3360
            self.match(PlSqlParser.FUNCTION)
            self.state = 3361
            self.function_name()
            self.state = 3378
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [451]:
                self.state = 3362
                self.match(PlSqlParser.EDITIONABLE)
                pass
            elif token in [1070]:
                self.state = 3363
                self.match(PlSqlParser.NONEDITIONABLE)
                pass
            elif token in [237]:
                self.state = 3364
                self.match(PlSqlParser.COMPILE)
                self.state = 3366
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,125,self._ctx)
                if la_ == 1:
                    self.state = 3365
                    self.match(PlSqlParser.DEBUG)


                self.state = 3371
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,126,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 3368
                        self.compiler_parameters_clause() 
                    self.state = 3373
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,126,self._ctx)

                self.state = 3376
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 3374
                    self.match(PlSqlParser.REUSE)
                    self.state = 3375
                    self.match(PlSqlParser.SETTINGS)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_javaContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.o = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def SOURCE(self):
            return self.getToken(PlSqlParser.SOURCE, 0)

        def CLASS(self):
            return self.getToken(PlSqlParser.CLASS, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def RESOLVE(self):
            return self.getToken(PlSqlParser.RESOLVE, 0)

        def invoker_rights_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,0)


        def schema_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Schema_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def RESOLVER(self):
            return self.getToken(PlSqlParser.RESOLVER, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def match_string(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Match_stringContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Match_stringContext,i)


        def MINUS_SIGN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MINUS_SIGN)
            else:
                return self.getToken(PlSqlParser.MINUS_SIGN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_java

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_java" ):
                listener.enterAlter_java(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_java" ):
                listener.exitAlter_java(self)




    def alter_java(self):

        localctx = PlSqlParser.Alter_javaContext(self, self._ctx, self.state)
        self.enterRule(localctx, 104, self.RULE_alter_java)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3380
            self.match(PlSqlParser.ALTER)
            self.state = 3381
            self.match(PlSqlParser.JAVA)
            self.state = 3382
            _la = self._input.LA(1)
            if not(_la==196 or _la==1630):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3386
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,129,self._ctx)
            if la_ == 1:
                self.state = 3383
                self.schema_name()
                self.state = 3384
                self.match(PlSqlParser.PERIOD)


            self.state = 3388
            localctx.o = self.id_expression()
            self.state = 3408
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1491:
                self.state = 3389
                self.match(PlSqlParser.RESOLVER)
                self.state = 3390
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3402 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 3391
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 3392
                    self.match_string()
                    self.state = 3394
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 3393
                        self.match(PlSqlParser.COMMA)


                    self.state = 3398
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                        self.state = 3396
                        self.schema_name()
                        pass
                    elif token in [2352]:
                        self.state = 3397
                        self.match(PlSqlParser.MINUS_SIGN)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 3400
                    self.match(PlSqlParser.RIGHT_PAREN)
                    self.state = 3404 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==2347):
                        break

                self.state = 3406
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 3413
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [237]:
                self.state = 3410
                self.match(PlSqlParser.COMPILE)
                pass
            elif token in [1490]:
                self.state = 3411
                self.match(PlSqlParser.RESOLVE)
                pass
            elif token in [86]:
                self.state = 3412
                self.invoker_rights_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Match_stringContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_match_string

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMatch_string" ):
                listener.enterMatch_string(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMatch_string" ):
                listener.exitMatch_string(self)




    def match_string(self):

        localctx = PlSqlParser.Match_stringContext(self, self._ctx, self.state)
        self.enterRule(localctx, 106, self.RULE_match_string)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3415
            _la = self._input.LA(1)
            if not(_la==2344 or _la==2350):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_function_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def aggregate_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Aggregate_clauseContext,0)


        def pipelined_using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pipelined_using_clauseContext,0)


        def sql_macro_body(self):
            return self.getTypedRuleContext(PlSqlParser.Sql_macro_bodyContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ParameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ParameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def invoker_rights_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Invoker_rights_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,i)


        def accessible_by_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Accessible_by_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Accessible_by_clauseContext,i)


        def default_collation_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Default_collation_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Default_collation_clauseContext,i)


        def parallel_enable_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_enable_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_enable_clauseContext,i)


        def result_cache_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Result_cache_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Result_cache_clauseContext,i)


        def PIPELINED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PIPELINED)
            else:
                return self.getToken(PlSqlParser.PIPELINED, i)

        def DETERMINISTIC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DETERMINISTIC)
            else:
                return self.getToken(PlSqlParser.DETERMINISTIC, i)

        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_function_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_function_body" ):
                listener.enterCreate_function_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_function_body" ):
                listener.exitCreate_function_body(self)




    def create_function_body(self):

        localctx = PlSqlParser.Create_function_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 108, self.RULE_create_function_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3417
            self.match(PlSqlParser.CREATE)
            self.state = 3420
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 3418
                self.match(PlSqlParser.OR)
                self.state = 3419
                self.match(PlSqlParser.REPLACE)


            self.state = 3423
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==451 or _la==1070:
                self.state = 3422
                _la = self._input.LA(1)
                if not(_la==451 or _la==1070):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3425
            self.match(PlSqlParser.FUNCTION)
            self.state = 3426
            self.function_name()
            self.state = 3438
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 3427
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3428
                self.parameter()
                self.state = 3433
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3429
                    self.match(PlSqlParser.COMMA)
                    self.state = 3430
                    self.parameter()
                    self.state = 3435
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3436
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 3440
            self.match(PlSqlParser.RETURN)
            self.state = 3441
            self.type_spec()
            self.state = 3445
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 3442
                self.match(PlSqlParser.SHARING)
                self.state = 3443
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3444
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3456
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,141,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3454
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [86]:
                        self.state = 3447
                        self.invoker_rights_clause()
                        pass
                    elif token in [6]:
                        self.state = 3448
                        self.accessible_by_clause()
                        pass
                    elif token in [368]:
                        self.state = 3449
                        self.default_collation_clause()
                        pass
                    elif token in [1259]:
                        self.state = 3450
                        self.parallel_enable_clause()
                        pass
                    elif token in [1501]:
                        self.state = 3451
                        self.result_cache_clause()
                        pass
                    elif token in [1321]:
                        self.state = 3452
                        self.match(PlSqlParser.PIPELINED)
                        pass
                    elif token in [396]:
                        self.state = 3453
                        self.match(PlSqlParser.DETERMINISTIC)
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 3458
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,141,self._ctx)

            self.state = 3473
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [67, 740]:
                self.state = 3459
                _la = self._input.LA(1)
                if not(_la==67 or _la==740):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3468
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,144,self._ctx)
                if la_ == 1:
                    self.state = 3461
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,142,self._ctx)
                    if la_ == 1:
                        self.state = 3460
                        self.match(PlSqlParser.DECLARE)


                    self.state = 3464
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,143,self._ctx)
                    if la_ == 1:
                        self.state = 3463
                        self.seq_of_declare_specs()


                    self.state = 3466
                    self.body()
                    pass

                elif la_ == 2:
                    self.state = 3467
                    self.call_spec()
                    pass


                pass
            elif token in [35]:
                self.state = 3470
                self.aggregate_clause()
                pass
            elif token in [1321]:
                self.state = 3471
                self.pipelined_using_clause()
                pass
            elif token in [1641]:
                self.state = 3472
                self.sql_macro_body()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sql_macro_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SQL_MACRO(self):
            return self.getToken(PlSqlParser.SQL_MACRO, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_macro_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_macro_body" ):
                listener.enterSql_macro_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_macro_body" ):
                listener.exitSql_macro_body(self)




    def sql_macro_body(self):

        localctx = PlSqlParser.Sql_macro_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 110, self.RULE_sql_macro_body)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3475
            self.match(PlSqlParser.SQL_MACRO)
            self.state = 3476
            self.match(PlSqlParser.IS)
            self.state = 3477
            self.match(PlSqlParser.BEGIN)
            self.state = 3478
            self.match(PlSqlParser.RETURN)
            self.state = 3479
            self.quoted_string()
            self.state = 3480
            self.match(PlSqlParser.SEMICOLON)
            self.state = 3481
            self.match(PlSqlParser.END)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Parallel_enable_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARALLEL_ENABLE(self):
            return self.getToken(PlSqlParser.PARALLEL_ENABLE, 0)

        def partition_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_by_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_parallel_enable_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParallel_enable_clause" ):
                listener.enterParallel_enable_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParallel_enable_clause" ):
                listener.exitParallel_enable_clause(self)




    def parallel_enable_clause(self):

        localctx = PlSqlParser.Parallel_enable_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 112, self.RULE_parallel_enable_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3483
            self.match(PlSqlParser.PARALLEL_ENABLE)
            self.state = 3485
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 3484
                self.partition_by_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_by_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ANY(self):
            return self.getToken(PlSqlParser.ANY, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def HASH(self):
            return self.getToken(PlSqlParser.HASH, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def LIST(self):
            return self.getToken(PlSqlParser.LIST, 0)

        def streaming_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Streaming_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_by_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_by_clause" ):
                listener.enterPartition_by_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_by_clause" ):
                listener.exitPartition_by_clause(self)




    def partition_by_clause(self):

        localctx = PlSqlParser.Partition_by_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 114, self.RULE_partition_by_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3487
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 3488
            self.match(PlSqlParser.PARTITION)
            self.state = 3489
            self.expression()
            self.state = 3490
            self.match(PlSqlParser.BY)
            self.state = 3494
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [54]:
                self.state = 3491
                self.match(PlSqlParser.ANY)
                pass
            elif token in [619, 813, 1420]:
                self.state = 3492
                _la = self._input.LA(1)
                if not(_la==619 or _la==813 or _la==1420):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3493
                self.paren_column_list()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 3497
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==210 or _la==1233:
                self.state = 3496
                self.streaming_clause()


            self.state = 3499
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Result_cache_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESULT_CACHE(self):
            return self.getToken(PlSqlParser.RESULT_CACHE, 0)

        def relies_on_part(self):
            return self.getTypedRuleContext(PlSqlParser.Relies_on_partContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def MODE(self):
            return self.getToken(PlSqlParser.MODE, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_result_cache_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResult_cache_clause" ):
                listener.enterResult_cache_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResult_cache_clause" ):
                listener.exitResult_cache_clause(self)




    def result_cache_clause(self):

        localctx = PlSqlParser.Result_cache_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 116, self.RULE_result_cache_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3501
            self.match(PlSqlParser.RESULT_CACHE)
            self.state = 3503
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1474:
                self.state = 3502
                self.relies_on_part()


            self.state = 3509
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 3505
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3506
                self.match(PlSqlParser.MODE)
                self.state = 3507
                _la = self._input.LA(1)
                if not(_la==368 or _la==576):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3508
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Accessible_by_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACCESSIBLE(self):
            return self.getToken(PlSqlParser.ACCESSIBLE, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def accessor(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.AccessorContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.AccessorContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_accessible_by_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAccessible_by_clause" ):
                listener.enterAccessible_by_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAccessible_by_clause" ):
                listener.exitAccessible_by_clause(self)




    def accessible_by_clause(self):

        localctx = PlSqlParser.Accessible_by_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 118, self.RULE_accessible_by_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3511
            self.match(PlSqlParser.ACCESSIBLE)
            self.state = 3512
            self.match(PlSqlParser.BY)
            self.state = 3513
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 3514
            self.accessor()
            self.state = 3519
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3515
                self.match(PlSqlParser.COMMA)
                self.state = 3516
                self.accessor()
                self.state = 3521
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3522
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_collation_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def COLLATION(self):
            return self.getToken(PlSqlParser.COLLATION, 0)

        def USING_NLS_COMP(self):
            return self.getToken(PlSqlParser.USING_NLS_COMP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_collation_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_collation_clause" ):
                listener.enterDefault_collation_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_collation_clause" ):
                listener.exitDefault_collation_clause(self)




    def default_collation_clause(self):

        localctx = PlSqlParser.Default_collation_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 120, self.RULE_default_collation_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3524
            self.match(PlSqlParser.DEFAULT)
            self.state = 3525
            self.match(PlSqlParser.COLLATION)
            self.state = 3526
            self.match(PlSqlParser.USING_NLS_COMP)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Aggregate_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AGGREGATE(self):
            return self.getToken(PlSqlParser.AGGREGATE, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def implementation_type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Implementation_type_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_aggregate_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAggregate_clause" ):
                listener.enterAggregate_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAggregate_clause" ):
                listener.exitAggregate_clause(self)




    def aggregate_clause(self):

        localctx = PlSqlParser.Aggregate_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 122, self.RULE_aggregate_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3528
            self.match(PlSqlParser.AGGREGATE)
            self.state = 3529
            self.match(PlSqlParser.USING)
            self.state = 3530
            self.implementation_type_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pipelined_using_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PIPELINED(self):
            return self.getToken(PlSqlParser.PIPELINED, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def implementation_type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Implementation_type_nameContext,0)


        def POLYMORPHIC(self):
            return self.getToken(PlSqlParser.POLYMORPHIC, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pipelined_using_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPipelined_using_clause" ):
                listener.enterPipelined_using_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPipelined_using_clause" ):
                listener.exitPipelined_using_clause(self)




    def pipelined_using_clause(self):

        localctx = PlSqlParser.Pipelined_using_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 124, self.RULE_pipelined_using_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3532
            self.match(PlSqlParser.PIPELINED)
            self.state = 3535
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1528 or _la==1999:
                self.state = 3533
                _la = self._input.LA(1)
                if not(_la==1528 or _la==1999):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3534
                self.match(PlSqlParser.POLYMORPHIC)


            self.state = 3537
            self.match(PlSqlParser.USING)
            self.state = 3538
            self.implementation_type_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AccessorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.unitKind = None # Token

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def PACKAGE(self):
            return self.getToken(PlSqlParser.PACKAGE, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_accessor

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAccessor" ):
                listener.enterAccessor(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAccessor" ):
                listener.exitAccessor(self)




    def accessor(self):

        localctx = PlSqlParser.AccessorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 126, self.RULE_accessor)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3540
            localctx.unitKind = self._input.LT(1)
            _la = self._input.LA(1)
            if not(_la==592 or _la==1257 or _la==1386 or _la==2067 or _la==2076):
                localctx.unitKind = self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3541
            self.function_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Relies_on_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RELIES_ON(self):
            return self.getToken(PlSqlParser.RELIES_ON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def tableview_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tableview_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_relies_on_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRelies_on_part" ):
                listener.enterRelies_on_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRelies_on_part" ):
                listener.exitRelies_on_part(self)




    def relies_on_part(self):

        localctx = PlSqlParser.Relies_on_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 128, self.RULE_relies_on_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3543
            self.match(PlSqlParser.RELIES_ON)
            self.state = 3544
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 3545
            self.tableview_name()
            self.state = 3550
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3546
                self.match(PlSqlParser.COMMA)
                self.state = 3547
                self.tableview_name()
                self.state = 3552
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3553
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Streaming_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_streaming_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStreaming_clause" ):
                listener.enterStreaming_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStreaming_clause" ):
                listener.exitStreaming_clause(self)




    def streaming_clause(self):

        localctx = PlSqlParser.Streaming_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 130, self.RULE_streaming_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3555
            _la = self._input.LA(1)
            if not(_la==210 or _la==1233):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3556
            self.expression()
            self.state = 3557
            self.match(PlSqlParser.BY)
            self.state = 3558
            self.paren_column_list()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_outlineContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.o = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def OUTLINE(self):
            return self.getToken(PlSqlParser.OUTLINE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def outline_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Outline_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Outline_optionsContext,i)


        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def PRIVATE(self):
            return self.getToken(PlSqlParser.PRIVATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_outline

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_outline" ):
                listener.enterAlter_outline(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_outline" ):
                listener.exitAlter_outline(self)




    def alter_outline(self):

        localctx = PlSqlParser.Alter_outlineContext(self, self._ctx, self.state)
        self.enterRule(localctx, 132, self.RULE_alter_outline)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3560
            self.match(PlSqlParser.ALTER)
            self.state = 3561
            self.match(PlSqlParser.OUTLINE)
            self.state = 3563
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,154,self._ctx)
            if la_ == 1:
                self.state = 3562
                _la = self._input.LA(1)
                if not(_la==1380 or _la==1398):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3565
            localctx.o = self.id_expression()
            self.state = 3567 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 3566
                self.outline_options()
                self.state = 3569 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==182 or _la==404 or _la==467 or _la==1434 or _la==1481):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Outline_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.non = None # Id_expressionContext
            self.ncn = None # Id_expressionContext

        def REBUILD(self):
            return self.getToken(PlSqlParser.REBUILD, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def CHANGE(self):
            return self.getToken(PlSqlParser.CHANGE, 0)

        def CATEGORY(self):
            return self.getToken(PlSqlParser.CATEGORY, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_outline_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOutline_options" ):
                listener.enterOutline_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOutline_options" ):
                listener.exitOutline_options(self)




    def outline_options(self):

        localctx = PlSqlParser.Outline_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 134, self.RULE_outline_options)
        try:
            self.state = 3581
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1434]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3571
                self.match(PlSqlParser.REBUILD)
                pass
            elif token in [1481]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3572
                self.match(PlSqlParser.RENAME)
                self.state = 3573
                self.match(PlSqlParser.TO)
                self.state = 3574
                localctx.non = self.id_expression()
                pass
            elif token in [182]:
                self.enterOuterAlt(localctx, 3)
                self.state = 3575
                self.match(PlSqlParser.CHANGE)
                self.state = 3576
                self.match(PlSqlParser.CATEGORY)
                self.state = 3577
                self.match(PlSqlParser.TO)
                self.state = 3578
                localctx.ncn = self.id_expression()
                pass
            elif token in [467]:
                self.enterOuterAlt(localctx, 4)
                self.state = 3579
                self.match(PlSqlParser.ENABLE)
                pass
            elif token in [404]:
                self.enterOuterAlt(localctx, 5)
                self.state = 3580
                self.match(PlSqlParser.DISABLE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_lockdown_profileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def LOCKDOWN(self):
            return self.getToken(PlSqlParser.LOCKDOWN, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def lockdown_feature(self):
            return self.getTypedRuleContext(PlSqlParser.Lockdown_featureContext,0)


        def lockdown_options(self):
            return self.getTypedRuleContext(PlSqlParser.Lockdown_optionsContext,0)


        def lockdown_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Lockdown_statementsContext,0)


        def USERS(self):
            return self.getToken(PlSqlParser.USERS, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COMMON(self):
            return self.getToken(PlSqlParser.COMMON, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_lockdown_profile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_lockdown_profile" ):
                listener.enterAlter_lockdown_profile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_lockdown_profile" ):
                listener.exitAlter_lockdown_profile(self)




    def alter_lockdown_profile(self):

        localctx = PlSqlParser.Alter_lockdown_profileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 136, self.RULE_alter_lockdown_profile)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3583
            self.match(PlSqlParser.ALTER)
            self.state = 3584
            self.match(PlSqlParser.LOCKDOWN)
            self.state = 3585
            self.match(PlSqlParser.PROFILE)
            self.state = 3586
            self.id_expression()
            self.state = 3590
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,157,self._ctx)
            if la_ == 1:
                self.state = 3587
                self.lockdown_feature()
                pass

            elif la_ == 2:
                self.state = 3588
                self.lockdown_options()
                pass

            elif la_ == 3:
                self.state = 3589
                self.lockdown_statements()
                pass


            self.state = 3595
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2142:
                self.state = 3592
                self.match(PlSqlParser.USERS)
                self.state = 3593
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3594
                _la = self._input.LA(1)
                if not(_la==38 or _la==233 or _la==821):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lockdown_featureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def disable_enable(self):
            return self.getTypedRuleContext(PlSqlParser.Disable_enableContext,0)


        def FEATURE(self):
            return self.getToken(PlSqlParser.FEATURE, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_list(self):
            return self.getTypedRuleContext(PlSqlParser.String_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lockdown_feature

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockdown_feature" ):
                listener.enterLockdown_feature(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockdown_feature" ):
                listener.exitLockdown_feature(self)




    def lockdown_feature(self):

        localctx = PlSqlParser.Lockdown_featureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 138, self.RULE_lockdown_feature)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3597
            self.disable_enable()
            self.state = 3598
            self.match(PlSqlParser.FEATURE)
            self.state = 3613
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2369]:
                self.state = 3599
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3600
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3601
                self.string_list()
                self.state = 3602
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [38]:
                self.state = 3604
                self.match(PlSqlParser.ALL)
                self.state = 3611
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==497:
                    self.state = 3605
                    self.match(PlSqlParser.EXCEPT)
                    self.state = 3606
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 3607
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 3608
                    self.string_list()
                    self.state = 3609
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lockdown_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def disable_enable(self):
            return self.getTypedRuleContext(PlSqlParser.Disable_enableContext,0)


        def OPTION(self):
            return self.getToken(PlSqlParser.OPTION, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_list(self):
            return self.getTypedRuleContext(PlSqlParser.String_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lockdown_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockdown_options" ):
                listener.enterLockdown_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockdown_options" ):
                listener.exitLockdown_options(self)




    def lockdown_options(self):

        localctx = PlSqlParser.Lockdown_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 140, self.RULE_lockdown_options)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3615
            self.disable_enable()
            self.state = 3616
            self.match(PlSqlParser.OPTION)
            self.state = 3631
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2369]:
                self.state = 3617
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3618
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3619
                self.string_list()
                self.state = 3620
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [38]:
                self.state = 3622
                self.match(PlSqlParser.ALL)
                self.state = 3629
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==497:
                    self.state = 3623
                    self.match(PlSqlParser.EXCEPT)
                    self.state = 3624
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 3625
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 3626
                    self.string_list()
                    self.state = 3627
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lockdown_statementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def disable_enable(self):
            return self.getTypedRuleContext(PlSqlParser.Disable_enableContext,0)


        def STATEMENT(self):
            return self.getToken(PlSqlParser.STATEMENT, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_list(self):
            return self.getTypedRuleContext(PlSqlParser.String_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def statement_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Statement_clausesContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lockdown_statements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLockdown_statements" ):
                listener.enterLockdown_statements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLockdown_statements" ):
                listener.exitLockdown_statements(self)




    def lockdown_statements(self):

        localctx = PlSqlParser.Lockdown_statementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 142, self.RULE_lockdown_statements)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3633
            self.disable_enable()
            self.state = 3634
            self.match(PlSqlParser.STATEMENT)
            self.state = 3654
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,164,self._ctx)
            if la_ == 1:
                self.state = 3635
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3636
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3637
                self.string_list()
                self.state = 3638
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 3640
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3641
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3642
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3643
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 3644
                self.statement_clauses()
                pass

            elif la_ == 3:
                self.state = 3645
                self.match(PlSqlParser.ALL)
                self.state = 3652
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==497:
                    self.state = 3646
                    self.match(PlSqlParser.EXCEPT)
                    self.state = 3647
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 3648
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 3649
                    self.string_list()
                    self.state = 3650
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Statement_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CLAUSE(self):
            return self.getToken(PlSqlParser.CLAUSE, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_list(self):
            return self.getTypedRuleContext(PlSqlParser.String_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def clause_options(self):
            return self.getTypedRuleContext(PlSqlParser.Clause_optionsContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_statement_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStatement_clauses" ):
                listener.enterStatement_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStatement_clauses" ):
                listener.exitStatement_clauses(self)




    def statement_clauses(self):

        localctx = PlSqlParser.Statement_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 144, self.RULE_statement_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3656
            self.match(PlSqlParser.CLAUSE)
            self.state = 3676
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,166,self._ctx)
            if la_ == 1:
                self.state = 3657
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3658
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3659
                self.string_list()
                self.state = 3660
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 3662
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3663
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3664
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3665
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 3666
                self.clause_options()
                pass

            elif la_ == 3:
                self.state = 3667
                self.match(PlSqlParser.ALL)
                self.state = 3674
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==497:
                    self.state = 3668
                    self.match(PlSqlParser.EXCEPT)
                    self.state = 3669
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 3670
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 3671
                    self.string_list()
                    self.state = 3672
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Clause_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OPTION(self):
            return self.getToken(PlSqlParser.OPTION, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_list(self):
            return self.getTypedRuleContext(PlSqlParser.String_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def option_values(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Option_valuesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Option_valuesContext,i)


        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_clause_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClause_options" ):
                listener.enterClause_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClause_options" ):
                listener.exitClause_options(self)




    def clause_options(self):

        localctx = PlSqlParser.Clause_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 146, self.RULE_clause_options)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3678
            self.match(PlSqlParser.OPTION)
            self.state = 3702
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,169,self._ctx)
            if la_ == 1:
                self.state = 3679
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3680
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3681
                self.string_list()
                self.state = 3682
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 3684
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3685
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3686
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3687
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 3689 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 3688
                    self.option_values()
                    self.state = 3691 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==878 or _la==906 or _la==2165):
                        break

                pass

            elif la_ == 3:
                self.state = 3693
                self.match(PlSqlParser.ALL)
                self.state = 3700
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==497:
                    self.state = 3694
                    self.match(PlSqlParser.EXCEPT)
                    self.state = 3695
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 3696
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 3697
                    self.string_list()
                    self.state = 3698
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Option_valuesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_list(self):
            return self.getTypedRuleContext(PlSqlParser.String_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def MINVALUE(self):
            return self.getToken(PlSqlParser.MINVALUE, 0)

        def MAXVALUE(self):
            return self.getToken(PlSqlParser.MAXVALUE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_option_values

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOption_values" ):
                listener.enterOption_values(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOption_values" ):
                listener.exitOption_values(self)




    def option_values(self):

        localctx = PlSqlParser.Option_valuesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 148, self.RULE_option_values)
        self._la = 0 # Token type
        try:
            self.state = 3713
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2165]:
                self.enterOuterAlt(localctx, 1)
                self.state = 3704
                self.match(PlSqlParser.VALUE)
                self.state = 3705
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3706
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3707
                self.string_list()
                self.state = 3708
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [878, 906]:
                self.enterOuterAlt(localctx, 2)
                self.state = 3710
                _la = self._input.LA(1)
                if not(_la==878 or _la==906):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 3711
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 3712
                self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class String_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_string_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterString_list" ):
                listener.enterString_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitString_list" ):
                listener.exitString_list(self)




    def string_list(self):

        localctx = PlSqlParser.String_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 150, self.RULE_string_list)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3715
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 3720
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 3716
                self.match(PlSqlParser.COMMA)
                self.state = 3717
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 3722
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Disable_enableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_disable_enable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDisable_enable" ):
                listener.enterDisable_enable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDisable_enable" ):
                listener.exitDisable_enable(self)




    def disable_enable(self):

        localctx = PlSqlParser.Disable_enableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 152, self.RULE_disable_enable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3723
            _la = self._input.LA(1)
            if not(_la==404 or _la==467):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_lockdown_profileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.p = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def LOCKDOWN(self):
            return self.getToken(PlSqlParser.LOCKDOWN, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_lockdown_profile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_lockdown_profile" ):
                listener.enterDrop_lockdown_profile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_lockdown_profile" ):
                listener.exitDrop_lockdown_profile(self)




    def drop_lockdown_profile(self):

        localctx = PlSqlParser.Drop_lockdown_profileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 154, self.RULE_drop_lockdown_profile)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3725
            self.match(PlSqlParser.DROP)
            self.state = 3726
            self.match(PlSqlParser.LOCKDOWN)
            self.state = 3727
            self.match(PlSqlParser.PROFILE)
            self.state = 3728
            localctx.p = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_packageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def PACKAGE(self):
            return self.getToken(PlSqlParser.PACKAGE, 0)

        def package_name(self):
            return self.getTypedRuleContext(PlSqlParser.Package_nameContext,0)


        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_package

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_package" ):
                listener.enterDrop_package(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_package" ):
                listener.exitDrop_package(self)




    def drop_package(self):

        localctx = PlSqlParser.Drop_packageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 156, self.RULE_drop_package)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3730
            self.match(PlSqlParser.DROP)
            self.state = 3731
            self.match(PlSqlParser.PACKAGE)
            self.state = 3733
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,172,self._ctx)
            if la_ == 1:
                self.state = 3732
                self.match(PlSqlParser.BODY)


            self.state = 3738
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,173,self._ctx)
            if la_ == 1:
                self.state = 3735
                self.schema_object_name()
                self.state = 3736
                self.match(PlSqlParser.PERIOD)


            self.state = 3740
            self.package_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_packageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def PACKAGE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PACKAGE)
            else:
                return self.getToken(PlSqlParser.PACKAGE, i)

        def package_name(self):
            return self.getTypedRuleContext(PlSqlParser.Package_nameContext,0)


        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def compiler_parameters_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compiler_parameters_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compiler_parameters_clauseContext,i)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def SPECIFICATION(self):
            return self.getToken(PlSqlParser.SPECIFICATION, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_package

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_package" ):
                listener.enterAlter_package(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_package" ):
                listener.exitAlter_package(self)




    def alter_package(self):

        localctx = PlSqlParser.Alter_packageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 158, self.RULE_alter_package)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3742
            self.match(PlSqlParser.ALTER)
            self.state = 3743
            self.match(PlSqlParser.PACKAGE)
            self.state = 3744
            self.package_name()
            self.state = 3745
            self.match(PlSqlParser.COMPILE)
            self.state = 3747
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,174,self._ctx)
            if la_ == 1:
                self.state = 3746
                self.match(PlSqlParser.DEBUG)


            self.state = 3750
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,175,self._ctx)
            if la_ == 1:
                self.state = 3749
                _la = self._input.LA(1)
                if not(_la==141 or _la==1257 or _la==1632):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3755
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,176,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3752
                    self.compiler_parameters_clause() 
                self.state = 3757
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,176,self._ctx)

            self.state = 3760
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 3758
                self.match(PlSqlParser.REUSE)
                self.state = 3759
                self.match(PlSqlParser.SETTINGS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_packageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def PACKAGE(self):
            return self.getToken(PlSqlParser.PACKAGE, 0)

        def package_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Package_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Package_nameContext,i)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def invoker_rights_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,0)


        def package_obj_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Package_obj_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Package_obj_specContext,i)


        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_package

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_package" ):
                listener.enterCreate_package(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_package" ):
                listener.exitCreate_package(self)




    def create_package(self):

        localctx = PlSqlParser.Create_packageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 160, self.RULE_create_package)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3762
            self.match(PlSqlParser.CREATE)
            self.state = 3765
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 3763
                self.match(PlSqlParser.OR)
                self.state = 3764
                self.match(PlSqlParser.REPLACE)


            self.state = 3768
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==451 or _la==1070:
                self.state = 3767
                _la = self._input.LA(1)
                if not(_la==451 or _la==1070):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3770
            self.match(PlSqlParser.PACKAGE)
            self.state = 3774
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,180,self._ctx)
            if la_ == 1:
                self.state = 3771
                self.schema_object_name()
                self.state = 3772
                self.match(PlSqlParser.PERIOD)


            self.state = 3776
            self.package_name()
            self.state = 3778
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==86:
                self.state = 3777
                self.invoker_rights_clause()


            self.state = 3780
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3784
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 3781
                self.package_obj_spec()
                self.state = 3786
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3787
            self.match(PlSqlParser.END)
            self.state = 3789
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 3788
                self.package_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_package_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def PACKAGE(self):
            return self.getToken(PlSqlParser.PACKAGE, 0)

        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def package_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Package_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Package_nameContext,i)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def package_obj_body(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Package_obj_bodyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Package_obj_bodyContext,i)


        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def EXCEPTION(self):
            return self.getToken(PlSqlParser.EXCEPTION, 0)

        def exception_handler(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Exception_handlerContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Exception_handlerContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_package_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_package_body" ):
                listener.enterCreate_package_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_package_body" ):
                listener.exitCreate_package_body(self)




    def create_package_body(self):

        localctx = PlSqlParser.Create_package_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 162, self.RULE_create_package_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3791
            self.match(PlSqlParser.CREATE)
            self.state = 3794
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 3792
                self.match(PlSqlParser.OR)
                self.state = 3793
                self.match(PlSqlParser.REPLACE)


            self.state = 3797
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==451 or _la==1070:
                self.state = 3796
                _la = self._input.LA(1)
                if not(_la==451 or _la==1070):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 3799
            self.match(PlSqlParser.PACKAGE)
            self.state = 3800
            self.match(PlSqlParser.BODY)
            self.state = 3804
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,186,self._ctx)
            if la_ == 1:
                self.state = 3801
                self.schema_object_name()
                self.state = 3802
                self.match(PlSqlParser.PERIOD)


            self.state = 3806
            self.package_name()
            self.state = 3807
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 3811
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,187,self._ctx)
            while _alt!=1 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1+1:
                    self.state = 3808
                    self.package_obj_body() 
                self.state = 3813
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,187,self._ctx)

            self.state = 3824
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==110:
                self.state = 3814
                self.match(PlSqlParser.BEGIN)
                self.state = 3815
                self.seq_of_statements()
                self.state = 3822
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==498:
                    self.state = 3816
                    self.match(PlSqlParser.EXCEPTION)
                    self.state = 3818 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 3817
                        self.exception_handler()
                        self.state = 3820 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (_la==2204):
                            break





            self.state = 3826
            self.match(PlSqlParser.END)
            self.state = 3828
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 3827
                self.package_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Package_obj_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def pragma_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Pragma_declarationContext,0)


        def exception_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Exception_declarationContext,0)


        def procedure_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_specContext,0)


        def function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Function_specContext,0)


        def variable_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Variable_declarationContext,0)


        def subtype_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Subtype_declarationContext,0)


        def cursor_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_declarationContext,0)


        def type_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Type_declarationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_package_obj_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPackage_obj_spec" ):
                listener.enterPackage_obj_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPackage_obj_spec" ):
                listener.exitPackage_obj_spec(self)




    def package_obj_spec(self):

        localctx = PlSqlParser.Package_obj_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 164, self.RULE_package_obj_spec)
        try:
            self.state = 3838
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,192,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3830
                self.pragma_declaration()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3831
                self.exception_declaration()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 3832
                self.procedure_spec()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 3833
                self.function_spec()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 3834
                self.variable_declaration()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 3835
                self.subtype_declaration()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 3836
                self.cursor_declaration()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 3837
                self.type_declaration()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Procedure_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ParameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ParameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def accessible_by_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Accessible_by_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Accessible_by_clauseContext,i)


        def PARALLEL_ENABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARALLEL_ENABLE)
            else:
                return self.getToken(PlSqlParser.PARALLEL_ENABLE, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_procedure_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProcedure_spec" ):
                listener.enterProcedure_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProcedure_spec" ):
                listener.exitProcedure_spec(self)




    def procedure_spec(self):

        localctx = PlSqlParser.Procedure_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 166, self.RULE_procedure_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3840
            self.match(PlSqlParser.PROCEDURE)
            self.state = 3841
            self.identifier()
            self.state = 3853
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 3842
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3843
                self.parameter()
                self.state = 3848
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3844
                    self.match(PlSqlParser.COMMA)
                    self.state = 3845
                    self.parameter()
                    self.state = 3850
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3851
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 3859
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==6 or _la==1259:
                self.state = 3857
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [6]:
                    self.state = 3855
                    self.accessible_by_clause()
                    pass
                elif token in [1259]:
                    self.state = 3856
                    self.match(PlSqlParser.PARALLEL_ENABLE)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 3861
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3862
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ParameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ParameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def DETERMINISTIC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DETERMINISTIC)
            else:
                return self.getToken(PlSqlParser.DETERMINISTIC, i)

        def PIPELINED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PIPELINED)
            else:
                return self.getToken(PlSqlParser.PIPELINED, i)

        def parallel_enable_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_enable_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_enable_clauseContext,i)


        def RESULT_CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RESULT_CACHE)
            else:
                return self.getToken(PlSqlParser.RESULT_CACHE, i)

        def streaming_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Streaming_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Streaming_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_function_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_spec" ):
                listener.enterFunction_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_spec" ):
                listener.exitFunction_spec(self)




    def function_spec(self):

        localctx = PlSqlParser.Function_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 168, self.RULE_function_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3864
            self.match(PlSqlParser.FUNCTION)
            self.state = 3865
            self.identifier()
            self.state = 3877
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 3866
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3867
                self.parameter()
                self.state = 3872
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3868
                    self.match(PlSqlParser.COMMA)
                    self.state = 3869
                    self.parameter()
                    self.state = 3874
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3875
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 3879
            self.match(PlSqlParser.RETURN)
            self.state = 3880
            self.type_spec()
            self.state = 3888
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==210 or _la==396 or _la==1233 or _la==1259 or _la==1321 or _la==1501:
                self.state = 3886
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [396]:
                    self.state = 3881
                    self.match(PlSqlParser.DETERMINISTIC)
                    pass
                elif token in [1321]:
                    self.state = 3882
                    self.match(PlSqlParser.PIPELINED)
                    pass
                elif token in [1259]:
                    self.state = 3883
                    self.parallel_enable_clause()
                    pass
                elif token in [1501]:
                    self.state = 3884
                    self.match(PlSqlParser.RESULT_CACHE)
                    pass
                elif token in [210, 1233]:
                    self.state = 3885
                    self.streaming_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 3890
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 3891
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Package_obj_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def pragma_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Pragma_declarationContext,0)


        def exception_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Exception_declarationContext,0)


        def procedure_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_specContext,0)


        def function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Function_specContext,0)


        def subtype_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Subtype_declarationContext,0)


        def cursor_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_declarationContext,0)


        def variable_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Variable_declarationContext,0)


        def type_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Type_declarationContext,0)


        def procedure_body(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_bodyContext,0)


        def function_body(self):
            return self.getTypedRuleContext(PlSqlParser.Function_bodyContext,0)


        def selection_directive(self):
            return self.getTypedRuleContext(PlSqlParser.Selection_directiveContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_package_obj_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPackage_obj_body" ):
                listener.enterPackage_obj_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPackage_obj_body" ):
                listener.exitPackage_obj_body(self)




    def package_obj_body(self):

        localctx = PlSqlParser.Package_obj_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 170, self.RULE_package_obj_body)
        try:
            self.state = 3904
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,201,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 3893
                self.pragma_declaration()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 3894
                self.exception_declaration()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 3895
                self.procedure_spec()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 3896
                self.function_spec()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 3897
                self.subtype_declaration()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 3898
                self.cursor_declaration()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 3899
                self.variable_declaration()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 3900
                self.type_declaration()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 3901
                self.procedure_body()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 3902
                self.function_body()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 3903
                self.selection_directive()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_pmem_filestoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fsn = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def PMEM(self):
            return self.getToken(PlSqlParser.PMEM, 0)

        def FILESTORE(self):
            return self.getToken(PlSqlParser.FILESTORE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def MOUNT(self):
            return self.getToken(PlSqlParser.MOUNT, 0)

        def DISMOUNT(self):
            return self.getToken(PlSqlParser.DISMOUNT, 0)

        def MOUNTPOINT(self):
            return self.getToken(PlSqlParser.MOUNTPOINT, 0)

        def file_path(self):
            return self.getTypedRuleContext(PlSqlParser.File_pathContext,0)


        def BACKINGFILE(self):
            return self.getToken(PlSqlParser.BACKINGFILE, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_pmem_filestore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_pmem_filestore" ):
                listener.enterAlter_pmem_filestore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_pmem_filestore" ):
                listener.exitAlter_pmem_filestore(self)




    def alter_pmem_filestore(self):

        localctx = PlSqlParser.Alter_pmem_filestoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 172, self.RULE_alter_pmem_filestore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3906
            self.match(PlSqlParser.ALTER)
            self.state = 3907
            self.match(PlSqlParser.PMEM)
            self.state = 3908
            self.match(PlSqlParser.FILESTORE)
            self.state = 3909
            localctx.fsn = self.id_expression()
            self.state = 3926
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1489]:
                self.state = 3910
                self.match(PlSqlParser.RESIZE)
                self.state = 3911
                self.size_clause()
                pass
            elif token in [91]:
                self.state = 3912
                self.autoextend_clause()
                pass
            elif token in [934]:
                self.state = 3913
                self.match(PlSqlParser.MOUNT)
                self.state = 3916
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==936:
                    self.state = 3914
                    self.match(PlSqlParser.MOUNTPOINT)
                    self.state = 3915
                    self.file_path()


                self.state = 3920
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==99:
                    self.state = 3918
                    self.match(PlSqlParser.BACKINGFILE)
                    self.state = 3919
                    self.filename()


                self.state = 3923
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==576:
                    self.state = 3922
                    self.match(PlSqlParser.FORCE)


                pass
            elif token in [416]:
                self.state = 3925
                self.match(PlSqlParser.DISMOUNT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_pmem_filestoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fsn = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def PMEM(self):
            return self.getToken(PlSqlParser.PMEM, 0)

        def FILESTORE(self):
            return self.getToken(PlSqlParser.FILESTORE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def CONTENTS(self):
            return self.getToken(PlSqlParser.CONTENTS, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def EXCLUDING(self):
            return self.getToken(PlSqlParser.EXCLUDING, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_pmem_filestore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_pmem_filestore" ):
                listener.enterDrop_pmem_filestore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_pmem_filestore" ):
                listener.exitDrop_pmem_filestore(self)




    def drop_pmem_filestore(self):

        localctx = PlSqlParser.Drop_pmem_filestoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 174, self.RULE_drop_pmem_filestore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3928
            self.match(PlSqlParser.DROP)
            self.state = 3929
            self.match(PlSqlParser.PMEM)
            self.state = 3930
            self.match(PlSqlParser.FILESTORE)
            self.state = 3931
            localctx.fsn = self.id_expression()
            self.state = 3940
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==503 or _la==576 or _la==663:
                self.state = 3937
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [576, 663]:
                    self.state = 3933
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==576:
                        self.state = 3932
                        self.match(PlSqlParser.FORCE)


                    self.state = 3935
                    self.match(PlSqlParser.INCLUDING)
                    pass
                elif token in [503]:
                    self.state = 3936
                    self.match(PlSqlParser.EXCLUDING)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 3939
                self.match(PlSqlParser.CONTENTS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_procedureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def procedure_name(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_procedure

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_procedure" ):
                listener.enterDrop_procedure(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_procedure" ):
                listener.exitDrop_procedure(self)




    def drop_procedure(self):

        localctx = PlSqlParser.Drop_procedureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 176, self.RULE_drop_procedure)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3942
            self.match(PlSqlParser.DROP)
            self.state = 3943
            self.match(PlSqlParser.PROCEDURE)
            self.state = 3944
            self.procedure_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_procedureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def procedure_name(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_nameContext,0)


        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def compiler_parameters_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compiler_parameters_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compiler_parameters_clauseContext,i)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_procedure

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_procedure" ):
                listener.enterAlter_procedure(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_procedure" ):
                listener.exitAlter_procedure(self)




    def alter_procedure(self):

        localctx = PlSqlParser.Alter_procedureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 178, self.RULE_alter_procedure)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3946
            self.match(PlSqlParser.ALTER)
            self.state = 3947
            self.match(PlSqlParser.PROCEDURE)
            self.state = 3948
            self.procedure_name()
            self.state = 3949
            self.match(PlSqlParser.COMPILE)
            self.state = 3951
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,209,self._ctx)
            if la_ == 1:
                self.state = 3950
                self.match(PlSqlParser.DEBUG)


            self.state = 3956
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,210,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3953
                    self.compiler_parameters_clause() 
                self.state = 3958
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,210,self._ctx)

            self.state = 3961
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 3959
                self.match(PlSqlParser.REUSE)
                self.state = 3960
                self.match(PlSqlParser.SETTINGS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def implementation_type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Implementation_type_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ParameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ParameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def PIPELINED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PIPELINED)
            else:
                return self.getToken(PlSqlParser.PIPELINED, i)

        def DETERMINISTIC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DETERMINISTIC)
            else:
                return self.getToken(PlSqlParser.DETERMINISTIC, i)

        def invoker_rights_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Invoker_rights_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,i)


        def parallel_enable_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_enable_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_enable_clauseContext,i)


        def result_cache_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Result_cache_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Result_cache_clauseContext,i)


        def streaming_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Streaming_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Streaming_clauseContext,i)


        def AGGREGATE(self):
            return self.getToken(PlSqlParser.AGGREGATE, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_function_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_body" ):
                listener.enterFunction_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_body" ):
                listener.exitFunction_body(self)




    def function_body(self):

        localctx = PlSqlParser.Function_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 180, self.RULE_function_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 3963
            self.match(PlSqlParser.FUNCTION)
            self.state = 3964
            self.identifier()
            self.state = 3976
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 3965
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 3966
                self.parameter()
                self.state = 3971
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 3967
                    self.match(PlSqlParser.COMMA)
                    self.state = 3968
                    self.parameter()
                    self.state = 3973
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 3974
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 3978
            self.match(PlSqlParser.RETURN)
            self.state = 3979
            self.type_spec()
            self.state = 3988
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,215,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 3986
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1321]:
                        self.state = 3980
                        self.match(PlSqlParser.PIPELINED)
                        pass
                    elif token in [396]:
                        self.state = 3981
                        self.match(PlSqlParser.DETERMINISTIC)
                        pass
                    elif token in [86]:
                        self.state = 3982
                        self.invoker_rights_clause()
                        pass
                    elif token in [1259]:
                        self.state = 3983
                        self.parallel_enable_clause()
                        pass
                    elif token in [1501]:
                        self.state = 3984
                        self.result_cache_clause()
                        pass
                    elif token in [210, 1233]:
                        self.state = 3985
                        self.streaming_clause()
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 3990
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,215,self._ctx)

            self.state = 4005
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [67, 740]:
                self.state = 3991
                _la = self._input.LA(1)
                if not(_la==67 or _la==740):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4000
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,218,self._ctx)
                if la_ == 1:
                    self.state = 3993
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,216,self._ctx)
                    if la_ == 1:
                        self.state = 3992
                        self.match(PlSqlParser.DECLARE)


                    self.state = 3996
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,217,self._ctx)
                    if la_ == 1:
                        self.state = 3995
                        self.seq_of_declare_specs()


                    self.state = 3998
                    self.body()
                    pass

                elif la_ == 2:
                    self.state = 3999
                    self.call_spec()
                    pass


                pass
            elif token in [35, 1321]:
                self.state = 4002
                _la = self._input.LA(1)
                if not(_la==35 or _la==1321):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4003
                self.match(PlSqlParser.USING)
                self.state = 4004
                self.implementation_type_name()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 4007
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Procedure_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ParameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ParameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def accessible_by_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Accessible_by_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Accessible_by_clauseContext,i)


        def PARALLEL_ENABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARALLEL_ENABLE)
            else:
                return self.getToken(PlSqlParser.PARALLEL_ENABLE, i)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_procedure_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProcedure_body" ):
                listener.enterProcedure_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProcedure_body" ):
                listener.exitProcedure_body(self)




    def procedure_body(self):

        localctx = PlSqlParser.Procedure_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 182, self.RULE_procedure_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4009
            self.match(PlSqlParser.PROCEDURE)
            self.state = 4010
            self.identifier()
            self.state = 4022
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4011
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4012
                self.parameter()
                self.state = 4017
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4013
                    self.match(PlSqlParser.COMMA)
                    self.state = 4014
                    self.parameter()
                    self.state = 4019
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4020
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4028
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==6 or _la==1259:
                self.state = 4026
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [6]:
                    self.state = 4024
                    self.accessible_by_clause()
                    pass
                elif token in [1259]:
                    self.state = 4025
                    self.match(PlSqlParser.PARALLEL_ENABLE)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 4030
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4031
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4041
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,226,self._ctx)
            if la_ == 1:
                self.state = 4033
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,224,self._ctx)
                if la_ == 1:
                    self.state = 4032
                    self.match(PlSqlParser.DECLARE)


                self.state = 4036
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,225,self._ctx)
                if la_ == 1:
                    self.state = 4035
                    self.seq_of_declare_specs()


                self.state = 4038
                self.body()
                pass

            elif la_ == 2:
                self.state = 4039
                self.call_spec()
                pass

            elif la_ == 3:
                self.state = 4040
                self.match(PlSqlParser.EXTERNAL)
                pass


            self.state = 4043
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_procedure_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def procedure_name(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_nameContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ParameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ParameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def invoker_rights_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,0)


        def PARALLEL_ENABLE(self):
            return self.getToken(PlSqlParser.PARALLEL_ENABLE, 0)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_procedure_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_procedure_body" ):
                listener.enterCreate_procedure_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_procedure_body" ):
                listener.exitCreate_procedure_body(self)




    def create_procedure_body(self):

        localctx = PlSqlParser.Create_procedure_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 184, self.RULE_create_procedure_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4045
            self.match(PlSqlParser.CREATE)
            self.state = 4048
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 4046
                self.match(PlSqlParser.OR)
                self.state = 4047
                self.match(PlSqlParser.REPLACE)


            self.state = 4050
            self.match(PlSqlParser.PROCEDURE)
            self.state = 4051
            self.procedure_name()
            self.state = 4063
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4052
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4053
                self.parameter()
                self.state = 4058
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4054
                    self.match(PlSqlParser.COMMA)
                    self.state = 4055
                    self.parameter()
                    self.state = 4060
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4061
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4066
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==86:
                self.state = 4065
                self.invoker_rights_clause()


            self.state = 4069
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1259:
                self.state = 4068
                self.match(PlSqlParser.PARALLEL_ENABLE)


            self.state = 4071
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4081
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,234,self._ctx)
            if la_ == 1:
                self.state = 4073
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,232,self._ctx)
                if la_ == 1:
                    self.state = 4072
                    self.match(PlSqlParser.DECLARE)


                self.state = 4076
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,233,self._ctx)
                if la_ == 1:
                    self.state = 4075
                    self.seq_of_declare_specs()


                self.state = 4078
                self.body()
                pass

            elif la_ == 2:
                self.state = 4079
                self.call_spec()
                pass

            elif la_ == 3:
                self.state = 4080
                self.match(PlSqlParser.EXTERNAL)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_resource_costContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def RESOURCE(self):
            return self.getToken(PlSqlParser.RESOURCE, 0)

        def COST(self):
            return self.getToken(PlSqlParser.COST, 0)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def CPU_PER_SESSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CPU_PER_SESSION)
            else:
                return self.getToken(PlSqlParser.CPU_PER_SESSION, i)

        def CONNECT_TIME(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONNECT_TIME)
            else:
                return self.getToken(PlSqlParser.CONNECT_TIME, i)

        def LOGICAL_READS_PER_SESSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOGICAL_READS_PER_SESSION)
            else:
                return self.getToken(PlSqlParser.LOGICAL_READS_PER_SESSION, i)

        def PRIVATE_SGA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIVATE_SGA)
            else:
                return self.getToken(PlSqlParser.PRIVATE_SGA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_resource_cost

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_resource_cost" ):
                listener.enterAlter_resource_cost(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_resource_cost" ):
                listener.exitAlter_resource_cost(self)




    def alter_resource_cost(self):

        localctx = PlSqlParser.Alter_resource_costContext(self, self._ctx, self.state)
        self.enterRule(localctx, 186, self.RULE_alter_resource_cost)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4083
            self.match(PlSqlParser.ALTER)
            self.state = 4084
            self.match(PlSqlParser.RESOURCE)
            self.state = 4085
            self.match(PlSqlParser.COST)
            self.state = 4088 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4086
                _la = self._input.LA(1)
                if not(_la==266 or _la==303 or _la==835 or _la==1381):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4087
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                self.state = 4090 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==266 or _la==303 or _la==835 or _la==1381):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_outlineContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.o = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def OUTLINE(self):
            return self.getToken(PlSqlParser.OUTLINE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_outline

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_outline" ):
                listener.enterDrop_outline(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_outline" ):
                listener.exitDrop_outline(self)




    def drop_outline(self):

        localctx = PlSqlParser.Drop_outlineContext(self, self._ctx, self.state)
        self.enterRule(localctx, 188, self.RULE_drop_outline)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4092
            self.match(PlSqlParser.DROP)
            self.state = 4093
            self.match(PlSqlParser.OUTLINE)
            self.state = 4094
            localctx.o = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_rollback_segmentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def rollback_segment_name(self):
            return self.getTypedRuleContext(PlSqlParser.Rollback_segment_nameContext,0)


        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,0)


        def SHRINK(self):
            return self.getToken(PlSqlParser.SHRINK, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_rollback_segment

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_rollback_segment" ):
                listener.enterAlter_rollback_segment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_rollback_segment" ):
                listener.exitAlter_rollback_segment(self)




    def alter_rollback_segment(self):

        localctx = PlSqlParser.Alter_rollback_segmentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 190, self.RULE_alter_rollback_segment)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4096
            self.match(PlSqlParser.ALTER)
            self.state = 4097
            self.match(PlSqlParser.ROLLBACK)
            self.state = 4098
            self.match(PlSqlParser.SEGMENT)
            self.state = 4099
            self.rollback_segment_name()
            self.state = 4108
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1190]:
                self.state = 4100
                self.match(PlSqlParser.ONLINE)
                pass
            elif token in [1177]:
                self.state = 4101
                self.match(PlSqlParser.OFFLINE)
                pass
            elif token in [1678]:
                self.state = 4102
                self.storage_clause()
                pass
            elif token in [1602]:
                self.state = 4103
                self.match(PlSqlParser.SHRINK)
                self.state = 4106
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2052:
                    self.state = 4104
                    self.match(PlSqlParser.TO)
                    self.state = 4105
                    self.size_clause()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_restore_pointContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.rp = None # Id_expressionContext
            self.pdb = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def RESTORE(self):
            return self.getToken(PlSqlParser.RESTORE, 0)

        def POINT(self):
            return self.getToken(PlSqlParser.POINT, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_restore_point

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_restore_point" ):
                listener.enterDrop_restore_point(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_restore_point" ):
                listener.exitDrop_restore_point(self)




    def drop_restore_point(self):

        localctx = PlSqlParser.Drop_restore_pointContext(self, self._ctx, self.state)
        self.enterRule(localctx, 192, self.RULE_drop_restore_point)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4110
            self.match(PlSqlParser.DROP)
            self.state = 4111
            self.match(PlSqlParser.RESTORE)
            self.state = 4112
            self.match(PlSqlParser.POINT)
            self.state = 4113
            localctx.rp = self.id_expression()
            self.state = 4118
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 4114
                self.match(PlSqlParser.FOR)
                self.state = 4115
                self.match(PlSqlParser.PLUGGABLE)
                self.state = 4116
                self.match(PlSqlParser.DATABASE)
                self.state = 4117
                localctx.pdb = self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_rollback_segmentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def rollback_segment_name(self):
            return self.getTypedRuleContext(PlSqlParser.Rollback_segment_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_rollback_segment

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_rollback_segment" ):
                listener.enterDrop_rollback_segment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_rollback_segment" ):
                listener.exitDrop_rollback_segment(self)




    def drop_rollback_segment(self):

        localctx = PlSqlParser.Drop_rollback_segmentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 194, self.RULE_drop_rollback_segment)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4120
            self.match(PlSqlParser.DROP)
            self.state = 4121
            self.match(PlSqlParser.ROLLBACK)
            self.state = 4122
            self.match(PlSqlParser.SEGMENT)
            self.state = 4123
            self.rollback_segment_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_roleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def role_name(self):
            return self.getTypedRuleContext(PlSqlParser.Role_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_role

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_role" ):
                listener.enterDrop_role(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_role" ):
                listener.exitDrop_role(self)




    def drop_role(self):

        localctx = PlSqlParser.Drop_roleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 196, self.RULE_drop_role)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4125
            self.match(PlSqlParser.DROP)
            self.state = 4126
            self.match(PlSqlParser.ROLE)
            self.state = 4127
            self.role_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_pmem_filestoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fsn = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def PMEM(self):
            return self.getToken(PlSqlParser.PMEM, 0)

        def FILESTORE(self):
            return self.getToken(PlSqlParser.FILESTORE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def pmem_filestore_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Pmem_filestore_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Pmem_filestore_optionsContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_pmem_filestore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_pmem_filestore" ):
                listener.enterCreate_pmem_filestore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_pmem_filestore" ):
                listener.exitCreate_pmem_filestore(self)




    def create_pmem_filestore(self):

        localctx = PlSqlParser.Create_pmem_filestoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 198, self.RULE_create_pmem_filestore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4129
            self.match(PlSqlParser.CREATE)
            self.state = 4130
            self.match(PlSqlParser.PMEM)
            self.state = 4131
            self.match(PlSqlParser.FILESTORE)
            self.state = 4132
            localctx.fsn = self.id_expression()
            self.state = 4134 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4133
                self.pmem_filestore_options()
                self.state = 4136 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (((((_la - 91)) & ~0x3f) == 0 and ((1 << (_la - 91)) & 562949953421569) != 0) or _la==936 or _la==1617):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pmem_filestore_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOUNTPOINT(self):
            return self.getToken(PlSqlParser.MOUNTPOINT, 0)

        def file_path(self):
            return self.getTypedRuleContext(PlSqlParser.File_pathContext,0)


        def BACKINGFILE(self):
            return self.getToken(PlSqlParser.BACKINGFILE, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def BLOCKSIZE(self):
            return self.getToken(PlSqlParser.BLOCKSIZE, 0)

        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_pmem_filestore_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPmem_filestore_options" ):
                listener.enterPmem_filestore_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPmem_filestore_options" ):
                listener.exitPmem_filestore_options(self)




    def pmem_filestore_options(self):

        localctx = PlSqlParser.Pmem_filestore_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 200, self.RULE_pmem_filestore_options)
        self._la = 0 # Token type
        try:
            self.state = 4148
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [936]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4138
                self.match(PlSqlParser.MOUNTPOINT)
                self.state = 4139
                self.file_path()
                pass
            elif token in [99]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4140
                self.match(PlSqlParser.BACKINGFILE)
                self.state = 4141
                self.filename()
                self.state = 4143
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 4142
                    self.match(PlSqlParser.REUSE)


                pass
            elif token in [140, 1617]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4145
                _la = self._input.LA(1)
                if not(_la==140 or _la==1617):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4146
                self.size_clause()
                pass
            elif token in [91]:
                self.enterOuterAlt(localctx, 4)
                self.state = 4147
                self.autoextend_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class File_pathContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_file_path

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFile_path" ):
                listener.enterFile_path(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFile_path" ):
                listener.exitFile_path(self)




    def file_path(self):

        localctx = PlSqlParser.File_pathContext(self, self._ctx, self.state)
        self.enterRule(localctx, 202, self.RULE_file_path)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4150
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_rollback_segmentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def rollback_segment_name(self):
            return self.getTypedRuleContext(PlSqlParser.Rollback_segment_nameContext,0)


        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_rollback_segment

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_rollback_segment" ):
                listener.enterCreate_rollback_segment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_rollback_segment" ):
                listener.exitCreate_rollback_segment(self)




    def create_rollback_segment(self):

        localctx = PlSqlParser.Create_rollback_segmentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 204, self.RULE_create_rollback_segment)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4152
            self.match(PlSqlParser.CREATE)
            self.state = 4154
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1398:
                self.state = 4153
                self.match(PlSqlParser.PUBLIC)


            self.state = 4156
            self.match(PlSqlParser.ROLLBACK)
            self.state = 4157
            self.match(PlSqlParser.SEGMENT)
            self.state = 4158
            self.rollback_segment_name()
            self.state = 4164
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1678 or _la==1996:
                self.state = 4162
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1996]:
                    self.state = 4159
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 4160
                    self.tablespace()
                    pass
                elif token in [1678]:
                    self.state = 4161
                    self.storage_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 4166
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_triggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def trigger_name(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_trigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_trigger" ):
                listener.enterDrop_trigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_trigger" ):
                listener.exitDrop_trigger(self)




    def drop_trigger(self):

        localctx = PlSqlParser.Drop_triggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 206, self.RULE_drop_trigger)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4167
            self.match(PlSqlParser.DROP)
            self.state = 4168
            self.match(PlSqlParser.TRIGGER)
            self.state = 4169
            self.trigger_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_triggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.alter_trigger_name = None # Trigger_nameContext
            self.rename_trigger_name = None # Trigger_nameContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def trigger_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Trigger_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Trigger_nameContext,i)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def compiler_parameters_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compiler_parameters_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compiler_parameters_clauseContext,i)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_trigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_trigger" ):
                listener.enterAlter_trigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_trigger" ):
                listener.exitAlter_trigger(self)




    def alter_trigger(self):

        localctx = PlSqlParser.Alter_triggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 208, self.RULE_alter_trigger)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4171
            self.match(PlSqlParser.ALTER)
            self.state = 4172
            self.match(PlSqlParser.TRIGGER)
            self.state = 4173
            localctx.alter_trigger_name = self.trigger_name()
            self.state = 4192
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [404, 467]:
                self.state = 4174
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [1481]:
                self.state = 4175
                self.match(PlSqlParser.RENAME)
                self.state = 4176
                self.match(PlSqlParser.TO)
                self.state = 4177
                localctx.rename_trigger_name = self.trigger_name()
                pass
            elif token in [237]:
                self.state = 4178
                self.match(PlSqlParser.COMPILE)
                self.state = 4180
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,245,self._ctx)
                if la_ == 1:
                    self.state = 4179
                    self.match(PlSqlParser.DEBUG)


                self.state = 4185
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,246,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 4182
                        self.compiler_parameters_clause() 
                    self.state = 4187
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,246,self._ctx)

                self.state = 4190
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 4188
                    self.match(PlSqlParser.REUSE)
                    self.state = 4189
                    self.match(PlSqlParser.SETTINGS)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_triggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def trigger_name(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_nameContext,0)


        def trigger_body(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_bodyContext,0)


        def simple_dml_trigger(self):
            return self.getTypedRuleContext(PlSqlParser.Simple_dml_triggerContext,0)


        def compound_dml_trigger(self):
            return self.getTypedRuleContext(PlSqlParser.Compound_dml_triggerContext,0)


        def non_dml_trigger(self):
            return self.getTypedRuleContext(PlSqlParser.Non_dml_triggerContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def trigger_follows_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_follows_clauseContext,0)


        def trigger_when_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_when_clauseContext,0)


        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_trigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_trigger" ):
                listener.enterCreate_trigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_trigger" ):
                listener.exitCreate_trigger(self)




    def create_trigger(self):

        localctx = PlSqlParser.Create_triggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 210, self.RULE_create_trigger)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4194
            self.match(PlSqlParser.CREATE)
            self.state = 4197
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 4195
                self.match(PlSqlParser.OR)
                self.state = 4196
                self.match(PlSqlParser.REPLACE)


            self.state = 4199
            self.match(PlSqlParser.TRIGGER)
            self.state = 4200
            self.trigger_name()
            self.state = 4204
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,250,self._ctx)
            if la_ == 1:
                self.state = 4201
                self.simple_dml_trigger()
                pass

            elif la_ == 2:
                self.state = 4202
                self.compound_dml_trigger()
                pass

            elif la_ == 3:
                self.state = 4203
                self.non_dml_trigger()
                pass


            self.state = 4207
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==574:
                self.state = 4206
                self.trigger_follows_clause()


            self.state = 4210
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 4209
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 4213
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2204:
                self.state = 4212
                self.trigger_when_clause()


            self.state = 4215
            self.trigger_body()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Trigger_follows_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOLLOWS(self):
            return self.getToken(PlSqlParser.FOLLOWS, 0)

        def trigger_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Trigger_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Trigger_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_trigger_follows_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrigger_follows_clause" ):
                listener.enterTrigger_follows_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrigger_follows_clause" ):
                listener.exitTrigger_follows_clause(self)




    def trigger_follows_clause(self):

        localctx = PlSqlParser.Trigger_follows_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 212, self.RULE_trigger_follows_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4217
            self.match(PlSqlParser.FOLLOWS)
            self.state = 4218
            self.trigger_name()
            self.state = 4223
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 4219
                self.match(PlSqlParser.COMMA)
                self.state = 4220
                self.trigger_name()
                self.state = 4225
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Trigger_when_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_trigger_when_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrigger_when_clause" ):
                listener.enterTrigger_when_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrigger_when_clause" ):
                listener.exitTrigger_when_clause(self)




    def trigger_when_clause(self):

        localctx = PlSqlParser.Trigger_when_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 214, self.RULE_trigger_when_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4226
            self.match(PlSqlParser.WHEN)
            self.state = 4227
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 4228
            self.condition()
            self.state = 4229
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Simple_dml_triggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def dml_event_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dml_event_clauseContext,0)


        def BEFORE(self):
            return self.getToken(PlSqlParser.BEFORE, 0)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def INSTEAD(self):
            return self.getToken(PlSqlParser.INSTEAD, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def referencing_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Referencing_clauseContext,0)


        def for_each_row(self):
            return self.getTypedRuleContext(PlSqlParser.For_each_rowContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_simple_dml_trigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimple_dml_trigger" ):
                listener.enterSimple_dml_trigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimple_dml_trigger" ):
                listener.exitSimple_dml_trigger(self)




    def simple_dml_trigger(self):

        localctx = PlSqlParser.Simple_dml_triggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 216, self.RULE_simple_dml_trigger)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4235
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [109]:
                self.state = 4231
                self.match(PlSqlParser.BEFORE)
                pass
            elif token in [33]:
                self.state = 4232
                self.match(PlSqlParser.AFTER)
                pass
            elif token in [720]:
                self.state = 4233
                self.match(PlSqlParser.INSTEAD)
                self.state = 4234
                self.match(PlSqlParser.OF)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 4237
            self.dml_event_clause()
            self.state = 4239
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1450 or _la==1451:
                self.state = 4238
                self.referencing_clause()


            self.state = 4242
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 4241
                self.for_each_row()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class For_each_rowContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def EACH(self):
            return self.getToken(PlSqlParser.EACH, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_for_each_row

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFor_each_row" ):
                listener.enterFor_each_row(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFor_each_row" ):
                listener.exitFor_each_row(self)




    def for_each_row(self):

        localctx = PlSqlParser.For_each_rowContext(self, self._ctx, self.state)
        self.enterRule(localctx, 218, self.RULE_for_each_row)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4244
            self.match(PlSqlParser.FOR)
            self.state = 4245
            self.match(PlSqlParser.EACH)
            self.state = 4246
            self.match(PlSqlParser.ROW)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Compound_dml_triggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def dml_event_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dml_event_clauseContext,0)


        def referencing_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Referencing_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_compound_dml_trigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompound_dml_trigger" ):
                listener.enterCompound_dml_trigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompound_dml_trigger" ):
                listener.exitCompound_dml_trigger(self)




    def compound_dml_trigger(self):

        localctx = PlSqlParser.Compound_dml_triggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 220, self.RULE_compound_dml_trigger)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4248
            self.match(PlSqlParser.FOR)
            self.state = 4249
            self.dml_event_clause()
            self.state = 4251
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1450 or _la==1451:
                self.state = 4250
                self.referencing_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Non_dml_triggerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def non_dml_event(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Non_dml_eventContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Non_dml_eventContext,i)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def BEFORE(self):
            return self.getToken(PlSqlParser.BEFORE, 0)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def SCHEMA(self):
            return self.getToken(PlSqlParser.SCHEMA, 0)

        def OR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OR)
            else:
                return self.getToken(PlSqlParser.OR, i)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_non_dml_trigger

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNon_dml_trigger" ):
                listener.enterNon_dml_trigger(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNon_dml_trigger" ):
                listener.exitNon_dml_trigger(self)




    def non_dml_trigger(self):

        localctx = PlSqlParser.Non_dml_triggerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 222, self.RULE_non_dml_trigger)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4253
            _la = self._input.LA(1)
            if not(_la==33 or _la==109):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4254
            self.non_dml_event()
            self.state = 4259
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1237:
                self.state = 4255
                self.match(PlSqlParser.OR)
                self.state = 4256
                self.non_dml_event()
                self.state = 4261
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4262
            self.match(PlSqlParser.ON)
            self.state = 4270
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,261,self._ctx)
            if la_ == 1:
                self.state = 4263
                self.match(PlSqlParser.DATABASE)
                pass

            elif la_ == 2:
                self.state = 4267
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,260,self._ctx)
                if la_ == 1:
                    self.state = 4264
                    self.schema_name()
                    self.state = 4265
                    self.match(PlSqlParser.PERIOD)


                self.state = 4269
                self.match(PlSqlParser.SCHEMA)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Trigger_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def compound_trigger_block(self):
            return self.getTypedRuleContext(PlSqlParser.Compound_trigger_blockContext,0)


        def CALL(self):
            return self.getToken(PlSqlParser.CALL, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def trigger_block(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_blockContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_trigger_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrigger_body" ):
                listener.enterTrigger_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrigger_body" ):
                listener.exitTrigger_body(self)




    def trigger_body(self):

        localctx = PlSqlParser.Trigger_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 224, self.RULE_trigger_body)
        try:
            self.state = 4276
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [245]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4272
                self.compound_trigger_block()
                pass
            elif token in [165]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4273
                self.match(PlSqlParser.CALL)
                self.state = 4274
                self.identifier()
                pass
            elif token in [110, 361]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4275
                self.trigger_block()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Routine_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def routine_name(self):
            return self.getTypedRuleContext(PlSqlParser.Routine_nameContext,0)


        def function_argument(self):
            return self.getTypedRuleContext(PlSqlParser.Function_argumentContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_routine_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutine_clause" ):
                listener.enterRoutine_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutine_clause" ):
                listener.exitRoutine_clause(self)




    def routine_clause(self):

        localctx = PlSqlParser.Routine_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 226, self.RULE_routine_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4278
            self.routine_name()
            self.state = 4280
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4279
                self.function_argument()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Compound_trigger_blockContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMPOUND(self):
            return self.getToken(PlSqlParser.COMPOUND, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def timing_point_section(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Timing_point_sectionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Timing_point_sectionContext,i)


        def trigger_name(self):
            return self.getTypedRuleContext(PlSqlParser.Trigger_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_compound_trigger_block

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompound_trigger_block" ):
                listener.enterCompound_trigger_block(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompound_trigger_block" ):
                listener.exitCompound_trigger_block(self)




    def compound_trigger_block(self):

        localctx = PlSqlParser.Compound_trigger_blockContext(self, self._ctx, self.state)
        self.enterRule(localctx, 228, self.RULE_compound_trigger_block)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4282
            self.match(PlSqlParser.COMPOUND)
            self.state = 4283
            self.match(PlSqlParser.TRIGGER)
            self.state = 4285
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,264,self._ctx)
            if la_ == 1:
                self.state = 4284
                self.seq_of_declare_specs()


            self.state = 4288 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4287
                self.timing_point_section()
                self.state = 4290 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==33 or _la==109):
                    break

            self.state = 4292
            self.match(PlSqlParser.END)
            self.state = 4294
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 4293
                self.trigger_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Timing_point_sectionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.bk = None # Token
            self.ak = None # Token

        def STATEMENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.STATEMENT)
            else:
                return self.getToken(PlSqlParser.STATEMENT, i)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def tps_block(self):
            return self.getTypedRuleContext(PlSqlParser.Tps_blockContext,0)


        def BEFORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BEFORE)
            else:
                return self.getToken(PlSqlParser.BEFORE, i)

        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def EACH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EACH)
            else:
                return self.getToken(PlSqlParser.EACH, i)

        def ROW(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROW)
            else:
                return self.getToken(PlSqlParser.ROW, i)

        def AFTER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AFTER)
            else:
                return self.getToken(PlSqlParser.AFTER, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_timing_point_section

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTiming_point_section" ):
                listener.enterTiming_point_section(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTiming_point_section" ):
                listener.exitTiming_point_section(self)




    def timing_point_section(self):

        localctx = PlSqlParser.Timing_point_sectionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 230, self.RULE_timing_point_section)
        try:
            self.state = 4332
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,267,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4296
                localctx.bk = self.match(PlSqlParser.BEFORE)
                self.state = 4297
                self.match(PlSqlParser.STATEMENT)
                self.state = 4298
                self.match(PlSqlParser.IS)
                self.state = 4299
                self.tps_block()
                self.state = 4300
                self.match(PlSqlParser.BEFORE)
                self.state = 4301
                self.match(PlSqlParser.STATEMENT)
                self.state = 4302
                self.match(PlSqlParser.SEMICOLON)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4304
                localctx.bk = self.match(PlSqlParser.BEFORE)
                self.state = 4305
                self.match(PlSqlParser.EACH)
                self.state = 4306
                self.match(PlSqlParser.ROW)
                self.state = 4307
                self.match(PlSqlParser.IS)
                self.state = 4308
                self.tps_block()
                self.state = 4309
                self.match(PlSqlParser.BEFORE)
                self.state = 4310
                self.match(PlSqlParser.EACH)
                self.state = 4311
                self.match(PlSqlParser.ROW)
                self.state = 4312
                self.match(PlSqlParser.SEMICOLON)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 4314
                localctx.ak = self.match(PlSqlParser.AFTER)
                self.state = 4315
                self.match(PlSqlParser.STATEMENT)
                self.state = 4316
                self.match(PlSqlParser.IS)
                self.state = 4317
                self.tps_block()
                self.state = 4318
                self.match(PlSqlParser.AFTER)
                self.state = 4319
                self.match(PlSqlParser.STATEMENT)
                self.state = 4320
                self.match(PlSqlParser.SEMICOLON)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 4322
                localctx.ak = self.match(PlSqlParser.AFTER)
                self.state = 4323
                self.match(PlSqlParser.EACH)
                self.state = 4324
                self.match(PlSqlParser.ROW)
                self.state = 4325
                self.match(PlSqlParser.IS)
                self.state = 4326
                self.tps_block()
                self.state = 4327
                self.match(PlSqlParser.AFTER)
                self.state = 4328
                self.match(PlSqlParser.EACH)
                self.state = 4329
                self.match(PlSqlParser.ROW)
                self.state = 4330
                self.match(PlSqlParser.SEMICOLON)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Non_dml_eventContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def ANALYZE(self):
            return self.getToken(PlSqlParser.ANALYZE, 0)

        def ASSOCIATE(self):
            return self.getToken(PlSqlParser.ASSOCIATE, 0)

        def STATISTICS(self):
            return self.getToken(PlSqlParser.STATISTICS, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DISASSOCIATE(self):
            return self.getToken(PlSqlParser.DISASSOCIATE, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def GRANT(self):
            return self.getToken(PlSqlParser.GRANT, 0)

        def NOAUDIT(self):
            return self.getToken(PlSqlParser.NOAUDIT, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def REVOKE(self):
            return self.getToken(PlSqlParser.REVOKE, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def DDL(self):
            return self.getToken(PlSqlParser.DDL, 0)

        def STARTUP(self):
            return self.getToken(PlSqlParser.STARTUP, 0)

        def SHUTDOWN(self):
            return self.getToken(PlSqlParser.SHUTDOWN, 0)

        def DB_ROLE_CHANGE(self):
            return self.getToken(PlSqlParser.DB_ROLE_CHANGE, 0)

        def LOGON(self):
            return self.getToken(PlSqlParser.LOGON, 0)

        def LOGOFF(self):
            return self.getToken(PlSqlParser.LOGOFF, 0)

        def SERVERERROR(self):
            return self.getToken(PlSqlParser.SERVERERROR, 0)

        def SUSPEND(self):
            return self.getToken(PlSqlParser.SUSPEND, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def SCHEMA(self):
            return self.getToken(PlSqlParser.SCHEMA, 0)

        def FOLLOWS(self):
            return self.getToken(PlSqlParser.FOLLOWS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_non_dml_event

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNon_dml_event" ):
                listener.enterNon_dml_event(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNon_dml_event" ):
                listener.exitNon_dml_event(self)




    def non_dml_event(self):

        localctx = PlSqlParser.Non_dml_eventContext(self, self._ctx, self.state)
        self.enterRule(localctx, 232, self.RULE_non_dml_event)
        try:
            self.state = 4360
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [42]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4334
                self.match(PlSqlParser.ALTER)
                pass
            elif token in [46]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4335
                self.match(PlSqlParser.ANALYZE)
                pass
            elif token in [75]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4336
                self.match(PlSqlParser.ASSOCIATE)
                self.state = 4337
                self.match(PlSqlParser.STATISTICS)
                pass
            elif token in [83]:
                self.enterOuterAlt(localctx, 4)
                self.state = 4338
                self.match(PlSqlParser.AUDIT)
                pass
            elif token in [230]:
                self.enterOuterAlt(localctx, 5)
                self.state = 4339
                self.match(PlSqlParser.COMMENT)
                pass
            elif token in [305]:
                self.enterOuterAlt(localctx, 6)
                self.state = 4340
                self.match(PlSqlParser.CREATE)
                pass
            elif token in [409]:
                self.enterOuterAlt(localctx, 7)
                self.state = 4341
                self.match(PlSqlParser.DISASSOCIATE)
                self.state = 4342
                self.match(PlSqlParser.STATISTICS)
                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 8)
                self.state = 4343
                self.match(PlSqlParser.DROP)
                pass
            elif token in [607]:
                self.enterOuterAlt(localctx, 9)
                self.state = 4344
                self.match(PlSqlParser.GRANT)
                pass
            elif token in [1004]:
                self.enterOuterAlt(localctx, 10)
                self.state = 4345
                self.match(PlSqlParser.NOAUDIT)
                pass
            elif token in [1481]:
                self.enterOuterAlt(localctx, 11)
                self.state = 4346
                self.match(PlSqlParser.RENAME)
                pass
            elif token in [1511]:
                self.enterOuterAlt(localctx, 12)
                self.state = 4347
                self.match(PlSqlParser.REVOKE)
                pass
            elif token in [2069]:
                self.enterOuterAlt(localctx, 13)
                self.state = 4348
                self.match(PlSqlParser.TRUNCATE)
                pass
            elif token in [355]:
                self.enterOuterAlt(localctx, 14)
                self.state = 4349
                self.match(PlSqlParser.DDL)
                pass
            elif token in [1655]:
                self.enterOuterAlt(localctx, 15)
                self.state = 4350
                self.match(PlSqlParser.STARTUP)
                pass
            elif token in [1603]:
                self.enterOuterAlt(localctx, 16)
                self.state = 4351
                self.match(PlSqlParser.SHUTDOWN)
                pass
            elif token in [351]:
                self.enterOuterAlt(localctx, 17)
                self.state = 4352
                self.match(PlSqlParser.DB_ROLE_CHANGE)
                pass
            elif token in [839]:
                self.enterOuterAlt(localctx, 18)
                self.state = 4353
                self.match(PlSqlParser.LOGON)
                pass
            elif token in [838]:
                self.enterOuterAlt(localctx, 19)
                self.state = 4354
                self.match(PlSqlParser.LOGOFF)
                pass
            elif token in [1581]:
                self.enterOuterAlt(localctx, 20)
                self.state = 4355
                self.match(PlSqlParser.SERVERERROR)
                pass
            elif token in [1706]:
                self.enterOuterAlt(localctx, 21)
                self.state = 4356
                self.match(PlSqlParser.SUSPEND)
                pass
            elif token in [333]:
                self.enterOuterAlt(localctx, 22)
                self.state = 4357
                self.match(PlSqlParser.DATABASE)
                pass
            elif token in [1547]:
                self.enterOuterAlt(localctx, 23)
                self.state = 4358
                self.match(PlSqlParser.SCHEMA)
                pass
            elif token in [574]:
                self.enterOuterAlt(localctx, 24)
                self.state = 4359
                self.match(PlSqlParser.FOLLOWS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dml_event_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def dml_event_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Dml_event_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Dml_event_elementContext,i)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def OR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OR)
            else:
                return self.getToken(PlSqlParser.OR, i)

        def dml_event_nested_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dml_event_nested_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dml_event_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDml_event_clause" ):
                listener.enterDml_event_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDml_event_clause" ):
                listener.exitDml_event_clause(self)




    def dml_event_clause(self):

        localctx = PlSqlParser.Dml_event_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 234, self.RULE_dml_event_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4362
            self.dml_event_element()
            self.state = 4367
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1237:
                self.state = 4363
                self.match(PlSqlParser.OR)
                self.state = 4364
                self.dml_event_element()
                self.state = 4369
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4370
            self.match(PlSqlParser.ON)
            self.state = 4372
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,270,self._ctx)
            if la_ == 1:
                self.state = 4371
                self.dml_event_nested_clause()


            self.state = 4374
            self.tableview_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dml_event_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dml_event_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDml_event_element" ):
                listener.enterDml_event_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDml_event_element" ):
                listener.exitDml_event_element(self)




    def dml_event_element(self):

        localctx = PlSqlParser.Dml_event_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 236, self.RULE_dml_event_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4376
            _la = self._input.LA(1)
            if not(_la==381 or _la==713 or _la==2114):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4379
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1180:
                self.state = 4377
                self.match(PlSqlParser.OF)
                self.state = 4378
                self.column_list()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dml_event_nested_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NESTED(self):
            return self.getToken(PlSqlParser.NESTED, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dml_event_nested_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDml_event_nested_clause" ):
                listener.enterDml_event_nested_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDml_event_nested_clause" ):
                listener.exitDml_event_nested_clause(self)




    def dml_event_nested_clause(self):

        localctx = PlSqlParser.Dml_event_nested_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 238, self.RULE_dml_event_nested_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4381
            self.match(PlSqlParser.NESTED)
            self.state = 4382
            self.match(PlSqlParser.TABLE)
            self.state = 4383
            self.tableview_name()
            self.state = 4384
            self.match(PlSqlParser.OF)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Referencing_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REFERENCING(self):
            return self.getToken(PlSqlParser.REFERENCING, 0)

        def referencing_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Referencing_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Referencing_elementContext,i)


        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_referencing_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferencing_clause" ):
                listener.enterReferencing_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferencing_clause" ):
                listener.exitReferencing_clause(self)




    def referencing_clause(self):

        localctx = PlSqlParser.Referencing_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 240, self.RULE_referencing_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4389
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1451]:
                self.state = 4386
                self.match(PlSqlParser.REFERENCING)
                self.state = 4387
                self.referencing_element()
                pass
            elif token in [1450]:
                self.state = 4388
                self.match(PlSqlParser.REFERENCES)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 4394
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==967 or _la==1184 or _la==1265:
                self.state = 4391
                self.referencing_element()
                self.state = 4396
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Referencing_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,0)


        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def OLD(self):
            return self.getToken(PlSqlParser.OLD, 0)

        def PARENT(self):
            return self.getToken(PlSqlParser.PARENT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_referencing_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferencing_element" ):
                listener.enterReferencing_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferencing_element" ):
                listener.exitReferencing_element(self)




    def referencing_element(self):

        localctx = PlSqlParser.Referencing_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 242, self.RULE_referencing_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4397
            _la = self._input.LA(1)
            if not(_la==967 or _la==1184 or _la==1265):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4398
            self.column_alias()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def VALIDATE(self):
            return self.getToken(PlSqlParser.VALIDATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_type" ):
                listener.enterDrop_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_type" ):
                listener.exitDrop_type(self)




    def drop_type(self):

        localctx = PlSqlParser.Drop_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 244, self.RULE_drop_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4400
            self.match(PlSqlParser.DROP)
            self.state = 4401
            self.match(PlSqlParser.TYPE)
            self.state = 4403
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,274,self._ctx)
            if la_ == 1:
                self.state = 4402
                self.match(PlSqlParser.BODY)


            self.state = 4405
            self.type_name()
            self.state = 4407
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==2160:
                self.state = 4406
                _la = self._input.LA(1)
                if not(_la==576 or _la==2160):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def compile_type_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Compile_type_clauseContext,0)


        def replace_type_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Replace_type_clauseContext,0)


        def alter_method_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_method_specContext,0)


        def alter_collection_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_collection_clausesContext,0)


        def modifier_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Modifier_clauseContext,0)


        def overriding_subprogram_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Overriding_subprogram_specContext,0)


        def dependent_handling_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dependent_handling_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_type" ):
                listener.enterAlter_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_type" ):
                listener.exitAlter_type(self)




    def alter_type(self):

        localctx = PlSqlParser.Alter_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 246, self.RULE_alter_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4409
            self.match(PlSqlParser.ALTER)
            self.state = 4410
            self.match(PlSqlParser.TYPE)
            self.state = 4411
            self.type_name()
            self.state = 4418
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,276,self._ctx)
            if la_ == 1:
                self.state = 4412
                self.compile_type_clause()
                pass

            elif la_ == 2:
                self.state = 4413
                self.replace_type_clause()
                pass

            elif la_ == 3:
                self.state = 4414
                self.alter_method_spec()
                pass

            elif la_ == 4:
                self.state = 4415
                self.alter_collection_clauses()
                pass

            elif la_ == 5:
                self.state = 4416
                self.modifier_clause()
                pass

            elif la_ == 6:
                self.state = 4417
                self.overriding_subprogram_spec()
                pass


            self.state = 4421
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171 or _la==736:
                self.state = 4420
                self.dependent_handling_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Compile_type_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def compiler_parameters_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compiler_parameters_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compiler_parameters_clauseContext,i)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def SPECIFICATION(self):
            return self.getToken(PlSqlParser.SPECIFICATION, 0)

        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_compile_type_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompile_type_clause" ):
                listener.enterCompile_type_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompile_type_clause" ):
                listener.exitCompile_type_clause(self)




    def compile_type_clause(self):

        localctx = PlSqlParser.Compile_type_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 248, self.RULE_compile_type_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4423
            self.match(PlSqlParser.COMPILE)
            self.state = 4425
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,278,self._ctx)
            if la_ == 1:
                self.state = 4424
                self.match(PlSqlParser.DEBUG)


            self.state = 4428
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,279,self._ctx)
            if la_ == 1:
                self.state = 4427
                _la = self._input.LA(1)
                if not(_la==141 or _la==1632):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 4433
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,280,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 4430
                    self.compiler_parameters_clause() 
                self.state = 4435
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,280,self._ctx)

            self.state = 4438
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 4436
                self.match(PlSqlParser.REUSE)
                self.state = 4437
                self.match(PlSqlParser.SETTINGS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Replace_type_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def object_member_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_member_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_member_specContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def invoker_rights_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_replace_type_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReplace_type_clause" ):
                listener.enterReplace_type_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReplace_type_clause" ):
                listener.exitReplace_type_clause(self)




    def replace_type_clause(self):

        localctx = PlSqlParser.Replace_type_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 250, self.RULE_replace_type_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4440
            self.match(PlSqlParser.REPLACE)
            self.state = 4442
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==86:
                self.state = 4441
                self.invoker_rights_clause()


            self.state = 4444
            self.match(PlSqlParser.AS)
            self.state = 4445
            self.match(PlSqlParser.OBJECT)
            self.state = 4446
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 4447
            self.object_member_spec()
            self.state = 4452
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 4448
                self.match(PlSqlParser.COMMA)
                self.state = 4449
                self.object_member_spec()
                self.state = 4454
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4455
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_method_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def alter_method_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Alter_method_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Alter_method_elementContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_method_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_method_spec" ):
                listener.enterAlter_method_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_method_spec" ):
                listener.exitAlter_method_spec(self)




    def alter_method_spec(self):

        localctx = PlSqlParser.Alter_method_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 252, self.RULE_alter_method_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4457
            self.alter_method_element()
            self.state = 4462
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 4458
                self.match(PlSqlParser.COMMA)
                self.state = 4459
                self.alter_method_element()
                self.state = 4464
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_method_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def map_order_function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Map_order_function_specContext,0)


        def subprogram_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Subprogram_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_method_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_method_element" ):
                listener.enterAlter_method_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_method_element" ):
                listener.exitAlter_method_element(self)




    def alter_method_element(self):

        localctx = PlSqlParser.Alter_method_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 254, self.RULE_alter_method_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4465
            _la = self._input.LA(1)
            if not(_la==21 or _la==438):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4468
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [857, 1233]:
                self.state = 4466
                self.map_order_function_spec()
                pass
            elif token in [882, 1661]:
                self.state = 4467
                self.subprogram_spec()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_attribute_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def attribute_definition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Attribute_definitionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Attribute_definitionContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_attribute_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_attribute_definition" ):
                listener.enterAlter_attribute_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_attribute_definition" ):
                listener.exitAlter_attribute_definition(self)




    def alter_attribute_definition(self):

        localctx = PlSqlParser.Alter_attribute_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 256, self.RULE_alter_attribute_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4470
            _la = self._input.LA(1)
            if not(_la==21 or _la==438 or _la==926):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4471
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 4484
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 4472
                self.attribute_definition()
                pass
            elif token in [2347]:
                self.state = 4473
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4474
                self.attribute_definition()
                self.state = 4479
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4475
                    self.match(PlSqlParser.COMMA)
                    self.state = 4476
                    self.attribute_definition()
                    self.state = 4481
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4482
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Attribute_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def attribute_name(self):
            return self.getTypedRuleContext(PlSqlParser.Attribute_nameContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_attribute_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAttribute_definition" ):
                listener.enterAttribute_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAttribute_definition" ):
                listener.exitAttribute_definition(self)




    def attribute_definition(self):

        localctx = PlSqlParser.Attribute_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 258, self.RULE_attribute_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4486
            self.attribute_name()
            self.state = 4488
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474976841729) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -134217793) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 4487
                self.type_spec()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_collection_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def ELEMENT(self):
            return self.getToken(PlSqlParser.ELEMENT, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_collection_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_collection_clauses" ):
                listener.enterAlter_collection_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_collection_clauses" ):
                listener.exitAlter_collection_clauses(self)




    def alter_collection_clauses(self):

        localctx = PlSqlParser.Alter_collection_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 260, self.RULE_alter_collection_clauses)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4490
            self.match(PlSqlParser.MODIFY)
            self.state = 4496
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [810]:
                self.state = 4491
                self.match(PlSqlParser.LIMIT)
                self.state = 4492
                self.expression()
                pass
            elif token in [455]:
                self.state = 4493
                self.match(PlSqlParser.ELEMENT)
                self.state = 4494
                self.match(PlSqlParser.TYPE)
                self.state = 4495
                self.type_spec()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dependent_handling_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INVALIDATE(self):
            return self.getToken(PlSqlParser.INVALIDATE, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def CONVERT(self):
            return self.getToken(PlSqlParser.CONVERT, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def SUBSTITUTABLE(self):
            return self.getToken(PlSqlParser.SUBSTITUTABLE, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def dependent_exceptions_part(self):
            return self.getTypedRuleContext(PlSqlParser.Dependent_exceptions_partContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dependent_handling_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDependent_handling_clause" ):
                listener.enterDependent_handling_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDependent_handling_clause" ):
                listener.exitDependent_handling_clause(self)




    def dependent_handling_clause(self):

        localctx = PlSqlParser.Dependent_handling_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 262, self.RULE_dependent_handling_clause)
        self._la = 0 # Token type
        try:
            self.state = 4514
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [736]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4498
                self.match(PlSqlParser.INVALIDATE)
                pass
            elif token in [171]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4499
                self.match(PlSqlParser.CASCADE)
                self.state = 4509
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [285]:
                    self.state = 4500
                    self.match(PlSqlParser.CONVERT)
                    self.state = 4501
                    self.match(PlSqlParser.TO)
                    self.state = 4502
                    self.match(PlSqlParser.SUBSTITUTABLE)
                    pass
                elif token in [663, 1138]:
                    self.state = 4504
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1138:
                        self.state = 4503
                        self.match(PlSqlParser.NOT)


                    self.state = 4506
                    self.match(PlSqlParser.INCLUDING)
                    self.state = 4507
                    self.match(PlSqlParser.TABLE)
                    self.state = 4508
                    self.match(PlSqlParser.DATA)
                    pass
                elif token in [-1, 500, 576, 2354, 2367]:
                    pass
                else:
                    pass
                self.state = 4512
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==500 or _la==576:
                    self.state = 4511
                    self.dependent_exceptions_part()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dependent_exceptions_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXCEPTIONS(self):
            return self.getToken(PlSqlParser.EXCEPTIONS, 0)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dependent_exceptions_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDependent_exceptions_part" ):
                listener.enterDependent_exceptions_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDependent_exceptions_part" ):
                listener.exitDependent_exceptions_part(self)




    def dependent_exceptions_part(self):

        localctx = PlSqlParser.Dependent_exceptions_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 264, self.RULE_dependent_exceptions_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4517
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 4516
                self.match(PlSqlParser.FORCE)


            self.state = 4519
            self.match(PlSqlParser.EXCEPTIONS)
            self.state = 4520
            self.match(PlSqlParser.INTO)
            self.state = 4521
            self.tableview_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def type_definition(self):
            return self.getTypedRuleContext(PlSqlParser.Type_definitionContext,0)


        def type_body(self):
            return self.getTypedRuleContext(PlSqlParser.Type_bodyContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_type" ):
                listener.enterCreate_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_type" ):
                listener.exitCreate_type(self)




    def create_type(self):

        localctx = PlSqlParser.Create_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 266, self.RULE_create_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4523
            self.match(PlSqlParser.CREATE)
            self.state = 4526
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 4524
                self.match(PlSqlParser.OR)
                self.state = 4525
                self.match(PlSqlParser.REPLACE)


            self.state = 4528
            self.match(PlSqlParser.TYPE)
            self.state = 4531
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,296,self._ctx)
            if la_ == 1:
                self.state = 4529
                self.type_definition()
                pass

            elif la_ == 2:
                self.state = 4530
                self.type_body()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def OID(self):
            return self.getToken(PlSqlParser.OID, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def object_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Object_type_defContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_type_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_definition" ):
                listener.enterType_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_definition" ):
                listener.exitType_definition(self)




    def type_definition(self):

        localctx = PlSqlParser.Type_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 268, self.RULE_type_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4533
            self.type_name()
            self.state = 4536
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1182:
                self.state = 4534
                self.match(PlSqlParser.OID)
                self.state = 4535
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 4539
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 4538
                self.match(PlSqlParser.FORCE)


            self.state = 4542
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67 or _la==86 or _la==740 or _la==2086:
                self.state = 4541
                self.object_type_def()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_type_defContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def object_as_part(self):
            return self.getTypedRuleContext(PlSqlParser.Object_as_partContext,0)


        def object_under_part(self):
            return self.getTypedRuleContext(PlSqlParser.Object_under_partContext,0)


        def invoker_rights_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,0)


        def sqlj_object_type(self):
            return self.getTypedRuleContext(PlSqlParser.Sqlj_object_typeContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def object_member_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_member_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_member_specContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def modifier_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Modifier_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Modifier_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_object_type_def

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_type_def" ):
                listener.enterObject_type_def(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_type_def" ):
                listener.exitObject_type_def(self)




    def object_type_def(self):

        localctx = PlSqlParser.Object_type_defContext(self, self._ctx, self.state)
        self.enterRule(localctx, 270, self.RULE_object_type_def)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4545
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==86:
                self.state = 4544
                self.invoker_rights_clause()


            self.state = 4549
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [67, 740]:
                self.state = 4547
                self.object_as_part()
                pass
            elif token in [2086]:
                self.state = 4548
                self.object_under_part()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 4552
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==523:
                self.state = 4551
                self.sqlj_object_type()


            self.state = 4565
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4554
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4555
                self.object_member_spec()
                self.state = 4560
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4556
                    self.match(PlSqlParser.COMMA)
                    self.state = 4557
                    self.object_member_spec()
                    self.state = 4562
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4563
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4570
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==556 or _la==718 or _la==1138 or _la==1252:
                self.state = 4567
                self.modifier_clause()
                self.state = 4572
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_as_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def varray_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Varray_type_defContext,0)


        def nested_table_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Nested_table_type_defContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_as_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_as_part" ):
                listener.enterObject_as_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_as_part" ):
                listener.exitObject_as_part(self)




    def object_as_part(self):

        localctx = PlSqlParser.Object_as_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 272, self.RULE_object_as_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4573
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4577
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1172]:
                self.state = 4574
                self.match(PlSqlParser.OBJECT)
                pass
            elif token in [66, 2171, 2173]:
                self.state = 4575
                self.varray_type_def()
                pass
            elif token in [1999]:
                self.state = 4576
                self.nested_table_type_def()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_under_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNDER(self):
            return self.getToken(PlSqlParser.UNDER, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_under_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_under_part" ):
                listener.enterObject_under_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_under_part" ):
                listener.exitObject_under_part(self)




    def object_under_part(self):

        localctx = PlSqlParser.Object_under_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 274, self.RULE_object_under_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4579
            self.match(PlSqlParser.UNDER)
            self.state = 4580
            self.type_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Nested_table_type_defContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_nested_table_type_def

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNested_table_type_def" ):
                listener.enterNested_table_type_def(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNested_table_type_def" ):
                listener.exitNested_table_type_def(self)




    def nested_table_type_def(self):

        localctx = PlSqlParser.Nested_table_type_defContext(self, self._ctx, self.state)
        self.enterRule(localctx, 276, self.RULE_nested_table_type_def)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4582
            self.match(PlSqlParser.TABLE)
            self.state = 4583
            self.match(PlSqlParser.OF)
            self.state = 4584
            self.type_spec()
            self.state = 4587
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,307,self._ctx)
            if la_ == 1:
                self.state = 4585
                self.match(PlSqlParser.NOT)
                self.state = 4586
                self.match(PlSqlParser.NULL_)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sqlj_object_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def LANGUAGE(self):
            return self.getToken(PlSqlParser.LANGUAGE, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def SQLDATA(self):
            return self.getToken(PlSqlParser.SQLDATA, 0)

        def CUSTOMDATUM(self):
            return self.getToken(PlSqlParser.CUSTOMDATUM, 0)

        def ORADATA(self):
            return self.getToken(PlSqlParser.ORADATA, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sqlj_object_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSqlj_object_type" ):
                listener.enterSqlj_object_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSqlj_object_type" ):
                listener.exitSqlj_object_type(self)




    def sqlj_object_type(self):

        localctx = PlSqlParser.Sqlj_object_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 278, self.RULE_sqlj_object_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4589
            self.match(PlSqlParser.EXTERNAL)
            self.state = 4590
            self.match(PlSqlParser.NAME)
            self.state = 4591
            self.expression()
            self.state = 4592
            self.match(PlSqlParser.LANGUAGE)
            self.state = 4593
            self.match(PlSqlParser.JAVA)
            self.state = 4594
            self.match(PlSqlParser.USING)
            self.state = 4595
            _la = self._input.LA(1)
            if not(_la==329 or _la==1212 or _la==1636):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def type_body_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_body_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_body_elementsContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_type_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_body" ):
                listener.enterType_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_body" ):
                listener.exitType_body(self)




    def type_body(self):

        localctx = PlSqlParser.Type_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 280, self.RULE_type_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4597
            self.match(PlSqlParser.BODY)
            self.state = 4598
            self.type_name()
            self.state = 4599
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4601 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4600
                self.type_body_elements()
                self.state = 4603 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==857 or _la==882 or _la==1233 or _la==1252 or _la==1661):
                    break

            self.state = 4605
            self.match(PlSqlParser.END)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_body_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def map_order_func_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Map_order_func_declarationContext,0)


        def subprog_decl_in_type(self):
            return self.getTypedRuleContext(PlSqlParser.Subprog_decl_in_typeContext,0)


        def overriding_subprogram_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Overriding_subprogram_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_type_body_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_body_elements" ):
                listener.enterType_body_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_body_elements" ):
                listener.exitType_body_elements(self)




    def type_body_elements(self):

        localctx = PlSqlParser.Type_body_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 282, self.RULE_type_body_elements)
        try:
            self.state = 4610
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [857, 1233]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4607
                self.map_order_func_declaration()
                pass
            elif token in [882, 1661]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4608
                self.subprog_decl_in_type()
                pass
            elif token in [1252]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4609
                self.overriding_subprogram_spec()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Map_order_func_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def func_decl_in_type(self):
            return self.getTypedRuleContext(PlSqlParser.Func_decl_in_typeContext,0)


        def MAP(self):
            return self.getToken(PlSqlParser.MAP, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_map_order_func_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMap_order_func_declaration" ):
                listener.enterMap_order_func_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMap_order_func_declaration" ):
                listener.exitMap_order_func_declaration(self)




    def map_order_func_declaration(self):

        localctx = PlSqlParser.Map_order_func_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 284, self.RULE_map_order_func_declaration)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4612
            _la = self._input.LA(1)
            if not(_la==857 or _la==1233):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4613
            self.match(PlSqlParser.MEMBER)
            self.state = 4614
            self.func_decl_in_type()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subprog_decl_in_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def STATIC(self):
            return self.getToken(PlSqlParser.STATIC, 0)

        def proc_decl_in_type(self):
            return self.getTypedRuleContext(PlSqlParser.Proc_decl_in_typeContext,0)


        def func_decl_in_type(self):
            return self.getTypedRuleContext(PlSqlParser.Func_decl_in_typeContext,0)


        def constructor_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Constructor_declarationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subprog_decl_in_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubprog_decl_in_type" ):
                listener.enterSubprog_decl_in_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubprog_decl_in_type" ):
                listener.exitSubprog_decl_in_type(self)




    def subprog_decl_in_type(self):

        localctx = PlSqlParser.Subprog_decl_in_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 286, self.RULE_subprog_decl_in_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4616
            _la = self._input.LA(1)
            if not(_la==882 or _la==1661):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4620
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1386]:
                self.state = 4617
                self.proc_decl_in_type()
                pass
            elif token in [592]:
                self.state = 4618
                self.func_decl_in_type()
                pass
            elif token in [273, 556, 718]:
                self.state = 4619
                self.constructor_declaration()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Proc_decl_in_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def procedure_name(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_proc_decl_in_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProc_decl_in_type" ):
                listener.enterProc_decl_in_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProc_decl_in_type" ):
                listener.exitProc_decl_in_type(self)




    def proc_decl_in_type(self):

        localctx = PlSqlParser.Proc_decl_in_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 288, self.RULE_proc_decl_in_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4622
            self.match(PlSqlParser.PROCEDURE)
            self.state = 4623
            self.procedure_name()
            self.state = 4624
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 4625
            self.type_elements_parameter()
            self.state = 4630
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 4626
                self.match(PlSqlParser.COMMA)
                self.state = 4627
                self.type_elements_parameter()
                self.state = 4632
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4633
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 4634
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4645
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,314,self._ctx)
            if la_ == 1:
                self.state = 4635
                self.call_spec()
                pass

            elif la_ == 2:
                self.state = 4637
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,312,self._ctx)
                if la_ == 1:
                    self.state = 4636
                    self.match(PlSqlParser.DECLARE)


                self.state = 4640
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,313,self._ctx)
                if la_ == 1:
                    self.state = 4639
                    self.seq_of_declare_specs()


                self.state = 4642
                self.body()
                self.state = 4643
                self.match(PlSqlParser.SEMICOLON)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Func_decl_in_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_func_decl_in_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunc_decl_in_type" ):
                listener.enterFunc_decl_in_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunc_decl_in_type" ):
                listener.exitFunc_decl_in_type(self)




    def func_decl_in_type(self):

        localctx = PlSqlParser.Func_decl_in_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 290, self.RULE_func_decl_in_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4647
            self.match(PlSqlParser.FUNCTION)
            self.state = 4648
            self.function_name()
            self.state = 4660
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4649
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4650
                self.type_elements_parameter()
                self.state = 4655
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4651
                    self.match(PlSqlParser.COMMA)
                    self.state = 4652
                    self.type_elements_parameter()
                    self.state = 4657
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4658
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4662
            self.match(PlSqlParser.RETURN)
            self.state = 4663
            self.type_spec()
            self.state = 4664
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4675
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,319,self._ctx)
            if la_ == 1:
                self.state = 4665
                self.call_spec()
                pass

            elif la_ == 2:
                self.state = 4667
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,317,self._ctx)
                if la_ == 1:
                    self.state = 4666
                    self.match(PlSqlParser.DECLARE)


                self.state = 4670
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,318,self._ctx)
                if la_ == 1:
                    self.state = 4669
                    self.seq_of_declare_specs()


                self.state = 4672
                self.body()
                self.state = 4673
                self.match(PlSqlParser.SEMICOLON)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Constructor_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONSTRUCTOR(self):
            return self.getToken(PlSqlParser.CONSTRUCTOR, 0)

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def type_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_specContext,i)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def SELF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SELF)
            else:
                return self.getToken(PlSqlParser.SELF, i)

        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def RESULT(self):
            return self.getToken(PlSqlParser.RESULT, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def FINAL(self):
            return self.getToken(PlSqlParser.FINAL, 0)

        def INSTANTIABLE(self):
            return self.getToken(PlSqlParser.INSTANTIABLE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def OUT(self):
            return self.getToken(PlSqlParser.OUT, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_constructor_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstructor_declaration" ):
                listener.enterConstructor_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstructor_declaration" ):
                listener.exitConstructor_declaration(self)




    def constructor_declaration(self):

        localctx = PlSqlParser.Constructor_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 292, self.RULE_constructor_declaration)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4678
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==556:
                self.state = 4677
                self.match(PlSqlParser.FINAL)


            self.state = 4681
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==718:
                self.state = 4680
                self.match(PlSqlParser.INSTANTIABLE)


            self.state = 4683
            self.match(PlSqlParser.CONSTRUCTOR)
            self.state = 4684
            self.match(PlSqlParser.FUNCTION)
            self.state = 4685
            self.type_spec()
            self.state = 4703
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4686
                self.match(PlSqlParser.LEFT_PAREN)

                self.state = 4687
                self.match(PlSqlParser.SELF)
                self.state = 4688
                self.match(PlSqlParser.IN)
                self.state = 4689
                self.match(PlSqlParser.OUT)
                self.state = 4690
                self.type_spec()
                self.state = 4691
                self.match(PlSqlParser.COMMA)
                self.state = 4693
                self.type_elements_parameter()
                self.state = 4698
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4694
                    self.match(PlSqlParser.COMMA)
                    self.state = 4695
                    self.type_elements_parameter()
                    self.state = 4700
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4701
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4705
            self.match(PlSqlParser.RETURN)
            self.state = 4706
            self.match(PlSqlParser.SELF)
            self.state = 4707
            self.match(PlSqlParser.AS)
            self.state = 4708
            self.match(PlSqlParser.RESULT)
            self.state = 4709
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4720
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,326,self._ctx)
            if la_ == 1:
                self.state = 4710
                self.call_spec()
                pass

            elif la_ == 2:
                self.state = 4712
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,324,self._ctx)
                if la_ == 1:
                    self.state = 4711
                    self.match(PlSqlParser.DECLARE)


                self.state = 4715
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,325,self._ctx)
                if la_ == 1:
                    self.state = 4714
                    self.seq_of_declare_specs()


                self.state = 4717
                self.body()
                self.state = 4718
                self.match(PlSqlParser.SEMICOLON)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modifier_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INSTANTIABLE(self):
            return self.getToken(PlSqlParser.INSTANTIABLE, 0)

        def FINAL(self):
            return self.getToken(PlSqlParser.FINAL, 0)

        def OVERRIDING(self):
            return self.getToken(PlSqlParser.OVERRIDING, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modifier_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModifier_clause" ):
                listener.enterModifier_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModifier_clause" ):
                listener.exitModifier_clause(self)




    def modifier_clause(self):

        localctx = PlSqlParser.Modifier_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 294, self.RULE_modifier_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4723
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 4722
                self.match(PlSqlParser.NOT)


            self.state = 4725
            _la = self._input.LA(1)
            if not(_la==556 or _la==718 or _la==1252):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_member_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def sqlj_object_type_attr(self):
            return self.getTypedRuleContext(PlSqlParser.Sqlj_object_type_attrContext,0)


        def element_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Element_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_member_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_member_spec" ):
                listener.enterObject_member_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_member_spec" ):
                listener.exitObject_member_spec(self)




    def object_member_spec(self):

        localctx = PlSqlParser.Object_member_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 296, self.RULE_object_member_spec)
        self._la = 0 # Token type
        try:
            self.state = 4733
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,329,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4727
                self.identifier()
                self.state = 4728
                self.type_spec()
                self.state = 4730
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==523:
                    self.state = 4729
                    self.sqlj_object_type_attr()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4732
                self.element_spec()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sqlj_object_type_attrContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_sqlj_object_type_attr

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSqlj_object_type_attr" ):
                listener.enterSqlj_object_type_attr(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSqlj_object_type_attr" ):
                listener.exitSqlj_object_type_attr(self)




    def sqlj_object_type_attr(self):

        localctx = PlSqlParser.Sqlj_object_type_attrContext(self, self._ctx, self.state)
        self.enterRule(localctx, 298, self.RULE_sqlj_object_type_attr)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4735
            self.match(PlSqlParser.EXTERNAL)
            self.state = 4736
            self.match(PlSqlParser.NAME)
            self.state = 4737
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Element_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def modifier_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Modifier_clauseContext,0)


        def element_spec_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Element_spec_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Element_spec_optionsContext,i)


        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def pragma_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pragma_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_element_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterElement_spec" ):
                listener.enterElement_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitElement_spec" ):
                listener.exitElement_spec(self)




    def element_spec(self):

        localctx = PlSqlParser.Element_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 300, self.RULE_element_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4740
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,330,self._ctx)
            if la_ == 1:
                self.state = 4739
                self.modifier_clause()


            self.state = 4743 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4742
                self.element_spec_options()
                self.state = 4745 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==273 or _la==556 or _la==718 or _la==857 or _la==882 or _la==1233 or _la==1661):
                    break

            self.state = 4749
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,332,self._ctx)
            if la_ == 1:
                self.state = 4747
                self.match(PlSqlParser.COMMA)
                self.state = 4748
                self.pragma_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Element_spec_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def subprogram_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Subprogram_specContext,0)


        def constructor_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Constructor_specContext,0)


        def map_order_function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Map_order_function_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_element_spec_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterElement_spec_options" ):
                listener.enterElement_spec_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitElement_spec_options" ):
                listener.exitElement_spec_options(self)




    def element_spec_options(self):

        localctx = PlSqlParser.Element_spec_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 302, self.RULE_element_spec_options)
        try:
            self.state = 4754
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [882, 1661]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4751
                self.subprogram_spec()
                pass
            elif token in [273, 556, 718]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4752
                self.constructor_spec()
                pass
            elif token in [857, 1233]:
                self.enterOuterAlt(localctx, 3)
                self.state = 4753
                self.map_order_function_spec()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subprogram_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def STATIC(self):
            return self.getToken(PlSqlParser.STATIC, 0)

        def type_procedure_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_procedure_specContext,0)


        def type_function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_function_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subprogram_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubprogram_spec" ):
                listener.enterSubprogram_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubprogram_spec" ):
                listener.exitSubprogram_spec(self)




    def subprogram_spec(self):

        localctx = PlSqlParser.Subprogram_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 304, self.RULE_subprogram_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4756
            _la = self._input.LA(1)
            if not(_la==882 or _la==1661):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4759
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1386]:
                self.state = 4757
                self.type_procedure_spec()
                pass
            elif token in [592]:
                self.state = 4758
                self.type_function_spec()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Overriding_subprogram_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OVERRIDING(self):
            return self.getToken(PlSqlParser.OVERRIDING, 0)

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def overriding_function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Overriding_function_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_overriding_subprogram_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOverriding_subprogram_spec" ):
                listener.enterOverriding_subprogram_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOverriding_subprogram_spec" ):
                listener.exitOverriding_subprogram_spec(self)




    def overriding_subprogram_spec(self):

        localctx = PlSqlParser.Overriding_subprogram_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 306, self.RULE_overriding_subprogram_spec)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4761
            self.match(PlSqlParser.OVERRIDING)
            self.state = 4762
            self.match(PlSqlParser.MEMBER)
            self.state = 4763
            self.overriding_function_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Overriding_function_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def SELF(self):
            return self.getToken(PlSqlParser.SELF, 0)

        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def RESULT(self):
            return self.getToken(PlSqlParser.RESULT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def PIPELINED(self):
            return self.getToken(PlSqlParser.PIPELINED, 0)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_overriding_function_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOverriding_function_spec" ):
                listener.enterOverriding_function_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOverriding_function_spec" ):
                listener.exitOverriding_function_spec(self)




    def overriding_function_spec(self):

        localctx = PlSqlParser.Overriding_function_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 308, self.RULE_overriding_function_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4765
            self.match(PlSqlParser.FUNCTION)
            self.state = 4766
            self.function_name()
            self.state = 4778
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4767
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4768
                self.type_elements_parameter()
                self.state = 4773
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4769
                    self.match(PlSqlParser.COMMA)
                    self.state = 4770
                    self.type_elements_parameter()
                    self.state = 4775
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4776
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4780
            self.match(PlSqlParser.RETURN)
            self.state = 4785
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,337,self._ctx)
            if la_ == 1:
                self.state = 4781
                self.type_spec()
                pass

            elif la_ == 2:
                self.state = 4782
                self.match(PlSqlParser.SELF)
                self.state = 4783
                self.match(PlSqlParser.AS)
                self.state = 4784
                self.match(PlSqlParser.RESULT)
                pass


            self.state = 4798
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67 or _la==740 or _la==1321:
                self.state = 4788
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1321:
                    self.state = 4787
                    self.match(PlSqlParser.PIPELINED)


                self.state = 4790
                _la = self._input.LA(1)
                if not(_la==67 or _la==740):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()

                self.state = 4792
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,339,self._ctx)
                if la_ == 1:
                    self.state = 4791
                    self.match(PlSqlParser.DECLARE)


                self.state = 4795
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,340,self._ctx)
                if la_ == 1:
                    self.state = 4794
                    self.seq_of_declare_specs()


                self.state = 4797
                self.body()


            self.state = 4801
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,342,self._ctx)
            if la_ == 1:
                self.state = 4800
                self.match(PlSqlParser.SEMICOLON)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_procedure_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def procedure_name(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_type_procedure_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_procedure_spec" ):
                listener.enterType_procedure_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_procedure_spec" ):
                listener.exitType_procedure_spec(self)




    def type_procedure_spec(self):

        localctx = PlSqlParser.Type_procedure_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 310, self.RULE_type_procedure_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4803
            self.match(PlSqlParser.PROCEDURE)
            self.state = 4804
            self.procedure_name()
            self.state = 4805
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 4806
            self.type_elements_parameter()
            self.state = 4811
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 4807
                self.match(PlSqlParser.COMMA)
                self.state = 4808
                self.type_elements_parameter()
                self.state = 4813
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4814
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 4817
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67 or _la==740:
                self.state = 4815
                _la = self._input.LA(1)
                if not(_la==67 or _la==740):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4816
                self.call_spec()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_function_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def SELF(self):
            return self.getToken(PlSqlParser.SELF, 0)

        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def RESULT(self):
            return self.getToken(PlSqlParser.RESULT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def VARIABLE(self):
            return self.getToken(PlSqlParser.VARIABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_type_function_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_function_spec" ):
                listener.enterType_function_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_function_spec" ):
                listener.exitType_function_spec(self)




    def type_function_spec(self):

        localctx = PlSqlParser.Type_function_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 312, self.RULE_type_function_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4819
            self.match(PlSqlParser.FUNCTION)
            self.state = 4820
            self.function_name()
            self.state = 4832
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4821
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 4822
                self.type_elements_parameter()
                self.state = 4827
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4823
                    self.match(PlSqlParser.COMMA)
                    self.state = 4824
                    self.type_elements_parameter()
                    self.state = 4829
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4830
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4834
            self.match(PlSqlParser.RETURN)
            self.state = 4839
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,347,self._ctx)
            if la_ == 1:
                self.state = 4835
                self.type_spec()
                pass

            elif la_ == 2:
                self.state = 4836
                self.match(PlSqlParser.SELF)
                self.state = 4837
                self.match(PlSqlParser.AS)
                self.state = 4838
                self.match(PlSqlParser.RESULT)
                pass


            self.state = 4849
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [67, 740]:
                self.state = 4841
                _la = self._input.LA(1)
                if not(_la==67 or _la==740):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4842
                self.call_spec()
                pass
            elif token in [523]:
                self.state = 4843
                self.match(PlSqlParser.EXTERNAL)
                self.state = 4845
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2168:
                    self.state = 4844
                    self.match(PlSqlParser.VARIABLE)


                self.state = 4847
                self.match(PlSqlParser.NAME)
                self.state = 4848
                self.expression()
                pass
            elif token in [-1, 171, 273, 556, 718, 736, 857, 882, 1233, 1661, 2348, 2353, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Constructor_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONSTRUCTOR(self):
            return self.getToken(PlSqlParser.CONSTRUCTOR, 0)

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def type_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_specContext,i)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def SELF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SELF)
            else:
                return self.getToken(PlSqlParser.SELF, i)

        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def RESULT(self):
            return self.getToken(PlSqlParser.RESULT, 0)

        def FINAL(self):
            return self.getToken(PlSqlParser.FINAL, 0)

        def INSTANTIABLE(self):
            return self.getToken(PlSqlParser.INSTANTIABLE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_elements_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_elements_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_elements_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def call_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Call_specContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def OUT(self):
            return self.getToken(PlSqlParser.OUT, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_constructor_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstructor_spec" ):
                listener.enterConstructor_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstructor_spec" ):
                listener.exitConstructor_spec(self)




    def constructor_spec(self):

        localctx = PlSqlParser.Constructor_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 314, self.RULE_constructor_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4852
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==556:
                self.state = 4851
                self.match(PlSqlParser.FINAL)


            self.state = 4855
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==718:
                self.state = 4854
                self.match(PlSqlParser.INSTANTIABLE)


            self.state = 4857
            self.match(PlSqlParser.CONSTRUCTOR)
            self.state = 4858
            self.match(PlSqlParser.FUNCTION)
            self.state = 4859
            self.type_spec()
            self.state = 4877
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 4860
                self.match(PlSqlParser.LEFT_PAREN)

                self.state = 4861
                self.match(PlSqlParser.SELF)
                self.state = 4862
                self.match(PlSqlParser.IN)
                self.state = 4863
                self.match(PlSqlParser.OUT)
                self.state = 4864
                self.type_spec()
                self.state = 4865
                self.match(PlSqlParser.COMMA)
                self.state = 4867
                self.type_elements_parameter()
                self.state = 4872
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 4868
                    self.match(PlSqlParser.COMMA)
                    self.state = 4869
                    self.type_elements_parameter()
                    self.state = 4874
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 4875
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 4879
            self.match(PlSqlParser.RETURN)
            self.state = 4880
            self.match(PlSqlParser.SELF)
            self.state = 4881
            self.match(PlSqlParser.AS)
            self.state = 4882
            self.match(PlSqlParser.RESULT)
            self.state = 4885
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67 or _la==740:
                self.state = 4883
                _la = self._input.LA(1)
                if not(_la==67 or _la==740):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4884
                self.call_spec()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Map_order_function_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def type_function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_function_specContext,0)


        def MAP(self):
            return self.getToken(PlSqlParser.MAP, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_map_order_function_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMap_order_function_spec" ):
                listener.enterMap_order_function_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMap_order_function_spec" ):
                listener.exitMap_order_function_spec(self)




    def map_order_function_spec(self):

        localctx = PlSqlParser.Map_order_function_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 316, self.RULE_map_order_function_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4887
            _la = self._input.LA(1)
            if not(_la==857 or _la==1233):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 4888
            self.match(PlSqlParser.MEMBER)
            self.state = 4889
            self.type_function_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pragma_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PRAGMA(self):
            return self.getToken(PlSqlParser.PRAGMA, 0)

        def RESTRICT_REFERENCES(self):
            return self.getToken(PlSqlParser.RESTRICT_REFERENCES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def pragma_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Pragma_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Pragma_elementsContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pragma_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPragma_clause" ):
                listener.enterPragma_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPragma_clause" ):
                listener.exitPragma_clause(self)




    def pragma_clause(self):

        localctx = PlSqlParser.Pragma_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 318, self.RULE_pragma_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4891
            self.match(PlSqlParser.PRAGMA)
            self.state = 4892
            self.match(PlSqlParser.RESTRICT_REFERENCES)
            self.state = 4893
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 4894
            self.pragma_elements()
            self.state = 4899
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 4895
                self.match(PlSqlParser.COMMA)
                self.state = 4896
                self.pragma_elements()
                self.state = 4901
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 4902
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pragma_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pragma_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPragma_elements" ):
                listener.enterPragma_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPragma_elements" ):
                listener.exitPragma_elements(self)




    def pragma_elements(self):

        localctx = PlSqlParser.Pragma_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 320, self.RULE_pragma_elements)
        try:
            self.state = 4906
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4904
                self.identifier()
                pass
            elif token in [368]:
                self.enterOuterAlt(localctx, 2)
                self.state = 4905
                self.match(PlSqlParser.DEFAULT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_elements_parameterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def parameter_name(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_type_elements_parameter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_elements_parameter" ):
                listener.enterType_elements_parameter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_elements_parameter" ):
                listener.exitType_elements_parameter(self)




    def type_elements_parameter(self):

        localctx = PlSqlParser.Type_elements_parameterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 322, self.RULE_type_elements_parameter)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4908
            self.parameter_name()
            self.state = 4909
            self.type_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_sequenceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def sequence_name(self):
            return self.getTypedRuleContext(PlSqlParser.Sequence_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_sequence

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_sequence" ):
                listener.enterDrop_sequence(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_sequence" ):
                listener.exitDrop_sequence(self)




    def drop_sequence(self):

        localctx = PlSqlParser.Drop_sequenceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 324, self.RULE_drop_sequence)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4911
            self.match(PlSqlParser.DROP)
            self.state = 4912
            self.match(PlSqlParser.SEQUENCE)
            self.state = 4913
            self.sequence_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_sequenceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def sequence_name(self):
            return self.getTypedRuleContext(PlSqlParser.Sequence_nameContext,0)


        def sequence_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sequence_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sequence_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_sequence

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_sequence" ):
                listener.enterAlter_sequence(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_sequence" ):
                listener.exitAlter_sequence(self)




    def alter_sequence(self):

        localctx = PlSqlParser.Alter_sequenceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 326, self.RULE_alter_sequence)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4915
            self.match(PlSqlParser.ALTER)
            self.state = 4916
            self.match(PlSqlParser.SEQUENCE)
            self.state = 4917
            self.sequence_name()
            self.state = 4919 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 4918
                self.sequence_spec()
                self.state = 4921 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==158 or _la==331 or _la==665 or _la==878 or _la==906 or ((((_la - 1010)) & ~0x3f) == 0 and ((1 << (_la - 1010)) & 5066549580922881) != 0) or _la==1077 or _la==1233):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_sessionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def ADVISE(self):
            return self.getToken(PlSqlParser.ADVISE, 0)

        def CLOSE(self):
            return self.getToken(PlSqlParser.CLOSE, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def parameter_name(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,0)


        def enable_or_disable(self):
            return self.getTypedRuleContext(PlSqlParser.Enable_or_disableContext,0)


        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def GUARD(self):
            return self.getToken(PlSqlParser.GUARD, 0)

        def PARALLEL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARALLEL)
            else:
                return self.getToken(PlSqlParser.PARALLEL, i)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def alter_session_set_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_session_set_clauseContext,0)


        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def NOTHING(self):
            return self.getToken(PlSqlParser.NOTHING, 0)

        def DML(self):
            return self.getToken(PlSqlParser.DML, 0)

        def DDL(self):
            return self.getToken(PlSqlParser.DDL, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def literal(self):
            return self.getTypedRuleContext(PlSqlParser.LiteralContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_session

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_session" ):
                listener.enterAlter_session(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_session" ):
                listener.exitAlter_session(self)




    def alter_session(self):

        localctx = PlSqlParser.Alter_sessionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 328, self.RULE_alter_session)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4923
            self.match(PlSqlParser.ALTER)
            self.state = 4924
            self.match(PlSqlParser.SESSION)
            self.state = 4954
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,361,self._ctx)
            if la_ == 1:
                self.state = 4925
                self.match(PlSqlParser.ADVISE)
                self.state = 4926
                _la = self._input.LA(1)
                if not(_la==231 or _la==1136 or _la==1518):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 2:
                self.state = 4927
                self.match(PlSqlParser.CLOSE)
                self.state = 4928
                self.match(PlSqlParser.DATABASE)
                self.state = 4929
                self.match(PlSqlParser.LINK)
                self.state = 4930
                self.parameter_name()
                pass

            elif la_ == 3:
                self.state = 4931
                self.enable_or_disable()
                self.state = 4932
                self.match(PlSqlParser.COMMIT)
                self.state = 4933
                self.match(PlSqlParser.IN)
                self.state = 4934
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 4:
                self.state = 4936
                self.enable_or_disable()
                self.state = 4937
                self.match(PlSqlParser.GUARD)
                pass

            elif la_ == 5:
                self.state = 4941
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [404, 467]:
                    self.state = 4939
                    self.enable_or_disable()
                    pass
                elif token in [576]:
                    self.state = 4940
                    self.match(PlSqlParser.FORCE)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 4943
                self.match(PlSqlParser.PARALLEL)
                self.state = 4944
                _la = self._input.LA(1)
                if not(_la==355 or _la==421 or _la==1409):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 4950
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1261:
                    self.state = 4945
                    self.match(PlSqlParser.PARALLEL)
                    self.state = 4948
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,359,self._ctx)
                    if la_ == 1:
                        self.state = 4946
                        self.literal()
                        pass

                    elif la_ == 2:
                        self.state = 4947
                        self.parameter_name()
                        pass




                pass

            elif la_ == 6:
                self.state = 4952
                self.match(PlSqlParser.SET)
                self.state = 4953
                self.alter_session_set_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_session_set_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.en = None # Id_expressionContext
            self.cn = None # Id_expressionContext
            self.sn = None # Id_expressionContext
            self.c = None # Id_expressionContext

        def parameter_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parameter_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,i)


        def EQUALS_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EQUALS_OP)
            else:
                return self.getToken(PlSqlParser.EQUALS_OP, i)

        def parameter_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parameter_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parameter_valueContext,i)


        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def CONTAINER(self):
            return self.getToken(PlSqlParser.CONTAINER, 0)

        def SERVICE(self):
            return self.getToken(PlSqlParser.SERVICE, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def ARCHIVAL(self):
            return self.getToken(PlSqlParser.ARCHIVAL, 0)

        def VISIBILITY(self):
            return self.getToken(PlSqlParser.VISIBILITY, 0)

        def ACTIVE(self):
            return self.getToken(PlSqlParser.ACTIVE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def DEFAULT_COLLATION(self):
            return self.getToken(PlSqlParser.DEFAULT_COLLATION, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_session_set_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_session_set_clause" ):
                listener.enterAlter_session_set_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_session_set_clause" ):
                listener.exitAlter_session_set_clause(self)




    def alter_session_set_clause(self):

        localctx = PlSqlParser.Alter_session_set_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 330, self.RULE_alter_session_set_clause)
        self._la = 0 # Token type
        try:
            self.state = 4986
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,365,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 4960 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 4956
                    self.parameter_name()
                    self.state = 4957
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 4958
                    self.parameter_value()
                    self.state = 4962 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378):
                        break

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 4964
                self.match(PlSqlParser.EDITION)
                self.state = 4965
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 4966
                localctx.en = self.id_expression()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 4967
                self.match(PlSqlParser.CONTAINER)
                self.state = 4968
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 4969
                localctx.cn = self.id_expression()
                self.state = 4973
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1583:
                    self.state = 4970
                    self.match(PlSqlParser.SERVICE)
                    self.state = 4971
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 4972
                    localctx.sn = self.id_expression()


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 4975
                self.match(PlSqlParser.ROW)
                self.state = 4976
                self.match(PlSqlParser.ARCHIVAL)
                self.state = 4977
                self.match(PlSqlParser.VISIBILITY)
                self.state = 4978
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 4979
                _la = self._input.LA(1)
                if not(_la==14 or _la==38):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 4980
                self.match(PlSqlParser.DEFAULT_COLLATION)
                self.state = 4981
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 4984
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,364,self._ctx)
                if la_ == 1:
                    self.state = 4982
                    localctx.c = self.id_expression()
                    pass

                elif la_ == 2:
                    self.state = 4983
                    self.match(PlSqlParser.NONE)
                    pass


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_sequenceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def sequence_name(self):
            return self.getTypedRuleContext(PlSqlParser.Sequence_nameContext,0)


        def sequence_start_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sequence_start_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sequence_start_clauseContext,i)


        def sequence_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sequence_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sequence_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_sequence

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_sequence" ):
                listener.enterCreate_sequence(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_sequence" ):
                listener.exitCreate_sequence(self)




    def create_sequence(self):

        localctx = PlSqlParser.Create_sequenceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 332, self.RULE_create_sequence)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 4988
            self.match(PlSqlParser.CREATE)
            self.state = 4989
            self.match(PlSqlParser.SEQUENCE)
            self.state = 4990
            self.sequence_name()
            self.state = 4995
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==158 or _la==331 or _la==665 or _la==878 or _la==906 or ((((_la - 1010)) & ~0x3f) == 0 and ((1 << (_la - 1010)) & 5066549580922881) != 0) or _la==1077 or _la==1233 or _la==1654:
                self.state = 4993
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1654]:
                    self.state = 4991
                    self.sequence_start_clause()
                    pass
                elif token in [158, 331, 665, 878, 906, 1010, 1027, 1059, 1062, 1077, 1233]:
                    self.state = 4992
                    self.sequence_spec()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 4997
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sequence_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INCREMENT(self):
            return self.getToken(PlSqlParser.INCREMENT, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def MAXVALUE(self):
            return self.getToken(PlSqlParser.MAXVALUE, 0)

        def NOMAXVALUE(self):
            return self.getToken(PlSqlParser.NOMAXVALUE, 0)

        def MINVALUE(self):
            return self.getToken(PlSqlParser.MINVALUE, 0)

        def NOMINVALUE(self):
            return self.getToken(PlSqlParser.NOMINVALUE, 0)

        def CYCLE(self):
            return self.getToken(PlSqlParser.CYCLE, 0)

        def NOCYCLE(self):
            return self.getToken(PlSqlParser.NOCYCLE, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def NOORDER(self):
            return self.getToken(PlSqlParser.NOORDER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sequence_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSequence_spec" ):
                listener.enterSequence_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSequence_spec" ):
                listener.exitSequence_spec(self)




    def sequence_spec(self):

        localctx = PlSqlParser.Sequence_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 334, self.RULE_sequence_spec)
        try:
            self.state = 5014
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [665]:
                self.enterOuterAlt(localctx, 1)
                self.state = 4998
                self.match(PlSqlParser.INCREMENT)
                self.state = 4999
                self.match(PlSqlParser.BY)
                self.state = 5000
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [878]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5001
                self.match(PlSqlParser.MAXVALUE)
                self.state = 5002
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [1059]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5003
                self.match(PlSqlParser.NOMAXVALUE)
                pass
            elif token in [906]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5004
                self.match(PlSqlParser.MINVALUE)
                self.state = 5005
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [1062]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5006
                self.match(PlSqlParser.NOMINVALUE)
                pass
            elif token in [331]:
                self.enterOuterAlt(localctx, 6)
                self.state = 5007
                self.match(PlSqlParser.CYCLE)
                pass
            elif token in [1027]:
                self.enterOuterAlt(localctx, 7)
                self.state = 5008
                self.match(PlSqlParser.NOCYCLE)
                pass
            elif token in [158]:
                self.enterOuterAlt(localctx, 8)
                self.state = 5009
                self.match(PlSqlParser.CACHE)
                self.state = 5010
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [1010]:
                self.enterOuterAlt(localctx, 9)
                self.state = 5011
                self.match(PlSqlParser.NOCACHE)
                pass
            elif token in [1233]:
                self.enterOuterAlt(localctx, 10)
                self.state = 5012
                self.match(PlSqlParser.ORDER)
                pass
            elif token in [1077]:
                self.enterOuterAlt(localctx, 11)
                self.state = 5013
                self.match(PlSqlParser.NOORDER)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sequence_start_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START(self):
            return self.getToken(PlSqlParser.START, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sequence_start_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSequence_start_clause" ):
                listener.enterSequence_start_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSequence_start_clause" ):
                listener.exitSequence_start_clause(self)




    def sequence_start_clause(self):

        localctx = PlSqlParser.Sequence_start_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 336, self.RULE_sequence_start_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5016
            self.match(PlSqlParser.START)
            self.state = 5017
            self.match(PlSqlParser.WITH)
            self.state = 5018
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_analytic_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.av = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def ANALYTIC(self):
            return self.getToken(PlSqlParser.ANALYTIC, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def cav_using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Cav_using_clauseContext,0)


        def dim_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dim_by_clauseContext,0)


        def measures_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Measures_clauseContext,0)


        def default_measure_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Default_measure_clauseContext,0)


        def default_aggregate_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Default_aggregate_clauseContext,0)


        def cache_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Cache_clauseContext,0)


        def fact_columns_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Fact_columns_clauseContext,0)


        def qry_transform_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Qry_transform_clauseContext,0)


        def NOFORCE(self):
            return self.getToken(PlSqlParser.NOFORCE, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_analytic_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_analytic_view" ):
                listener.enterCreate_analytic_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_analytic_view" ):
                listener.exitCreate_analytic_view(self)




    def create_analytic_view(self):

        localctx = PlSqlParser.Create_analytic_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 338, self.RULE_create_analytic_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5020
            self.match(PlSqlParser.CREATE)
            self.state = 5023
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 5021
                self.match(PlSqlParser.OR)
                self.state = 5022
                self.match(PlSqlParser.REPLACE)


            self.state = 5026
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1044:
                self.state = 5025
                _la = self._input.LA(1)
                if not(_la==576 or _la==1044):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5028
            self.match(PlSqlParser.ANALYTIC)
            self.state = 5029
            self.match(PlSqlParser.VIEW)
            self.state = 5030
            localctx.av = self.id_expression()
            self.state = 5034
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 5031
                self.match(PlSqlParser.SHARING)
                self.state = 5032
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 5033
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5039
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 5036
                self.classification_clause()
                self.state = 5041
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5043
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 5042
                self.cav_using_clause()


            self.state = 5046
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==398:
                self.state = 5045
                self.dim_by_clause()


            self.state = 5049
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==880:
                self.state = 5048
                self.measures_clause()


            self.state = 5052
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,376,self._ctx)
            if la_ == 1:
                self.state = 5051
                self.default_measure_clause()


            self.state = 5055
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 5054
                self.default_aggregate_clause()


            self.state = 5058
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==158:
                self.state = 5057
                self.cache_clause()


            self.state = 5061
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==530:
                self.state = 5060
                self.fact_columns_clause()


            self.state = 5064
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==467:
                self.state = 5063
                self.qry_transform_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Classification_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def caption_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Caption_clauseContext,0)


        def description_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Description_clauseContext,0)


        def classification_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_itemContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_classification_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClassification_clause" ):
                listener.enterClassification_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClassification_clause" ):
                listener.exitClassification_clause(self)




    def classification_clause(self):

        localctx = PlSqlParser.Classification_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 340, self.RULE_classification_clause)
        self._la = 0 # Token type
        try:
            self.state = 5093
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,388,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5074
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,383,self._ctx)
                if la_ == 1:
                    self.state = 5066
                    self.caption_clause()
                    self.state = 5068
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,381,self._ctx)
                    if la_ == 1:
                        self.state = 5067
                        self.description_clause()


                    pass

                elif la_ == 2:
                    self.state = 5071
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==169:
                        self.state = 5070
                        self.caption_clause()


                    self.state = 5073
                    self.description_clause()
                    pass


                self.state = 5079
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,384,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 5076
                        self.classification_item() 
                    self.state = 5081
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,384,self._ctx)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5083
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==169:
                    self.state = 5082
                    self.caption_clause()


                self.state = 5086
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==392:
                    self.state = 5085
                    self.description_clause()


                self.state = 5089 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 5088
                        self.classification_item()

                    else:
                        raise NoViableAltException(self)
                    self.state = 5091 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,387,self._ctx)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Caption_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.c = None # Quoted_stringContext

        def CAPTION(self):
            return self.getToken(PlSqlParser.CAPTION, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_caption_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCaption_clause" ):
                listener.enterCaption_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCaption_clause" ):
                listener.exitCaption_clause(self)




    def caption_clause(self):

        localctx = PlSqlParser.Caption_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 342, self.RULE_caption_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5095
            self.match(PlSqlParser.CAPTION)
            self.state = 5096
            localctx.c = self.quoted_string()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Description_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.d = None # Quoted_stringContext

        def DESCRIPTION(self):
            return self.getToken(PlSqlParser.DESCRIPTION, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_description_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDescription_clause" ):
                listener.enterDescription_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDescription_clause" ):
                listener.exitDescription_clause(self)




    def description_clause(self):

        localctx = PlSqlParser.Description_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 344, self.RULE_description_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5098
            self.match(PlSqlParser.DESCRIPTION)
            self.state = 5099
            localctx.d = self.quoted_string()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Classification_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.cn = None # Id_expressionContext
            self.cv = None # Quoted_stringContext

        def CLASSIFICATION(self):
            return self.getToken(PlSqlParser.CLASSIFICATION, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def LANGUAGE(self):
            return self.getToken(PlSqlParser.LANGUAGE, 0)

        def language(self):
            return self.getTypedRuleContext(PlSqlParser.LanguageContext,0)


        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_classification_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClassification_item" ):
                listener.enterClassification_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClassification_item" ):
                listener.exitClassification_item(self)




    def classification_item(self):

        localctx = PlSqlParser.Classification_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 346, self.RULE_classification_item)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5101
            self.match(PlSqlParser.CLASSIFICATION)
            self.state = 5102
            localctx.cn = self.id_expression()
            self.state = 5105
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2165:
                self.state = 5103
                self.match(PlSqlParser.VALUE)
                self.state = 5104
                localctx.cv = self.quoted_string()


            self.state = 5109
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==777:
                self.state = 5107
                self.match(PlSqlParser.LANGUAGE)
                self.state = 5108
                self.language()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LanguageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.nls = None # Id_expressionContext

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_language

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLanguage" ):
                listener.enterLanguage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLanguage" ):
                listener.exitLanguage(self)




    def language(self):

        localctx = PlSqlParser.LanguageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 348, self.RULE_language)
        try:
            self.state = 5113
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1162]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5111
                self.match(PlSqlParser.NULL_)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5112
                localctx.nls = self.id_expression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cav_using_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.t = None # Id_expressionContext
            self.ta = None # Id_expressionContext

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def REMOTE(self):
            return self.getToken(PlSqlParser.REMOTE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cav_using_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCav_using_clause" ):
                listener.enterCav_using_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCav_using_clause" ):
                listener.exitCav_using_clause(self)




    def cav_using_clause(self):

        localctx = PlSqlParser.Cav_using_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 350, self.RULE_cav_using_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5115
            self.match(PlSqlParser.USING)
            self.state = 5119
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,392,self._ctx)
            if la_ == 1:
                self.state = 5116
                self.schema_name()
                self.state = 5117
                self.match(PlSqlParser.PERIOD)


            self.state = 5121
            localctx.t = self.id_expression()
            self.state = 5123
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,393,self._ctx)
            if la_ == 1:
                self.state = 5122
                self.match(PlSqlParser.REMOTE)


            self.state = 5129
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,395,self._ctx)
            if la_ == 1:
                self.state = 5126
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 5125
                    self.match(PlSqlParser.AS)


                self.state = 5128
                localctx.ta = self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dim_by_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def dim_key(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Dim_keyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Dim_keyContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dim_by_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDim_by_clause" ):
                listener.enterDim_by_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDim_by_clause" ):
                listener.exitDim_by_clause(self)




    def dim_by_clause(self):

        localctx = PlSqlParser.Dim_by_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 352, self.RULE_dim_by_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5131
            self.match(PlSqlParser.DIMENSION)
            self.state = 5132
            self.match(PlSqlParser.BY)
            self.state = 5133
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5134
            self.dim_key()
            self.state = 5139
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5135
                self.match(PlSqlParser.COMMA)
                self.state = 5136
                self.dim_key()
                self.state = 5141
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5142
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dim_keyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.a = None # Id_expressionContext
            self.f = None # Column_nameContext

        def dim_ref(self):
            return self.getTypedRuleContext(PlSqlParser.Dim_refContext,0)


        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def HIERARCHIES(self):
            return self.getToken(PlSqlParser.HIERARCHIES, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def hier_ref(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Hier_refContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Hier_refContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def attribute_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Attribute_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Attribute_nameContext,i)


        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def DISTINCT(self):
            return self.getToken(PlSqlParser.DISTINCT, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dim_key

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDim_key" ):
                listener.enterDim_key(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDim_key" ):
                listener.exitDim_key(self)




    def dim_key(self):

        localctx = PlSqlParser.Dim_keyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 354, self.RULE_dim_key)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5144
            self.dim_ref()
            self.state = 5148
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 5145
                self.classification_clause()
                self.state = 5150
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5151
            self.match(PlSqlParser.KEY)
            self.state = 5179
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 5152
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 5156
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,398,self._ctx)
                if la_ == 1:
                    self.state = 5153
                    localctx.a = self.id_expression()
                    self.state = 5154
                    self.match(PlSqlParser.PERIOD)


                self.state = 5158
                localctx.f = self.column_name()
                self.state = 5168
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5159
                    self.match(PlSqlParser.COMMA)
                    self.state = 5163
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,399,self._ctx)
                    if la_ == 1:
                        self.state = 5160
                        localctx.a = self.id_expression()
                        self.state = 5161
                        self.match(PlSqlParser.PERIOD)


                    self.state = 5165
                    localctx.f = self.column_name()
                    self.state = 5170
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5171
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 5176
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,401,self._ctx)
                if la_ == 1:
                    self.state = 5173
                    localctx.a = self.id_expression()
                    self.state = 5174
                    self.match(PlSqlParser.PERIOD)


                self.state = 5178
                localctx.f = self.column_name()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 5181
            self.match(PlSqlParser.REFERENCES)
            self.state = 5183
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==417:
                self.state = 5182
                self.match(PlSqlParser.DISTINCT)


            self.state = 5193
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 5185
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 5186
                self.attribute_name()

                self.state = 5187
                self.match(PlSqlParser.COMMA)
                self.state = 5188
                self.attribute_name()
                self.state = 5190
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 5192
                self.attribute_name()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 5195
            self.match(PlSqlParser.HIERARCHIES)
            self.state = 5196
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5197
            self.hier_ref()
            self.state = 5202
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5198
                self.match(PlSqlParser.COMMA)
                self.state = 5199
                self.hier_ref()
                self.state = 5204
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5205
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dim_refContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ad = None # Id_expressionContext
            self.da = None # Id_expressionContext

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dim_ref

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDim_ref" ):
                listener.enterDim_ref(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDim_ref" ):
                listener.exitDim_ref(self)




    def dim_ref(self):

        localctx = PlSqlParser.Dim_refContext(self, self._ctx, self.state)
        self.enterRule(localctx, 356, self.RULE_dim_ref)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5210
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,406,self._ctx)
            if la_ == 1:
                self.state = 5207
                self.schema_name()
                self.state = 5208
                self.match(PlSqlParser.PERIOD)


            self.state = 5212
            localctx.ad = self.id_expression()
            self.state = 5217
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,408,self._ctx)
            if la_ == 1:
                self.state = 5214
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 5213
                    self.match(PlSqlParser.AS)


                self.state = 5216
                localctx.da = self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hier_refContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.h = None # Id_expressionContext
            self.ha = None # Id_expressionContext

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hier_ref

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHier_ref" ):
                listener.enterHier_ref(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHier_ref" ):
                listener.exitHier_ref(self)




    def hier_ref(self):

        localctx = PlSqlParser.Hier_refContext(self, self._ctx, self.state)
        self.enterRule(localctx, 358, self.RULE_hier_ref)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5222
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,409,self._ctx)
            if la_ == 1:
                self.state = 5219
                self.schema_name()
                self.state = 5220
                self.match(PlSqlParser.PERIOD)


            self.state = 5224
            localctx.h = self.id_expression()
            self.state = 5229
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 5226
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 5225
                    self.match(PlSqlParser.AS)


                self.state = 5228
                localctx.ha = self.id_expression()


            self.state = 5232
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 5231
                self.match(PlSqlParser.DEFAULT)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Measures_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEASURES(self):
            return self.getToken(PlSqlParser.MEASURES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def av_measure(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Av_measureContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Av_measureContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_measures_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMeasures_clause" ):
                listener.enterMeasures_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMeasures_clause" ):
                listener.exitMeasures_clause(self)




    def measures_clause(self):

        localctx = PlSqlParser.Measures_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 360, self.RULE_measures_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5234
            self.match(PlSqlParser.MEASURES)
            self.state = 5235
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5236
            self.av_measure()
            self.state = 5241
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5237
                self.match(PlSqlParser.COMMA)
                self.state = 5238
                self.av_measure()
                self.state = 5243
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5244
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Av_measureContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.mn = None # Id_expressionContext

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def base_meas_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Base_meas_clauseContext,0)


        def calc_meas_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Calc_meas_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_av_measure

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAv_measure" ):
                listener.enterAv_measure(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAv_measure" ):
                listener.exitAv_measure(self)




    def av_measure(self):

        localctx = PlSqlParser.Av_measureContext(self, self._ctx, self.state)
        self.enterRule(localctx, 362, self.RULE_av_measure)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5246
            localctx.mn = self.id_expression()
            self.state = 5249
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [530]:
                self.state = 5247
                self.base_meas_clause()
                pass
            elif token in [67]:
                self.state = 5248
                self.calc_meas_clause()
                pass
            elif token in [2348, 2353]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Base_meas_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.bm = None # Id_expressionContext

        def FACT(self):
            return self.getToken(PlSqlParser.FACT, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def meas_aggregate_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Meas_aggregate_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_base_meas_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBase_meas_clause" ):
                listener.enterBase_meas_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBase_meas_clause" ):
                listener.exitBase_meas_clause(self)




    def base_meas_clause(self):

        localctx = PlSqlParser.Base_meas_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 364, self.RULE_base_meas_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5251
            self.match(PlSqlParser.FACT)
            self.state = 5252
            localctx.bm = self.id_expression()
            self.state = 5254
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==35:
                self.state = 5253
                self.meas_aggregate_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Meas_aggregate_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AGGREGATE(self):
            return self.getToken(PlSqlParser.AGGREGATE, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def aggregate_function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Aggregate_function_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_meas_aggregate_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMeas_aggregate_clause" ):
                listener.enterMeas_aggregate_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMeas_aggregate_clause" ):
                listener.exitMeas_aggregate_clause(self)




    def meas_aggregate_clause(self):

        localctx = PlSqlParser.Meas_aggregate_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 366, self.RULE_meas_aggregate_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5256
            self.match(PlSqlParser.AGGREGATE)
            self.state = 5257
            self.match(PlSqlParser.BY)
            self.state = 5258
            self.aggregate_function_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Calc_meas_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_calc_meas_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCalc_meas_clause" ):
                listener.enterCalc_meas_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCalc_meas_clause" ):
                listener.exitCalc_meas_clause(self)




    def calc_meas_clause(self):

        localctx = PlSqlParser.Calc_meas_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 368, self.RULE_calc_meas_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5260
            self.match(PlSqlParser.AS)
            self.state = 5261
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5262
            self.expression()
            self.state = 5263
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_measure_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.m = None # Id_expressionContext

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def MEASURE(self):
            return self.getToken(PlSqlParser.MEASURE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_default_measure_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_measure_clause" ):
                listener.enterDefault_measure_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_measure_clause" ):
                listener.exitDefault_measure_clause(self)




    def default_measure_clause(self):

        localctx = PlSqlParser.Default_measure_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 370, self.RULE_default_measure_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5265
            self.match(PlSqlParser.DEFAULT)
            self.state = 5266
            self.match(PlSqlParser.MEASURE)
            self.state = 5267
            localctx.m = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_aggregate_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def AGGREGATE(self):
            return self.getToken(PlSqlParser.AGGREGATE, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def aggregate_function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Aggregate_function_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_default_aggregate_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_aggregate_clause" ):
                listener.enterDefault_aggregate_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_aggregate_clause" ):
                listener.exitDefault_aggregate_clause(self)




    def default_aggregate_clause(self):

        localctx = PlSqlParser.Default_aggregate_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 372, self.RULE_default_aggregate_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5269
            self.match(PlSqlParser.DEFAULT)
            self.state = 5270
            self.match(PlSqlParser.AGGREGATE)
            self.state = 5271
            self.match(PlSqlParser.BY)
            self.state = 5272
            self.aggregate_function_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cache_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def cache_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Cache_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Cache_specificationContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cache_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCache_clause" ):
                listener.enterCache_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCache_clause" ):
                listener.exitCache_clause(self)




    def cache_clause(self):

        localctx = PlSqlParser.Cache_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 374, self.RULE_cache_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5274
            self.match(PlSqlParser.CACHE)
            self.state = 5275
            self.cache_specification()
            self.state = 5280
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5276
                self.match(PlSqlParser.COMMA)
                self.state = 5277
                self.cache_specification()
                self.state = 5282
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cache_specificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEASURE(self):
            return self.getToken(PlSqlParser.MEASURE, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def levels_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Levels_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Levels_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cache_specification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCache_specification" ):
                listener.enterCache_specification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCache_specification" ):
                listener.exitCache_specification(self)




    def cache_specification(self):

        localctx = PlSqlParser.Cache_specificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 376, self.RULE_cache_specification)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5283
            self.match(PlSqlParser.MEASURE)
            self.state = 5284
            self.match(PlSqlParser.GROUP)
            self.state = 5304
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [38]:
                self.state = 5285
                self.match(PlSqlParser.ALL)
                pass
            elif token in [2347]:
                self.state = 5286
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 5287
                self.id_expression()
                self.state = 5292
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5288
                    self.match(PlSqlParser.COMMA)
                    self.state = 5289
                    self.id_expression()
                    self.state = 5294
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5295
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 5296
                self.levels_clause()
                self.state = 5301
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,418,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 5297
                        self.match(PlSqlParser.COMMA)
                        self.state = 5298
                        self.levels_clause() 
                    self.state = 5303
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,418,self._ctx)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Levels_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def level_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Level_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Level_specificationContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def level_group_type(self):
            return self.getTypedRuleContext(PlSqlParser.Level_group_typeContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_levels_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevels_clause" ):
                listener.enterLevels_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevels_clause" ):
                listener.exitLevels_clause(self)




    def levels_clause(self):

        localctx = PlSqlParser.Levels_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 378, self.RULE_levels_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5306
            self.match(PlSqlParser.LEVELS)
            self.state = 5307
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5308
            self.level_specification()
            self.state = 5313
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5309
                self.match(PlSqlParser.COMMA)
                self.state = 5310
                self.level_specification()
                self.state = 5315
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5316
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 5317
            self.level_group_type()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Level_specificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.d = None # Id_expressionContext
            self.h = None # Id_expressionContext
            self.l = None # Id_expressionContext

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_level_specification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevel_specification" ):
                listener.enterLevel_specification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevel_specification" ):
                listener.exitLevel_specification(self)




    def level_specification(self):

        localctx = PlSqlParser.Level_specificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 380, self.RULE_level_specification)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5319
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5328
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,422,self._ctx)
            if la_ == 1:
                self.state = 5323
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,421,self._ctx)
                if la_ == 1:
                    self.state = 5320
                    localctx.d = self.id_expression()
                    self.state = 5321
                    self.match(PlSqlParser.PERIOD)


                self.state = 5325
                localctx.h = self.id_expression()
                self.state = 5326
                self.match(PlSqlParser.PERIOD)


            self.state = 5330
            localctx.l = self.id_expression()
            self.state = 5331
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Level_group_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.t = None # Id_expressionContext

        def DYNAMIC(self):
            return self.getToken(PlSqlParser.DYNAMIC, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_level_group_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevel_group_type" ):
                listener.enterLevel_group_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevel_group_type" ):
                listener.exitLevel_group_type(self)




    def level_group_type(self):

        localctx = PlSqlParser.Level_group_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 382, self.RULE_level_group_type)
        self._la = 0 # Token type
        try:
            self.state = 5344
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [446]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5333
                self.match(PlSqlParser.DYNAMIC)
                pass
            elif token in [865]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5334
                self.match(PlSqlParser.MATERIALIZED)
                self.state = 5342
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 5335
                    self.match(PlSqlParser.USING)
                    self.state = 5339
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,423,self._ctx)
                    if la_ == 1:
                        self.state = 5336
                        self.schema_name()
                        self.state = 5337
                        self.match(PlSqlParser.PERIOD)


                    self.state = 5341
                    localctx.t = self.id_expression()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Fact_columns_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.f = None # Column_nameContext
            self.fa = None # Id_expressionContext

        def FACT(self):
            return self.getToken(PlSqlParser.FACT, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_fact_columns_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFact_columns_clause" ):
                listener.enterFact_columns_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFact_columns_clause" ):
                listener.exitFact_columns_clause(self)




    def fact_columns_clause(self):

        localctx = PlSqlParser.Fact_columns_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 384, self.RULE_fact_columns_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5346
            self.match(PlSqlParser.FACT)
            self.state = 5347
            self.match(PlSqlParser.COLUMN)
            self.state = 5348
            localctx.f = self.column_name()
            self.state = 5363
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,429,self._ctx)
            if la_ == 1:
                self.state = 5350
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 5349
                    self.match(PlSqlParser.AS)


                self.state = 5352
                localctx.fa = self.id_expression()
                self.state = 5360
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5353
                    self.match(PlSqlParser.COMMA)
                    self.state = 5355
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==67:
                        self.state = 5354
                        self.match(PlSqlParser.AS)


                    self.state = 5357
                    localctx.fa = self.id_expression()
                    self.state = 5362
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Qry_transform_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def TRANSFORM(self):
            return self.getToken(PlSqlParser.TRANSFORM, 0)

        def RELY(self):
            return self.getToken(PlSqlParser.RELY, 0)

        def NORELY(self):
            return self.getToken(PlSqlParser.NORELY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_qry_transform_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQry_transform_clause" ):
                listener.enterQry_transform_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQry_transform_clause" ):
                listener.exitQry_transform_clause(self)




    def qry_transform_clause(self):

        localctx = PlSqlParser.Qry_transform_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 386, self.RULE_qry_transform_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5365
            self.match(PlSqlParser.ENABLE)
            self.state = 5366
            self.match(PlSqlParser.QUERY)
            self.state = 5367
            self.match(PlSqlParser.TRANSFORM)
            self.state = 5369
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1107 or _la==1476:
                self.state = 5368
                _la = self._input.LA(1)
                if not(_la==1107 or _la==1476):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_attribute_dimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ad = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def DIMENSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DIMENSION)
            else:
                return self.getToken(PlSqlParser.DIMENSION, i)

        def ad_using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Ad_using_clauseContext,0)


        def attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Attributes_clauseContext,0)


        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def ad_level_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Ad_level_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Ad_level_clauseContext,i)


        def all_clause(self):
            return self.getTypedRuleContext(PlSqlParser.All_clauseContext,0)


        def NOFORCE(self):
            return self.getToken(PlSqlParser.NOFORCE, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def STANDARD(self):
            return self.getToken(PlSqlParser.STANDARD, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_attribute_dimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_attribute_dimension" ):
                listener.enterCreate_attribute_dimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_attribute_dimension" ):
                listener.exitCreate_attribute_dimension(self)




    def create_attribute_dimension(self):

        localctx = PlSqlParser.Create_attribute_dimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 388, self.RULE_create_attribute_dimension)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5371
            self.match(PlSqlParser.CREATE)
            self.state = 5374
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 5372
                self.match(PlSqlParser.OR)
                self.state = 5373
                self.match(PlSqlParser.REPLACE)


            self.state = 5377
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1044:
                self.state = 5376
                _la = self._input.LA(1)
                if not(_la==576 or _la==1044):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5379
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 5380
            self.match(PlSqlParser.DIMENSION)
            self.state = 5384
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,433,self._ctx)
            if la_ == 1:
                self.state = 5381
                self.schema_name()
                self.state = 5382
                self.match(PlSqlParser.PERIOD)


            self.state = 5386
            localctx.ad = self.id_expression()
            self.state = 5390
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 5387
                self.match(PlSqlParser.SHARING)
                self.state = 5388
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 5389
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5395
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 5392
                self.classification_clause()
                self.state = 5397
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5401
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==398:
                self.state = 5398
                self.match(PlSqlParser.DIMENSION)
                self.state = 5399
                self.match(PlSqlParser.TYPE)
                self.state = 5400
                _la = self._input.LA(1)
                if not(_la==1647 or _la==2024):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5403
            self.ad_using_clause()
            self.state = 5404
            self.attributes_clause()
            self.state = 5406 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 5405
                self.ad_level_clause()
                self.state = 5408 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==798):
                    break

            self.state = 5411
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==38:
                self.state = 5410
                self.all_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ad_using_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def source_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Source_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Source_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def join_path_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Join_path_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Join_path_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_ad_using_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAd_using_clause" ):
                listener.enterAd_using_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAd_using_clause" ):
                listener.exitAd_using_clause(self)




    def ad_using_clause(self):

        localctx = PlSqlParser.Ad_using_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 390, self.RULE_ad_using_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5413
            self.match(PlSqlParser.USING)
            self.state = 5414
            self.source_clause()
            self.state = 5419
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5415
                self.match(PlSqlParser.COMMA)
                self.state = 5416
                self.source_clause()
                self.state = 5421
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5425
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==748:
                self.state = 5422
                self.join_path_clause()
                self.state = 5427
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Source_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ftov = None # Id_expressionContext
            self.a = None # Id_expressionContext

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def REMOTE(self):
            return self.getToken(PlSqlParser.REMOTE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_source_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSource_clause" ):
                listener.enterSource_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSource_clause" ):
                listener.exitSource_clause(self)




    def source_clause(self):

        localctx = PlSqlParser.Source_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 392, self.RULE_source_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5431
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,441,self._ctx)
            if la_ == 1:
                self.state = 5428
                self.schema_name()
                self.state = 5429
                self.match(PlSqlParser.PERIOD)


            self.state = 5433
            localctx.ftov = self.id_expression()
            self.state = 5435
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,442,self._ctx)
            if la_ == 1:
                self.state = 5434
                self.match(PlSqlParser.REMOTE)


            self.state = 5441
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,444,self._ctx)
            if la_ == 1:
                self.state = 5438
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 5437
                    self.match(PlSqlParser.AS)


                self.state = 5440
                localctx.a = self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Join_path_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.jpn = None # Id_expressionContext

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def PATH(self):
            return self.getToken(PlSqlParser.PATH, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def join_condition(self):
            return self.getTypedRuleContext(PlSqlParser.Join_conditionContext,0)


        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_join_path_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoin_path_clause" ):
                listener.enterJoin_path_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoin_path_clause" ):
                listener.exitJoin_path_clause(self)




    def join_path_clause(self):

        localctx = PlSqlParser.Join_path_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 394, self.RULE_join_path_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5443
            self.match(PlSqlParser.JOIN)
            self.state = 5444
            self.match(PlSqlParser.PATH)
            self.state = 5445
            localctx.jpn = self.id_expression()
            self.state = 5446
            self.match(PlSqlParser.ON)
            self.state = 5447
            self.join_condition()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Join_conditionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def join_condition_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Join_condition_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Join_condition_itemContext,i)


        def AND(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AND)
            else:
                return self.getToken(PlSqlParser.AND, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_join_condition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoin_condition" ):
                listener.enterJoin_condition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoin_condition" ):
                listener.exitJoin_condition(self)




    def join_condition(self):

        localctx = PlSqlParser.Join_conditionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 396, self.RULE_join_condition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5449
            self.join_condition_item()
            self.state = 5454
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==49:
                self.state = 5450
                self.match(PlSqlParser.AND)
                self.state = 5451
                self.join_condition_item()
                self.state = 5456
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Join_condition_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.a = None # Id_expressionContext
            self.b = None # Id_expressionContext

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_join_condition_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoin_condition_item" ):
                listener.enterJoin_condition_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoin_condition_item" ):
                listener.exitJoin_condition_item(self)




    def join_condition_item(self):

        localctx = PlSqlParser.Join_condition_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 398, self.RULE_join_condition_item)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5460
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,446,self._ctx)
            if la_ == 1:
                self.state = 5457
                localctx.a = self.id_expression()
                self.state = 5458
                self.match(PlSqlParser.PERIOD)


            self.state = 5462
            self.column_name()
            self.state = 5463
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 5467
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,447,self._ctx)
            if la_ == 1:
                self.state = 5464
                localctx.b = self.id_expression()
                self.state = 5465
                self.match(PlSqlParser.PERIOD)


            self.state = 5469
            self.column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Attributes_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def ad_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Ad_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Ad_attributes_clauseContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_attributes_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAttributes_clause" ):
                listener.enterAttributes_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAttributes_clause" ):
                listener.exitAttributes_clause(self)




    def attributes_clause(self):

        localctx = PlSqlParser.Attributes_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 400, self.RULE_attributes_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5471
            self.match(PlSqlParser.ATTRIBUTES)
            self.state = 5472
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5473
            self.ad_attributes_clause()
            self.state = 5478
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5474
                self.match(PlSqlParser.COMMA)
                self.state = 5475
                self.ad_attributes_clause()
                self.state = 5480
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5481
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ad_attributes_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.a = None # Id_expressionContext
            self.an = None # Id_expressionContext

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_ad_attributes_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAd_attributes_clause" ):
                listener.enterAd_attributes_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAd_attributes_clause" ):
                listener.exitAd_attributes_clause(self)




    def ad_attributes_clause(self):

        localctx = PlSqlParser.Ad_attributes_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 402, self.RULE_ad_attributes_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5486
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,449,self._ctx)
            if la_ == 1:
                self.state = 5483
                localctx.a = self.id_expression()
                self.state = 5484
                self.match(PlSqlParser.PERIOD)


            self.state = 5488
            self.column_name()
            self.state = 5493
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,451,self._ctx)
            if la_ == 1:
                self.state = 5490
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 5489
                    self.match(PlSqlParser.AS)


                self.state = 5492
                localctx.an = self.id_expression()


            self.state = 5498
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 5495
                self.classification_clause()
                self.state = 5500
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ad_level_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.l = None # Id_expressionContext

        def LEVEL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEVEL)
            else:
                return self.getToken(PlSqlParser.LEVEL, i)

        def key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Key_clauseContext,0)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def SKIP_(self):
            return self.getToken(PlSqlParser.SKIP_, 0)

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def alternate_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alternate_key_clauseContext,0)


        def MEMBER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MEMBER)
            else:
                return self.getToken(PlSqlParser.MEMBER, i)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def CAPTION(self):
            return self.getToken(PlSqlParser.CAPTION, 0)

        def DESCRIPTION(self):
            return self.getToken(PlSqlParser.DESCRIPTION, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def dim_order_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Dim_order_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Dim_order_clauseContext,i)


        def DETERMINES(self):
            return self.getToken(PlSqlParser.DETERMINES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def STANDARD(self):
            return self.getToken(PlSqlParser.STANDARD, 0)

        def YEARS(self):
            return self.getToken(PlSqlParser.YEARS, 0)

        def HALF_YEARS(self):
            return self.getToken(PlSqlParser.HALF_YEARS, 0)

        def QUARTERS(self):
            return self.getToken(PlSqlParser.QUARTERS, 0)

        def MONTHS(self):
            return self.getToken(PlSqlParser.MONTHS, 0)

        def WEEKS(self):
            return self.getToken(PlSqlParser.WEEKS, 0)

        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def HOURS(self):
            return self.getToken(PlSqlParser.HOURS, 0)

        def MINUTES(self):
            return self.getToken(PlSqlParser.MINUTES, 0)

        def SECONDS(self):
            return self.getToken(PlSqlParser.SECONDS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def MIN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MIN)
            else:
                return self.getToken(PlSqlParser.MIN, i)

        def MAX(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MAX)
            else:
                return self.getToken(PlSqlParser.MAX, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_ad_level_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAd_level_clause" ):
                listener.enterAd_level_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAd_level_clause" ):
                listener.exitAd_level_clause(self)




    def ad_level_clause(self):

        localctx = PlSqlParser.Ad_level_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 404, self.RULE_ad_level_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5501
            self.match(PlSqlParser.LEVEL)
            self.state = 5502
            localctx.l = self.id_expression()
            self.state = 5508
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138]:
                self.state = 5503
                self.match(PlSqlParser.NOT)
                self.state = 5504
                self.match(PlSqlParser.NULL_)
                pass
            elif token in [1619]:
                self.state = 5505
                self.match(PlSqlParser.SKIP_)
                self.state = 5506
                self.match(PlSqlParser.WHEN)
                self.state = 5507
                self.match(PlSqlParser.NULL_)
                pass
            elif token in [169, 197, 392, 770, 798]:
                pass
            else:
                pass
            self.state = 5513
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==798:
                self.state = 5510
                self.match(PlSqlParser.LEVEL)
                self.state = 5511
                self.match(PlSqlParser.TYPE)
                self.state = 5512
                _la = self._input.LA(1)
                if not(_la==347 or _la==617 or _la==639 or _la==905 or _la==933 or _la==1407 or _la==1559 or _la==1647 or _la==2200 or _la==2259):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5518
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 5515
                self.classification_clause()
                self.state = 5520
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5521
            self.key_clause()
            self.state = 5523
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==43:
                self.state = 5522
                self.alternate_key_clause()


            self.state = 5528
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,457,self._ctx)
            if la_ == 1:
                self.state = 5525
                self.match(PlSqlParser.MEMBER)
                self.state = 5526
                self.match(PlSqlParser.NAME)
                self.state = 5527
                self.expression()


            self.state = 5533
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,458,self._ctx)
            if la_ == 1:
                self.state = 5530
                self.match(PlSqlParser.MEMBER)
                self.state = 5531
                self.match(PlSqlParser.CAPTION)
                self.state = 5532
                self.expression()


            self.state = 5538
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==882:
                self.state = 5535
                self.match(PlSqlParser.MEMBER)
                self.state = 5536
                self.match(PlSqlParser.DESCRIPTION)
                self.state = 5537
                self.expression()


            self.state = 5556
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1233:
                self.state = 5540
                self.match(PlSqlParser.ORDER)
                self.state = 5541
                self.match(PlSqlParser.BY)
                self.state = 5543
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,460,self._ctx)
                if la_ == 1:
                    self.state = 5542
                    _la = self._input.LA(1)
                    if not(_la==2306 or _la==2309):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 5545
                self.dim_order_clause()
                self.state = 5553
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5546
                    self.match(PlSqlParser.COMMA)
                    self.state = 5548
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,461,self._ctx)
                    if la_ == 1:
                        self.state = 5547
                        _la = self._input.LA(1)
                        if not(_la==2306 or _la==2309):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 5550
                    self.dim_order_clause()
                    self.state = 5555
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 5570
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==395:
                self.state = 5558
                self.match(PlSqlParser.DETERMINES)
                self.state = 5559
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 5560
                self.id_expression()
                self.state = 5565
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5561
                    self.match(PlSqlParser.COMMA)
                    self.state = 5562
                    self.id_expression()
                    self.state = 5567
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5568
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Key_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.a = None # Id_expressionContext

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_key_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKey_clause" ):
                listener.enterKey_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKey_clause" ):
                listener.exitKey_clause(self)




    def key_clause(self):

        localctx = PlSqlParser.Key_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 406, self.RULE_key_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5572
            self.match(PlSqlParser.KEY)
            self.state = 5585
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 5573
                localctx.a = self.id_expression()
                pass
            elif token in [2347]:
                self.state = 5574
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 5575
                self.id_expression()
                self.state = 5580
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5576
                    self.match(PlSqlParser.COMMA)
                    self.state = 5577
                    self.id_expression()
                    self.state = 5582
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5583
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alternate_key_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTERNATE(self):
            return self.getToken(PlSqlParser.ALTERNATE, 0)

        def key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Key_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alternate_key_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlternate_key_clause" ):
                listener.enterAlternate_key_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlternate_key_clause" ):
                listener.exitAlternate_key_clause(self)




    def alternate_key_clause(self):

        localctx = PlSqlParser.Alternate_key_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 408, self.RULE_alternate_key_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5587
            self.match(PlSqlParser.ALTERNATE)
            self.state = 5588
            self.key_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dim_order_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.a = None # Id_expressionContext

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def NULLS(self):
            return self.getToken(PlSqlParser.NULLS, 0)

        def ASC(self):
            return self.getToken(PlSqlParser.ASC, 0)

        def DESC(self):
            return self.getToken(PlSqlParser.DESC, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def LAST(self):
            return self.getToken(PlSqlParser.LAST, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dim_order_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDim_order_clause" ):
                listener.enterDim_order_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDim_order_clause" ):
                listener.exitDim_order_clause(self)




    def dim_order_clause(self):

        localctx = PlSqlParser.Dim_order_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 410, self.RULE_dim_order_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5590
            localctx.a = self.id_expression()
            self.state = 5592
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==68 or _la==391:
                self.state = 5591
                _la = self._input.LA(1)
                if not(_la==68 or _la==391):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5596
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1163:
                self.state = 5594
                self.match(PlSqlParser.NULLS)
                self.state = 5595
                _la = self._input.LA(1)
                if not(_la==559 or _la==779):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class All_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def MEMBER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MEMBER)
            else:
                return self.getToken(PlSqlParser.MEMBER, i)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def CAPTION(self):
            return self.getToken(PlSqlParser.CAPTION, 0)

        def DESCRIPTION(self):
            return self.getToken(PlSqlParser.DESCRIPTION, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_all_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAll_clause" ):
                listener.enterAll_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAll_clause" ):
                listener.exitAll_clause(self)




    def all_clause(self):

        localctx = PlSqlParser.All_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 412, self.RULE_all_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5598
            self.match(PlSqlParser.ALL)
            self.state = 5599
            self.match(PlSqlParser.MEMBER)
            self.state = 5616
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [943]:
                self.state = 5600
                self.match(PlSqlParser.NAME)
                self.state = 5601
                self.expression()
                self.state = 5605
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==882:
                    self.state = 5602
                    self.match(PlSqlParser.MEMBER)
                    self.state = 5603
                    self.match(PlSqlParser.CAPTION)
                    self.state = 5604
                    self.expression()


                pass
            elif token in [169]:
                self.state = 5607
                self.match(PlSqlParser.CAPTION)
                self.state = 5608
                self.expression()
                self.state = 5612
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==882:
                    self.state = 5609
                    self.match(PlSqlParser.MEMBER)
                    self.state = 5610
                    self.match(PlSqlParser.DESCRIPTION)
                    self.state = 5611
                    self.expression()


                pass
            elif token in [392]:
                self.state = 5614
                self.match(PlSqlParser.DESCRIPTION)
                self.state = 5615
                self.expression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_audit_policyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.p = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def privilege_audit_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Privilege_audit_clauseContext,0)


        def action_audit_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Action_audit_clauseContext,0)


        def role_audit_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Role_audit_clauseContext,0)


        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def EVALUATE(self):
            return self.getToken(PlSqlParser.EVALUATE, 0)

        def PER(self):
            return self.getToken(PlSqlParser.PER, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def TOPLEVEL(self):
            return self.getToken(PlSqlParser.TOPLEVEL, 0)

        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def STATEMENT(self):
            return self.getToken(PlSqlParser.STATEMENT, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def INSTANCE(self):
            return self.getToken(PlSqlParser.INSTANCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_audit_policy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_audit_policy" ):
                listener.enterCreate_audit_policy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_audit_policy" ):
                listener.exitCreate_audit_policy(self)




    def create_audit_policy(self):

        localctx = PlSqlParser.Create_audit_policyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 414, self.RULE_create_audit_policy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5618
            self.match(PlSqlParser.CREATE)
            self.state = 5619
            self.match(PlSqlParser.AUDIT)
            self.state = 5620
            self.match(PlSqlParser.POLICY)
            self.state = 5621
            localctx.p = self.id_expression()
            self.state = 5623
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1384:
                self.state = 5622
                self.privilege_audit_clause()


            self.state = 5626
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==12:
                self.state = 5625
                self.action_audit_clause()


            self.state = 5629
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1517:
                self.state = 5628
                self.role_audit_clause()


            self.state = 5637
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2204:
                self.state = 5631
                self.match(PlSqlParser.WHEN)
                self.state = 5632
                self.quoted_string()
                self.state = 5633
                self.match(PlSqlParser.EVALUATE)
                self.state = 5634
                self.match(PlSqlParser.PER)
                self.state = 5635
                _la = self._input.LA(1)
                if not(_la==716 or _la==1586 or _la==1659):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5641
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1192:
                self.state = 5639
                self.match(PlSqlParser.ONLY)
                self.state = 5640
                self.match(PlSqlParser.TOPLEVEL)


            self.state = 5644
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 5643
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Privilege_audit_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PRIVILEGES(self):
            return self.getToken(PlSqlParser.PRIVILEGES, 0)

        def system_privilege(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.System_privilegeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.System_privilegeContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_privilege_audit_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrivilege_audit_clause" ):
                listener.enterPrivilege_audit_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrivilege_audit_clause" ):
                listener.exitPrivilege_audit_clause(self)




    def privilege_audit_clause(self):

        localctx = PlSqlParser.Privilege_audit_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 416, self.RULE_privilege_audit_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5646
            self.match(PlSqlParser.PRIVILEGES)
            self.state = 5647
            self.system_privilege()
            self.state = 5652
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5648
                self.match(PlSqlParser.COMMA)
                self.state = 5649
                self.system_privilege()
                self.state = 5654
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Action_audit_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def standard_actions(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Standard_actionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Standard_actionsContext,i)


        def component_actions(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Component_actionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Component_actionsContext,i)


        def system_actions(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.System_actionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.System_actionsContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_action_audit_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAction_audit_clause" ):
                listener.enterAction_audit_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAction_audit_clause" ):
                listener.exitAction_audit_clause(self)




    def action_audit_clause(self):

        localctx = PlSqlParser.Action_audit_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 418, self.RULE_action_audit_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5658 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 5658
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,480,self._ctx)
                    if la_ == 1:
                        self.state = 5655
                        self.standard_actions()
                        pass

                    elif la_ == 2:
                        self.state = 5656
                        self.component_actions()
                        pass

                    elif la_ == 3:
                        self.state = 5657
                        self.system_actions()
                        pass



                else:
                    raise NoViableAltException(self)
                self.state = 5660 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,481,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class System_actionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACTIONS(self):
            return self.getToken(PlSqlParser.ACTIONS, 0)

        def system_privilege(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.System_privilegeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.System_privilegeContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_system_actions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSystem_actions" ):
                listener.enterSystem_actions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSystem_actions" ):
                listener.exitSystem_actions(self)




    def system_actions(self):

        localctx = PlSqlParser.System_actionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 420, self.RULE_system_actions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5662
            self.match(PlSqlParser.ACTIONS)
            self.state = 5663
            self.system_privilege()
            self.state = 5668
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5664
                self.match(PlSqlParser.COMMA)
                self.state = 5665
                self.system_privilege()
                self.state = 5670
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Standard_actionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACTIONS(self):
            return self.getToken(PlSqlParser.ACTIONS, 0)

        def actions_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Actions_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Actions_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_standard_actions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStandard_actions" ):
                listener.enterStandard_actions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStandard_actions" ):
                listener.exitStandard_actions(self)




    def standard_actions(self):

        localctx = PlSqlParser.Standard_actionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 422, self.RULE_standard_actions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5671
            self.match(PlSqlParser.ACTIONS)
            self.state = 5672
            self.actions_clause()
            self.state = 5677
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5673
                self.match(PlSqlParser.COMMA)
                self.state = 5674
                self.actions_clause()
                self.state = 5679
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Actions_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def object_action(self):
            return self.getTypedRuleContext(PlSqlParser.Object_actionContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def directory_name(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_nameContext,0)


        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def MINING(self):
            return self.getToken(PlSqlParser.MINING, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def system_action(self):
            return self.getTypedRuleContext(PlSqlParser.System_actionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_actions_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterActions_clause" ):
                listener.enterActions_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitActions_clause" ):
                listener.exitActions_clause(self)




    def actions_clause(self):

        localctx = PlSqlParser.Actions_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 424, self.RULE_actions_clause)
        try:
            self.state = 5703
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,489,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5682
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [42, 83, 230, 381, 505, 565, 607, 675, 713, 829, 1429, 1481, 1569, 2114]:
                    self.state = 5680
                    self.object_action()
                    pass
                elif token in [38]:
                    self.state = 5681
                    self.match(PlSqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 5684
                self.match(PlSqlParser.ON)
                self.state = 5697
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,487,self._ctx)
                if la_ == 1:
                    self.state = 5685
                    self.match(PlSqlParser.DIRECTORY)
                    self.state = 5686
                    self.directory_name()
                    pass

                elif la_ == 2:
                    self.state = 5689
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,485,self._ctx)
                    if la_ == 1:
                        self.state = 5687
                        self.match(PlSqlParser.MINING)
                        self.state = 5688
                        self.match(PlSqlParser.MODEL)


                    self.state = 5694
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,486,self._ctx)
                    if la_ == 1:
                        self.state = 5691
                        self.schema_name()
                        self.state = 5692
                        self.match(PlSqlParser.PERIOD)


                    self.state = 5696
                    self.id_expression()
                    pass


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5701
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                    self.state = 5699
                    self.system_action()
                    pass
                elif token in [38]:
                    self.state = 5700
                    self.match(PlSqlParser.ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_actionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def GRANT(self):
            return self.getToken(PlSqlParser.GRANT, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def SELECT(self):
            return self.getToken(PlSqlParser.SELECT, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_object_action

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_action" ):
                listener.enterObject_action(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_action" ):
                listener.exitObject_action(self)




    def object_action(self):

        localctx = PlSqlParser.Object_actionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 426, self.RULE_object_action)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5705
            _la = self._input.LA(1)
            if not(_la==42 or _la==83 or _la==230 or _la==381 or _la==505 or _la==565 or _la==607 or _la==675 or _la==713 or _la==829 or _la==1429 or _la==1481 or _la==1569 or _la==2114):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class System_actionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_system_action

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSystem_action" ):
                listener.enterSystem_action(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSystem_action" ):
                listener.exitSystem_action(self)




    def system_action(self):

        localctx = PlSqlParser.System_actionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 428, self.RULE_system_action)
        self._la = 0 # Token type
        try:
            self.state = 5714
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,490,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5707
                self.id_expression()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5708
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5709
                self.match(PlSqlParser.JAVA)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 5710
                self.match(PlSqlParser.LOCK)
                self.state = 5711
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 5712
                _la = self._input.LA(1)
                if not(_la==505 or _la==1429 or _la==2216):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5713
                self.match(PlSqlParser.DIRECTORY)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Component_actionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACTIONS(self):
            return self.getToken(PlSqlParser.ACTIONS, 0)

        def COMPONENT(self):
            return self.getToken(PlSqlParser.COMPONENT, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def component_action(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Component_actionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Component_actionContext,i)


        def DV(self):
            return self.getToken(PlSqlParser.DV, 0)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PROTOCOL(self):
            return self.getToken(PlSqlParser.PROTOCOL, 0)

        def DATAPUMP(self):
            return self.getToken(PlSqlParser.DATAPUMP, 0)

        def DIRECT_LOAD(self):
            return self.getToken(PlSqlParser.DIRECT_LOAD, 0)

        def OLS(self):
            return self.getToken(PlSqlParser.OLS, 0)

        def XS(self):
            return self.getToken(PlSqlParser.XS, 0)

        def FTP(self):
            return self.getToken(PlSqlParser.FTP, 0)

        def HTTP(self):
            return self.getToken(PlSqlParser.HTTP, 0)

        def AUTHENTICATION(self):
            return self.getToken(PlSqlParser.AUTHENTICATION, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_component_actions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComponent_actions" ):
                listener.enterComponent_actions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComponent_actions" ):
                listener.exitComponent_actions(self)




    def component_actions(self):

        localctx = PlSqlParser.Component_actionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 430, self.RULE_component_actions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5716
            self.match(PlSqlParser.ACTIONS)
            self.state = 5717
            self.match(PlSqlParser.COMPONENT)
            self.state = 5718
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 5744
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [342, 400, 1186, 2257]:
                self.state = 5719
                _la = self._input.LA(1)
                if not(_la==342 or _la==400 or _la==1186 or _la==2257):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 5720
                self.component_action()
                self.state = 5725
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5721
                    self.match(PlSqlParser.COMMA)
                    self.state = 5722
                    self.component_action()
                    self.state = 5727
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [445]:
                self.state = 5728
                self.match(PlSqlParser.DV)
                self.state = 5729
                self.component_action()
                self.state = 5730
                self.match(PlSqlParser.ON)
                self.state = 5731
                self.id_expression()
                self.state = 5739
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5732
                    self.match(PlSqlParser.COMMA)
                    self.state = 5733
                    self.component_action()
                    self.state = 5734
                    self.match(PlSqlParser.ON)
                    self.state = 5735
                    self.id_expression()
                    self.state = 5741
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1395]:
                self.state = 5742
                self.match(PlSqlParser.PROTOCOL)
                self.state = 5743
                _la = self._input.LA(1)
                if not(_la==85 or _la==594 or _la==640):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Component_actionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_component_action

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComponent_action" ):
                listener.enterComponent_action(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComponent_action" ):
                listener.exitComponent_action(self)




    def component_action(self):

        localctx = PlSqlParser.Component_actionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 432, self.RULE_component_action)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5746
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Role_audit_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROLES(self):
            return self.getToken(PlSqlParser.ROLES, 0)

        def role_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Role_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Role_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_role_audit_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRole_audit_clause" ):
                listener.enterRole_audit_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRole_audit_clause" ):
                listener.exitRole_audit_clause(self)




    def role_audit_clause(self):

        localctx = PlSqlParser.Role_audit_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 434, self.RULE_role_audit_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5748
            self.match(PlSqlParser.ROLES)
            self.state = 5749
            self.role_name()
            self.state = 5754
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5750
                self.match(PlSqlParser.COMMA)
                self.state = 5751
                self.role_name()
                self.state = 5756
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_controlfileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.d = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def CONTROLFILE(self):
            return self.getToken(PlSqlParser.CONTROLFILE, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def RESETLOGS(self):
            return self.getToken(PlSqlParser.RESETLOGS, 0)

        def NORESETLOGS(self):
            return self.getToken(PlSqlParser.NORESETLOGS, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def logfile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logfile_clauseContext,0)


        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def file_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.File_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.File_specificationContext,i)


        def controlfile_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Controlfile_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Controlfile_optionsContext,i)


        def character_set_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Character_set_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_controlfile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_controlfile" ):
                listener.enterCreate_controlfile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_controlfile" ):
                listener.exitCreate_controlfile(self)




    def create_controlfile(self):

        localctx = PlSqlParser.Create_controlfileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 436, self.RULE_create_controlfile)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5757
            self.match(PlSqlParser.CREATE)
            self.state = 5758
            self.match(PlSqlParser.CONTROLFILE)
            self.state = 5760
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 5759
                self.match(PlSqlParser.REUSE)


            self.state = 5763
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1590:
                self.state = 5762
                self.match(PlSqlParser.SET)


            self.state = 5765
            self.match(PlSqlParser.DATABASE)
            self.state = 5766
            localctx.d = self.id_expression()
            self.state = 5768
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==830:
                self.state = 5767
                self.logfile_clause()


            self.state = 5770
            _la = self._input.LA(1)
            if not(_la==1110 or _la==1487):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 5780
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==335:
                self.state = 5771
                self.match(PlSqlParser.DATAFILE)
                self.state = 5772
                self.file_specification()
                self.state = 5777
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5773
                    self.match(PlSqlParser.COMMA)
                    self.state = 5774
                    self.file_specification()
                    self.state = 5779
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 5785
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==65 or _la==576 or ((((_la - 868)) & ~0x3f) == 0 and ((1 << (_la - 868)) & 121) != 0) or _la==1003 or _la==1590:
                self.state = 5782
                self.controlfile_options()
                self.state = 5787
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5789
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==185:
                self.state = 5788
                self.character_set_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Controlfile_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MAXLOGFILES(self):
            return self.getToken(PlSqlParser.MAXLOGFILES, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def MAXLOGMEMBERS(self):
            return self.getToken(PlSqlParser.MAXLOGMEMBERS, 0)

        def MAXLOGHISTORY(self):
            return self.getToken(PlSqlParser.MAXLOGHISTORY, 0)

        def MAXDATAFILES(self):
            return self.getToken(PlSqlParser.MAXDATAFILES, 0)

        def MAXINSTANCES(self):
            return self.getToken(PlSqlParser.MAXINSTANCES, 0)

        def ARCHIVELOG(self):
            return self.getToken(PlSqlParser.ARCHIVELOG, 0)

        def NOARCHIVELOG(self):
            return self.getToken(PlSqlParser.NOARCHIVELOG, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def NOLOGGING(self):
            return self.getToken(PlSqlParser.NOLOGGING, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def AVAILABILITY(self):
            return self.getToken(PlSqlParser.AVAILABILITY, 0)

        def LOAD(self):
            return self.getToken(PlSqlParser.LOAD, 0)

        def PERFORMANCE(self):
            return self.getToken(PlSqlParser.PERFORMANCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_controlfile_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterControlfile_options" ):
                listener.enterControlfile_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitControlfile_options" ):
                listener.exitControlfile_options(self)




    def controlfile_options(self):

        localctx = PlSqlParser.Controlfile_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 438, self.RULE_controlfile_options)
        try:
            self.state = 5815
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [872]:
                self.enterOuterAlt(localctx, 1)
                self.state = 5791
                self.match(PlSqlParser.MAXLOGFILES)
                self.state = 5792
                self.numeric()
                pass
            elif token in [874]:
                self.enterOuterAlt(localctx, 2)
                self.state = 5793
                self.match(PlSqlParser.MAXLOGMEMBERS)
                self.state = 5794
                self.numeric()
                pass
            elif token in [873]:
                self.enterOuterAlt(localctx, 3)
                self.state = 5795
                self.match(PlSqlParser.MAXLOGHISTORY)
                self.state = 5796
                self.numeric()
                pass
            elif token in [868]:
                self.enterOuterAlt(localctx, 4)
                self.state = 5797
                self.match(PlSqlParser.MAXDATAFILES)
                self.state = 5798
                self.numeric()
                pass
            elif token in [871]:
                self.enterOuterAlt(localctx, 5)
                self.state = 5799
                self.match(PlSqlParser.MAXINSTANCES)
                self.state = 5800
                self.numeric()
                pass
            elif token in [65]:
                self.enterOuterAlt(localctx, 6)
                self.state = 5801
                self.match(PlSqlParser.ARCHIVELOG)
                pass
            elif token in [1003]:
                self.enterOuterAlt(localctx, 7)
                self.state = 5802
                self.match(PlSqlParser.NOARCHIVELOG)
                pass
            elif token in [576]:
                self.enterOuterAlt(localctx, 8)
                self.state = 5803
                self.match(PlSqlParser.FORCE)
                self.state = 5804
                self.match(PlSqlParser.LOGGING)
                pass
            elif token in [1590]:
                self.enterOuterAlt(localctx, 9)
                self.state = 5805
                self.match(PlSqlParser.SET)
                self.state = 5806
                self.match(PlSqlParser.STANDBY)
                self.state = 5807
                self.match(PlSqlParser.NOLOGGING)
                self.state = 5808
                self.match(PlSqlParser.FOR)
                self.state = 5813
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [334]:
                    self.state = 5809
                    self.match(PlSqlParser.DATA)
                    self.state = 5810
                    self.match(PlSqlParser.AVAILABILITY)
                    pass
                elif token in [816]:
                    self.state = 5811
                    self.match(PlSqlParser.LOAD)
                    self.state = 5812
                    self.match(PlSqlParser.PERFORMANCE)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logfile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def file_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.File_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.File_specificationContext,i)


        def numeric(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.NumericContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.NumericContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def GROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GROUP)
            else:
                return self.getToken(PlSqlParser.GROUP, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_logfile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogfile_clause" ):
                listener.enterLogfile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogfile_clause" ):
                listener.exitLogfile_clause(self)




    def logfile_clause(self):

        localctx = PlSqlParser.Logfile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 440, self.RULE_logfile_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5817
            self.match(PlSqlParser.LOGFILE)
            self.state = 5822
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==609 or _la==2341 or _la==2342:
                self.state = 5819
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==609:
                    self.state = 5818
                    self.match(PlSqlParser.GROUP)


                self.state = 5821
                self.numeric()


            self.state = 5824
            self.file_specification()
            self.state = 5835
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 5825
                self.match(PlSqlParser.COMMA)
                self.state = 5830
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==609 or _la==2341 or _la==2342:
                    self.state = 5827
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==609:
                        self.state = 5826
                        self.match(PlSqlParser.GROUP)


                    self.state = 5829
                    self.numeric()


                self.state = 5832
                self.file_specification()
                self.state = 5837
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Character_set_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.cs = None # Id_expressionContext

        def CHARACTER(self):
            return self.getToken(PlSqlParser.CHARACTER, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_character_set_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCharacter_set_clause" ):
                listener.enterCharacter_set_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCharacter_set_clause" ):
                listener.exitCharacter_set_clause(self)




    def character_set_clause(self):

        localctx = PlSqlParser.Character_set_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 442, self.RULE_character_set_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5838
            self.match(PlSqlParser.CHARACTER)
            self.state = 5839
            self.match(PlSqlParser.SET)
            self.state = 5840
            localctx.cs = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class File_specificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def datafile_tempfile_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_specContext,0)


        def redo_log_file_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Redo_log_file_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_file_specification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFile_specification" ):
                listener.enterFile_specification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFile_specification" ):
                listener.exitFile_specification(self)




    def file_specification(self):

        localctx = PlSqlParser.File_specificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 444, self.RULE_file_specification)
        try:
            self.state = 5844
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,509,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 5842
                self.datafile_tempfile_spec()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 5843
                self.redo_log_file_spec()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_diskgroupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.sn = None # Id_expressionContext
            self.fg = None # Id_expressionContext
            self.an = None # Token
            self.av = None # Token

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DISKGROUP(self):
            return self.getToken(PlSqlParser.DISKGROUP, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def REDUNDANCY(self):
            return self.getToken(PlSqlParser.REDUNDANCY, 0)

        def DISK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISK)
            else:
                return self.getToken(PlSqlParser.DISK, i)

        def qualified_disk_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Qualified_disk_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Qualified_disk_clauseContext,i)


        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def EQUALS_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EQUALS_OP)
            else:
                return self.getToken(PlSqlParser.EQUALS_OP, i)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def NORMAL(self):
            return self.getToken(PlSqlParser.NORMAL, 0)

        def FLEX(self):
            return self.getToken(PlSqlParser.FLEX, 0)

        def EXTENDED(self):
            return self.getToken(PlSqlParser.EXTENDED, 0)

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def quorum_regular(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quorum_regularContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quorum_regularContext,i)


        def FAILGROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FAILGROUP)
            else:
                return self.getToken(PlSqlParser.FAILGROUP, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def SITE(self):
            return self.getToken(PlSqlParser.SITE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_diskgroup

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_diskgroup" ):
                listener.enterCreate_diskgroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_diskgroup" ):
                listener.exitCreate_diskgroup(self)




    def create_diskgroup(self):

        localctx = PlSqlParser.Create_diskgroupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 446, self.RULE_create_diskgroup)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5846
            self.match(PlSqlParser.CREATE)
            self.state = 5847
            self.match(PlSqlParser.DISKGROUP)
            self.state = 5848
            self.id_expression()
            self.state = 5861
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==523 or _la==569 or _la==634 or _la==1115 or _la==2276:
                self.state = 5858
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [634]:
                    self.state = 5849
                    self.match(PlSqlParser.HIGH)
                    pass
                elif token in [1115]:
                    self.state = 5850
                    self.match(PlSqlParser.NORMAL)
                    pass
                elif token in [569]:
                    self.state = 5851
                    self.match(PlSqlParser.FLEX)
                    pass
                elif token in [2276]:
                    self.state = 5852
                    self.match(PlSqlParser.EXTENDED)
                    self.state = 5855
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1606:
                        self.state = 5853
                        self.match(PlSqlParser.SITE)
                        self.state = 5854
                        localctx.sn = self.id_expression()


                    pass
                elif token in [523]:
                    self.state = 5857
                    self.match(PlSqlParser.EXTERNAL)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 5860
                self.match(PlSqlParser.REDUNDANCY)


            self.state = 5879 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 5864
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1414 or _la==1470:
                    self.state = 5863
                    self.quorum_regular()


                self.state = 5868
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==535:
                    self.state = 5866
                    self.match(PlSqlParser.FAILGROUP)
                    self.state = 5867
                    localctx.fg = self.id_expression()


                self.state = 5870
                self.match(PlSqlParser.DISK)
                self.state = 5871
                self.qualified_disk_clause()
                self.state = 5876
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5872
                    self.match(PlSqlParser.COMMA)
                    self.state = 5873
                    self.qualified_disk_clause()
                    self.state = 5878
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 5881 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==412 or _la==535 or _la==1414 or _la==1470):
                    break

            self.state = 5896
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==81:
                self.state = 5883
                self.match(PlSqlParser.ATTRIBUTE)
                self.state = 5884
                localctx.an = self.match(PlSqlParser.CHAR_STRING)
                self.state = 5885
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 5886
                localctx.av = self.match(PlSqlParser.CHAR_STRING)
                self.state = 5893
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 5887
                    self.match(PlSqlParser.COMMA)
                    self.state = 5888
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 5889
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 5890
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 5895
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Qualified_disk_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ss = None # Token
            self.dn = None # Id_expressionContext

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def force_noforce(self):
            return self.getTypedRuleContext(PlSqlParser.Force_noforceContext,0)


        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_qualified_disk_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQualified_disk_clause" ):
                listener.enterQualified_disk_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQualified_disk_clause" ):
                listener.exitQualified_disk_clause(self)




    def qualified_disk_clause(self):

        localctx = PlSqlParser.Qualified_disk_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 448, self.RULE_qualified_disk_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5898
            localctx.ss = self.match(PlSqlParser.CHAR_STRING)
            self.state = 5901
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==943:
                self.state = 5899
                self.match(PlSqlParser.NAME)
                self.state = 5900
                localctx.dn = self.id_expression()


            self.state = 5905
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1617:
                self.state = 5903
                self.match(PlSqlParser.SIZE)
                self.state = 5904
                self.size_clause()


            self.state = 5908
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1044:
                self.state = 5907
                self.force_noforce()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_editionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.e = None # Id_expressionContext
            self.pe = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def CHILD(self):
            return self.getToken(PlSqlParser.CHILD, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_edition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_edition" ):
                listener.enterCreate_edition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_edition" ):
                listener.exitCreate_edition(self)




    def create_edition(self):

        localctx = PlSqlParser.Create_editionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 450, self.RULE_create_edition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5910
            self.match(PlSqlParser.CREATE)
            self.state = 5911
            self.match(PlSqlParser.EDITION)
            self.state = 5912
            localctx.e = self.id_expression()
            self.state = 5917
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 5913
                self.match(PlSqlParser.AS)
                self.state = 5914
                self.match(PlSqlParser.CHILD)
                self.state = 5915
                self.match(PlSqlParser.OF)
                self.state = 5916
                localctx.pe = self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_flashback_archiveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fa = None # Id_expressionContext
            self.ts = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def flashback_archive_retention(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_archive_retentionContext,0)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def flashback_archive_quota(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_archive_quotaContext,0)


        def OPTIMIZE(self):
            return self.getToken(PlSqlParser.OPTIMIZE, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_flashback_archive

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_flashback_archive" ):
                listener.enterCreate_flashback_archive(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_flashback_archive" ):
                listener.exitCreate_flashback_archive(self)




    def create_flashback_archive(self):

        localctx = PlSqlParser.Create_flashback_archiveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 452, self.RULE_create_flashback_archive)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5919
            self.match(PlSqlParser.CREATE)
            self.state = 5920
            self.match(PlSqlParser.FLASHBACK)
            self.state = 5921
            self.match(PlSqlParser.ARCHIVE)
            self.state = 5923
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 5922
                self.match(PlSqlParser.DEFAULT)


            self.state = 5925
            localctx.fa = self.id_expression()
            self.state = 5926
            self.match(PlSqlParser.TABLESPACE)
            self.state = 5927
            localctx.ts = self.id_expression()
            self.state = 5929
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1415:
                self.state = 5928
                self.flashback_archive_quota()


            self.state = 5936
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1074 or _la==1203:
                self.state = 5932
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 5931
                    self.match(PlSqlParser.NO)


                self.state = 5934
                self.match(PlSqlParser.OPTIMIZE)
                self.state = 5935
                self.match(PlSqlParser.DATA)


            self.state = 5938
            self.flashback_archive_retention()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Flashback_archive_quotaContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def QUOTA(self):
            return self.getToken(PlSqlParser.QUOTA, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def M_LETTER(self):
            return self.getToken(PlSqlParser.M_LETTER, 0)

        def G_LETTER(self):
            return self.getToken(PlSqlParser.G_LETTER, 0)

        def T_LETTER(self):
            return self.getToken(PlSqlParser.T_LETTER, 0)

        def P_LETTER(self):
            return self.getToken(PlSqlParser.P_LETTER, 0)

        def E_LETTER(self):
            return self.getToken(PlSqlParser.E_LETTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_flashback_archive_quota

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlashback_archive_quota" ):
                listener.enterFlashback_archive_quota(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlashback_archive_quota" ):
                listener.exitFlashback_archive_quota(self)




    def flashback_archive_quota(self):

        localctx = PlSqlParser.Flashback_archive_quotaContext(self, self._ctx, self.state)
        self.enterRule(localctx, 454, self.RULE_flashback_archive_quota)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5940
            self.match(PlSqlParser.QUOTA)
            self.state = 5941
            self.match(PlSqlParser.UNSIGNED_INTEGER)
            self.state = 5942
            _la = self._input.LA(1)
            if not(_la==449 or _la==595 or _la==848 or _la==1256 or _la==1993):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Flashback_archive_retentionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETENTION(self):
            return self.getToken(PlSqlParser.RETENTION, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def DAY(self):
            return self.getToken(PlSqlParser.DAY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_flashback_archive_retention

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlashback_archive_retention" ):
                listener.enterFlashback_archive_retention(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlashback_archive_retention" ):
                listener.exitFlashback_archive_retention(self)




    def flashback_archive_retention(self):

        localctx = PlSqlParser.Flashback_archive_retentionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 456, self.RULE_flashback_archive_retention)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5944
            self.match(PlSqlParser.RETENTION)
            self.state = 5945
            self.match(PlSqlParser.UNSIGNED_INTEGER)
            self.state = 5946
            _la = self._input.LA(1)
            if not(_la==346 or _la==931 or _la==2260):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_hierarchyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.h = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def hier_using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Hier_using_clauseContext,0)


        def level_hier_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Level_hier_clauseContext,0)


        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def hier_attrs_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Hier_attrs_clauseContext,0)


        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_hierarchy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_hierarchy" ):
                listener.enterCreate_hierarchy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_hierarchy" ):
                listener.exitCreate_hierarchy(self)




    def create_hierarchy(self):

        localctx = PlSqlParser.Create_hierarchyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 458, self.RULE_create_hierarchy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5948
            self.match(PlSqlParser.CREATE)
            self.state = 5951
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 5949
                self.match(PlSqlParser.OR)
                self.state = 5950
                self.match(PlSqlParser.REPLACE)


            self.state = 5957
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1074:
                self.state = 5954
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 5953
                    self.match(PlSqlParser.NO)


                self.state = 5956
                self.match(PlSqlParser.FORCE)


            self.state = 5959
            self.match(PlSqlParser.HIERARCHY)
            self.state = 5963
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,530,self._ctx)
            if la_ == 1:
                self.state = 5960
                self.schema_name()
                self.state = 5961
                self.match(PlSqlParser.PERIOD)


            self.state = 5965
            localctx.h = self.id_expression()
            self.state = 5969
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 5966
                self.match(PlSqlParser.SHARING)
                self.state = 5967
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 5968
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 5974
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 5971
                self.classification_clause()
                self.state = 5976
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 5977
            self.hier_using_clause()
            self.state = 5978
            self.level_hier_clause()
            self.state = 5980
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==631:
                self.state = 5979
                self.hier_attrs_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hier_using_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ad = None # Id_expressionContext

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hier_using_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHier_using_clause" ):
                listener.enterHier_using_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHier_using_clause" ):
                listener.exitHier_using_clause(self)




    def hier_using_clause(self):

        localctx = PlSqlParser.Hier_using_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 460, self.RULE_hier_using_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5982
            self.match(PlSqlParser.USING)
            self.state = 5986
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,534,self._ctx)
            if la_ == 1:
                self.state = 5983
                self.schema_name()
                self.state = 5984
                self.match(PlSqlParser.PERIOD)


            self.state = 5988
            localctx.ad = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Level_hier_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.l = None # Id_expressionContext

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def CHILD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHILD)
            else:
                return self.getToken(PlSqlParser.CHILD, i)

        def OF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OF)
            else:
                return self.getToken(PlSqlParser.OF, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_level_hier_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevel_hier_clause" ):
                listener.enterLevel_hier_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevel_hier_clause" ):
                listener.exitLevel_hier_clause(self)




    def level_hier_clause(self):

        localctx = PlSqlParser.Level_hier_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 462, self.RULE_level_hier_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 5990
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 5996 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 5991
                localctx.l = self.id_expression()
                self.state = 5994
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,535,self._ctx)
                if la_ == 1:
                    self.state = 5992
                    self.match(PlSqlParser.CHILD)
                    self.state = 5993
                    self.match(PlSqlParser.OF)


                self.state = 5998 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378):
                    break

            self.state = 6000
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hier_attrs_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HIERARCHICAL(self):
            return self.getToken(PlSqlParser.HIERARCHICAL, 0)

        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def hier_attr_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Hier_attr_clauseContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hier_attrs_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHier_attrs_clause" ):
                listener.enterHier_attrs_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHier_attrs_clause" ):
                listener.exitHier_attrs_clause(self)




    def hier_attrs_clause(self):

        localctx = PlSqlParser.Hier_attrs_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 464, self.RULE_hier_attrs_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6002
            self.match(PlSqlParser.HIERARCHICAL)
            self.state = 6003
            self.match(PlSqlParser.ATTRIBUTES)
            self.state = 6004
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6005
            self.hier_attr_clause()
            self.state = 6006
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hier_attr_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def hier_attr_name(self):
            return self.getTypedRuleContext(PlSqlParser.Hier_attr_nameContext,0)


        def classification_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Classification_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Classification_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_hier_attr_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHier_attr_clause" ):
                listener.enterHier_attr_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHier_attr_clause" ):
                listener.exitHier_attr_clause(self)




    def hier_attr_clause(self):

        localctx = PlSqlParser.Hier_attr_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 466, self.RULE_hier_attr_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6008
            self.hier_attr_name()
            self.state = 6012
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==169 or _la==197 or _la==392:
                self.state = 6009
                self.classification_clause()
                self.state = 6014
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hier_attr_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMBER_NAME(self):
            return self.getToken(PlSqlParser.MEMBER_NAME, 0)

        def MEMBER_UNIQUE_NAME(self):
            return self.getToken(PlSqlParser.MEMBER_UNIQUE_NAME, 0)

        def MEMBER_CAPTION(self):
            return self.getToken(PlSqlParser.MEMBER_CAPTION, 0)

        def MEMBER_DESCRIPTION(self):
            return self.getToken(PlSqlParser.MEMBER_DESCRIPTION, 0)

        def LEVEL_NAME(self):
            return self.getToken(PlSqlParser.LEVEL_NAME, 0)

        def HIER_ORDER(self):
            return self.getToken(PlSqlParser.HIER_ORDER, 0)

        def DEPTH(self):
            return self.getToken(PlSqlParser.DEPTH, 0)

        def IS_LEAF(self):
            return self.getToken(PlSqlParser.IS_LEAF, 0)

        def PARENT_LEVEL_NAME(self):
            return self.getToken(PlSqlParser.PARENT_LEVEL_NAME, 0)

        def PARENT_UNIQUE_NAME(self):
            return self.getToken(PlSqlParser.PARENT_UNIQUE_NAME, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hier_attr_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHier_attr_name" ):
                listener.enterHier_attr_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHier_attr_name" ):
                listener.exitHier_attr_name(self)




    def hier_attr_name(self):

        localctx = PlSqlParser.Hier_attr_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 468, self.RULE_hier_attr_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6015
            _la = self._input.LA(1)
            if not(_la==387 or _la==630 or _la==741 or _la==799 or ((((_la - 883)) & ~0x3f) == 0 and ((1 << (_la - 883)) & 15) != 0) or _la==1266 or _la==1267):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_indexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def cluster_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_index_clauseContext,0)


        def table_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Table_index_clauseContext,0)


        def bitmap_join_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Bitmap_join_index_clauseContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def INVALIDATION(self):
            return self.getToken(PlSqlParser.INVALIDATION, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def BITMAP(self):
            return self.getToken(PlSqlParser.BITMAP, 0)

        def USABLE(self):
            return self.getToken(PlSqlParser.USABLE, 0)

        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def DEFERRED(self):
            return self.getToken(PlSqlParser.DEFERRED, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_index

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_index" ):
                listener.enterCreate_index(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_index" ):
                listener.exitCreate_index(self)




    def create_index(self):

        localctx = PlSqlParser.Create_indexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 470, self.RULE_create_index)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6017
            self.match(PlSqlParser.CREATE)
            self.state = 6019
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==132 or _la==2091:
                self.state = 6018
                _la = self._input.LA(1)
                if not(_la==132 or _la==2091):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6021
            self.match(PlSqlParser.INDEX)
            self.state = 6022
            self.index_name()
            self.state = 6026
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 6023
                self.match(PlSqlParser.IF)
                self.state = 6024
                self.match(PlSqlParser.NOT)
                self.state = 6025
                self.match(PlSqlParser.EXISTS)


            self.state = 6028
            self.match(PlSqlParser.ON)
            self.state = 6032
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,540,self._ctx)
            if la_ == 1:
                self.state = 6029
                self.cluster_index_clause()
                pass

            elif la_ == 2:
                self.state = 6030
                self.table_index_clause()
                pass

            elif la_ == 3:
                self.state = 6031
                self.bitmap_join_index_clause()
                pass


            self.state = 6035
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2110 or _la==2122:
                self.state = 6034
                _la = self._input.LA(1)
                if not(_la==2110 or _la==2122):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6039
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==373 or _la==656:
                self.state = 6037
                _la = self._input.LA(1)
                if not(_la==373 or _la==656):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 6038
                self.match(PlSqlParser.INVALIDATION)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cluster_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def index_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Index_attributesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cluster_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCluster_index_clause" ):
                listener.enterCluster_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCluster_index_clause" ):
                listener.exitCluster_index_clause(self)




    def cluster_index_clause(self):

        localctx = PlSqlParser.Cluster_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 472, self.RULE_cluster_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6041
            self.match(PlSqlParser.CLUSTER)
            self.state = 6042
            self.cluster_name()
            self.state = 6044
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==247 or _la==554 or _la==701 or _la==738 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1085 or _la==1123 or ((((_la - 1261)) & ~0x3f) == 0 and ((1 << (_la - 1261)) & 309237645313) != 0) or _la==1510 or _la==1626 or _la==1678 or _la==1996 or _la==2194:
                self.state = 6043
                self.index_attributes()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cluster_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cluster_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCluster_name" ):
                listener.enterCluster_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCluster_name" ):
                listener.exitCluster_name(self)




    def cluster_name(self):

        localctx = PlSqlParser.Cluster_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 474, self.RULE_cluster_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6049
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,544,self._ctx)
            if la_ == 1:
                self.state = 6046
                self.id_expression()
                self.state = 6047
                self.match(PlSqlParser.PERIOD)


            self.state = 6051
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def index_expr(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Index_exprContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Index_exprContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def table_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def index_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Index_propertiesContext,0)


        def ASC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ASC)
            else:
                return self.getToken(PlSqlParser.ASC, i)

        def DESC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DESC)
            else:
                return self.getToken(PlSqlParser.DESC, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_table_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_index_clause" ):
                listener.enterTable_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_index_clause" ):
                listener.exitTable_index_clause(self)




    def table_index_clause(self):

        localctx = PlSqlParser.Table_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 476, self.RULE_table_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6053
            self.tableview_name()
            self.state = 6055
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                self.state = 6054
                self.table_alias()


            self.state = 6057
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6058
            self.index_expr()
            self.state = 6060
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==68 or _la==391:
                self.state = 6059
                _la = self._input.LA(1)
                if not(_la==68 or _la==391):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6069
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6062
                self.match(PlSqlParser.COMMA)
                self.state = 6063
                self.index_expr()
                self.state = 6065
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68 or _la==391:
                    self.state = 6064
                    _la = self._input.LA(1)
                    if not(_la==68 or _la==391):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 6071
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6072
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 6074
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==247 or _la==554 or _la==602 or ((((_la - 689)) & ~0x3f) == 0 and ((1 << (_la - 689)) & 562949953425409) != 0) or ((((_la - 821)) & ~0x3f) == 0 and ((1 << (_la - 821)) & 72057594037929985) != 0) or _la==1017 or _la==1057 or _la==1085 or _la==1123 or ((((_la - 1261)) & ~0x3f) == 0 and ((1 << (_la - 1261)) & 309237645313) != 0) or _la==1510 or _la==1626 or _la==1678 or _la==1996 or _la==2194:
                self.state = 6073
                self.index_properties()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Bitmap_join_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tableview_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def table_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,i)


        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def local_partitioned_index(self):
            return self.getTypedRuleContext(PlSqlParser.Local_partitioned_indexContext,0)


        def index_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Index_attributesContext,0)


        def ASC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ASC)
            else:
                return self.getToken(PlSqlParser.ASC, i)

        def DESC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DESC)
            else:
                return self.getToken(PlSqlParser.DESC, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_bitmap_join_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBitmap_join_index_clause" ):
                listener.enterBitmap_join_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBitmap_join_index_clause" ):
                listener.exitBitmap_join_index_clause(self)




    def bitmap_join_index_clause(self):

        localctx = PlSqlParser.Bitmap_join_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 478, self.RULE_bitmap_join_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6076
            self.tableview_name()
            self.state = 6077
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6080
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,550,self._ctx)
            if la_ == 1:
                self.state = 6078
                self.tableview_name()

            elif la_ == 2:
                self.state = 6079
                self.table_alias()


            self.state = 6082
            self.column_name()
            self.state = 6084
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==68 or _la==391:
                self.state = 6083
                _la = self._input.LA(1)
                if not(_la==68 or _la==391):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 6097
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6086
                self.match(PlSqlParser.COMMA)
                self.state = 6089
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,552,self._ctx)
                if la_ == 1:
                    self.state = 6087
                    self.tableview_name()

                elif la_ == 2:
                    self.state = 6088
                    self.table_alias()


                self.state = 6091
                self.column_name()
                self.state = 6093
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68 or _la==391:
                    self.state = 6092
                    _la = self._input.LA(1)
                    if not(_la==68 or _la==391):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 6099
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6100
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 6101
            self.match(PlSqlParser.FROM)
            self.state = 6102
            self.tableview_name()
            self.state = 6103
            self.table_alias()
            self.state = 6110
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6104
                self.match(PlSqlParser.COMMA)
                self.state = 6105
                self.tableview_name()
                self.state = 6106
                self.table_alias()
                self.state = 6112
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6113
            self.where_clause()
            self.state = 6115
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==821:
                self.state = 6114
                self.local_partitioned_index()


            self.state = 6118
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==247 or _la==554 or _la==701 or _la==738 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1085 or _la==1123 or ((((_la - 1261)) & ~0x3f) == 0 and ((1 << (_la - 1261)) & 309237645313) != 0) or _la==1510 or _la==1626 or _la==1678 or _la==1996 or _la==2194:
                self.state = 6117
                self.index_attributes()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_exprContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_expr

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_expr" ):
                listener.enterIndex_expr(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_expr" ):
                listener.exitIndex_expr(self)




    def index_expr(self):

        localctx = PlSqlParser.Index_exprContext(self, self._ctx, self.state)
        self.enterRule(localctx, 480, self.RULE_index_expr)
        try:
            self.state = 6122
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,558,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6120
                self.column_name()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6121
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def global_partitioned_index(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Global_partitioned_indexContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Global_partitioned_indexContext,i)


        def local_partitioned_index(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Local_partitioned_indexContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Local_partitioned_indexContext,i)


        def index_attributes(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Index_attributesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Index_attributesContext,i)


        def INDEXTYPE(self):
            return self.getToken(PlSqlParser.INDEXTYPE, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def domain_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Domain_index_clauseContext,0)


        def xmlindex_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlindex_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_properties" ):
                listener.enterIndex_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_properties" ):
                listener.exitIndex_properties(self)




    def index_properties(self):

        localctx = PlSqlParser.Index_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 482, self.RULE_index_properties)
        self._la = 0 # Token type
        try:
            self.state = 6137
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [246, 247, 554, 602, 701, 738, 821, 832, 877, 1017, 1057, 1085, 1123, 1261, 1296, 1299, 1510, 1626, 1678, 1996, 2194]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6127 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 6127
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [602]:
                        self.state = 6124
                        self.global_partitioned_index()
                        pass
                    elif token in [821]:
                        self.state = 6125
                        self.local_partitioned_index()
                        pass
                    elif token in [246, 247, 554, 701, 738, 832, 877, 1017, 1057, 1085, 1123, 1261, 1296, 1299, 1510, 1626, 1678, 1996, 2194]:
                        self.state = 6126
                        self.index_attributes()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 6129 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==246 or _la==247 or _la==554 or _la==602 or _la==701 or _la==738 or ((((_la - 821)) & ~0x3f) == 0 and ((1 << (_la - 821)) & 72057594037929985) != 0) or _la==1017 or _la==1057 or _la==1085 or _la==1123 or ((((_la - 1261)) & ~0x3f) == 0 and ((1 << (_la - 1261)) & 309237645313) != 0) or _la==1510 or _la==1626 or _la==1678 or _la==1996 or _la==2194):
                        break

                pass
            elif token in [689]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6131
                self.match(PlSqlParser.INDEXTYPE)
                self.state = 6132
                self.match(PlSqlParser.IS)
                self.state = 6135
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                    self.state = 6133
                    self.domain_index_clause()
                    pass
                elif token in [2218, 2235]:
                    self.state = 6134
                    self.xmlindex_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Domain_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def indextype(self):
            return self.getTypedRuleContext(PlSqlParser.IndextypeContext,0)


        def local_domain_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Local_domain_index_clauseContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def odci_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Odci_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_domain_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDomain_index_clause" ):
                listener.enterDomain_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDomain_index_clause" ):
                listener.exitDomain_index_clause(self)




    def domain_index_clause(self):

        localctx = PlSqlParser.Domain_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 484, self.RULE_domain_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6139
            self.indextype()
            self.state = 6141
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==821:
                self.state = 6140
                self.local_domain_index_clause()


            self.state = 6144
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 6143
                self.parallel_clause()


            self.state = 6151
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1263:
                self.state = 6146
                self.match(PlSqlParser.PARAMETERS)
                self.state = 6147
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6148
                self.odci_parameters()
                self.state = 6149
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Local_domain_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def PARAMETERS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARAMETERS)
            else:
                return self.getToken(PlSqlParser.PARAMETERS, i)

        def odci_parameters(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Odci_parametersContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Odci_parametersContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_local_domain_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLocal_domain_index_clause" ):
                listener.enterLocal_domain_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLocal_domain_index_clause" ):
                listener.exitLocal_domain_index_clause(self)




    def local_domain_index_clause(self):

        localctx = PlSqlParser.Local_domain_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 486, self.RULE_local_domain_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6153
            self.match(PlSqlParser.LOCAL)
            self.state = 6181
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 6154
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6155
                self.match(PlSqlParser.PARTITION)
                self.state = 6156
                self.partition_name()
                self.state = 6162
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1263:
                    self.state = 6157
                    self.match(PlSqlParser.PARAMETERS)
                    self.state = 6158
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 6159
                    self.odci_parameters()
                    self.state = 6160
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 6176
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6164
                    self.match(PlSqlParser.COMMA)
                    self.state = 6165
                    self.match(PlSqlParser.PARTITION)
                    self.state = 6166
                    self.partition_name()
                    self.state = 6172
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1263:
                        self.state = 6167
                        self.match(PlSqlParser.PARAMETERS)
                        self.state = 6168
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 6169
                        self.odci_parameters()
                        self.state = 6170
                        self.match(PlSqlParser.RIGHT_PAREN)


                    self.state = 6178
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6179
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlindex_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XMLINDEX(self):
            return self.getToken(PlSqlParser.XMLINDEX, 0)

        def XDB(self):
            return self.getToken(PlSqlParser.XDB, 0)

        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def local_xmlindex_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Local_xmlindex_clauseContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlindex_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlindex_clause" ):
                listener.enterXmlindex_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlindex_clause" ):
                listener.exitXmlindex_clause(self)




    def xmlindex_clause(self):

        localctx = PlSqlParser.Xmlindex_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 488, self.RULE_xmlindex_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6185
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2218:
                self.state = 6183
                self.match(PlSqlParser.XDB)
                self.state = 6184
                self.match(PlSqlParser.PERIOD)


            self.state = 6187
            self.match(PlSqlParser.XMLINDEX)
            self.state = 6189
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==821:
                self.state = 6188
                self.local_xmlindex_clause()


            self.state = 6192
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 6191
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Local_xmlindex_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_local_xmlindex_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLocal_xmlindex_clause" ):
                listener.enterLocal_xmlindex_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLocal_xmlindex_clause" ):
                listener.exitLocal_xmlindex_clause(self)




    def local_xmlindex_clause(self):

        localctx = PlSqlParser.Local_xmlindex_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 490, self.RULE_local_xmlindex_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6194
            self.match(PlSqlParser.LOCAL)
            self.state = 6208
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 6195
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6196
                self.match(PlSqlParser.PARTITION)
                self.state = 6197
                self.partition_name()
                self.state = 6203
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6198
                    self.match(PlSqlParser.COMMA)
                    self.state = 6199
                    self.match(PlSqlParser.PARTITION)
                    self.state = 6200
                    self.partition_name()
                    self.state = 6205
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6206
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Global_partitioned_indexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GLOBAL(self):
            return self.getToken(PlSqlParser.GLOBAL, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def index_partitioning_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Index_partitioning_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Index_partitioning_clauseContext,i)


        def HASH(self):
            return self.getToken(PlSqlParser.HASH, 0)

        def individual_hash_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Individual_hash_partitionsContext,0)


        def hash_partitions_by_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_partitions_by_quantityContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_global_partitioned_index

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGlobal_partitioned_index" ):
                listener.enterGlobal_partitioned_index(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGlobal_partitioned_index" ):
                listener.exitGlobal_partitioned_index(self)




    def global_partitioned_index(self):

        localctx = PlSqlParser.Global_partitioned_indexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 492, self.RULE_global_partitioned_index)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6210
            self.match(PlSqlParser.GLOBAL)
            self.state = 6211
            self.match(PlSqlParser.PARTITION)
            self.state = 6212
            self.match(PlSqlParser.BY)
            self.state = 6250
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1420]:
                self.state = 6213
                self.match(PlSqlParser.RANGE)
                self.state = 6214
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6215
                self.column_name()
                self.state = 6220
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6216
                    self.match(PlSqlParser.COMMA)
                    self.state = 6217
                    self.column_name()
                    self.state = 6222
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6223
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 6224
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6225
                self.index_partitioning_clause()
                self.state = 6230
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6226
                    self.match(PlSqlParser.COMMA)
                    self.state = 6227
                    self.index_partitioning_clause()
                    self.state = 6232
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6233
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [619]:
                self.state = 6235
                self.match(PlSqlParser.HASH)
                self.state = 6236
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6237
                self.column_name()
                self.state = 6242
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6238
                    self.match(PlSqlParser.COMMA)
                    self.state = 6239
                    self.column_name()
                    self.state = 6244
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6245
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 6248
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2347]:
                    self.state = 6246
                    self.individual_hash_partitions()
                    pass
                elif token in [1277]:
                    self.state = 6247
                    self.hash_partitions_by_quantity()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_partitioning_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def LESS(self):
            return self.getToken(PlSqlParser.LESS, 0)

        def THAN(self):
            return self.getToken(PlSqlParser.THAN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def index_partitioning_values_list(self):
            return self.getTypedRuleContext(PlSqlParser.Index_partitioning_values_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def segment_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_partitioning_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_partitioning_clause" ):
                listener.enterIndex_partitioning_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_partitioning_clause" ):
                listener.exitIndex_partitioning_clause(self)




    def index_partitioning_clause(self):

        localctx = PlSqlParser.Index_partitioning_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 494, self.RULE_index_partitioning_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6252
            self.match(PlSqlParser.PARTITION)
            self.state = 6254
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 6253
                self.partition_name()


            self.state = 6256
            self.match(PlSqlParser.VALUES)
            self.state = 6257
            self.match(PlSqlParser.LESS)
            self.state = 6258
            self.match(PlSqlParser.THAN)
            self.state = 6259
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6260
            self.index_partitioning_values_list()
            self.state = 6261
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 6263
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                self.state = 6262
                self.segment_attributes_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_partitioning_values_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.LiteralContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.LiteralContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def TIMESTAMP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TIMESTAMP)
            else:
                return self.getToken(PlSqlParser.TIMESTAMP, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_index_partitioning_values_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_partitioning_values_list" ):
                listener.enterIndex_partitioning_values_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_partitioning_values_list" ):
                listener.exitIndex_partitioning_values_list(self)




    def index_partitioning_values_list(self):

        localctx = PlSqlParser.Index_partitioning_values_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 496, self.RULE_index_partitioning_values_list)
        self._la = 0 # Token type
        try:
            self.state = 6283
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [194, 878, 2301, 2311, 2316, 2317, 2318, 2325, 2341, 2342, 2343]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6265
                self.literal()
                self.state = 6270
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6266
                    self.match(PlSqlParser.COMMA)
                    self.state = 6267
                    self.literal()
                    self.state = 6272
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2020]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6273
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 6274
                self.literal()
                self.state = 6280
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6275
                    self.match(PlSqlParser.COMMA)
                    self.state = 6276
                    self.match(PlSqlParser.TIMESTAMP)
                    self.state = 6277
                    self.literal()
                    self.state = 6282
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Local_partitioned_indexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def on_range_partitioned_table(self):
            return self.getTypedRuleContext(PlSqlParser.On_range_partitioned_tableContext,0)


        def on_list_partitioned_table(self):
            return self.getTypedRuleContext(PlSqlParser.On_list_partitioned_tableContext,0)


        def on_hash_partitioned_table(self):
            return self.getTypedRuleContext(PlSqlParser.On_hash_partitioned_tableContext,0)


        def on_comp_partitioned_table(self):
            return self.getTypedRuleContext(PlSqlParser.On_comp_partitioned_tableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_local_partitioned_index

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLocal_partitioned_index" ):
                listener.enterLocal_partitioned_index(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLocal_partitioned_index" ):
                listener.exitLocal_partitioned_index(self)




    def local_partitioned_index(self):

        localctx = PlSqlParser.Local_partitioned_indexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 498, self.RULE_local_partitioned_index)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6285
            self.match(PlSqlParser.LOCAL)
            self.state = 6290
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,585,self._ctx)
            if la_ == 1:
                self.state = 6286
                self.on_range_partitioned_table()

            elif la_ == 2:
                self.state = 6287
                self.on_list_partitioned_table()

            elif la_ == 3:
                self.state = 6288
                self.on_hash_partitioned_table()

            elif la_ == 4:
                self.state = 6289
                self.on_comp_partitioned_table()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_range_partitioned_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def partitioned_table(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partitioned_tableContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partitioned_tableContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_on_range_partitioned_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_range_partitioned_table" ):
                listener.enterOn_range_partitioned_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_range_partitioned_table" ):
                listener.exitOn_range_partitioned_table(self)




    def on_range_partitioned_table(self):

        localctx = PlSqlParser.On_range_partitioned_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 500, self.RULE_on_range_partitioned_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6292
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6293
            self.partitioned_table()
            self.state = 6298
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6294
                self.match(PlSqlParser.COMMA)
                self.state = 6295
                self.partitioned_table()
                self.state = 6300
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6301
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_list_partitioned_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def partitioned_table(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partitioned_tableContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partitioned_tableContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_on_list_partitioned_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_list_partitioned_table" ):
                listener.enterOn_list_partitioned_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_list_partitioned_table" ):
                listener.exitOn_list_partitioned_table(self)




    def on_list_partitioned_table(self):

        localctx = PlSqlParser.On_list_partitioned_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 502, self.RULE_on_list_partitioned_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6303
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6304
            self.partitioned_table()
            self.state = 6309
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6305
                self.match(PlSqlParser.COMMA)
                self.state = 6306
                self.partitioned_table()
                self.state = 6311
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6312
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partitioned_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def segment_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,i)


        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_partitioned_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitioned_table" ):
                listener.enterPartitioned_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitioned_table" ):
                listener.exitPartitioned_table(self)




    def partitioned_table(self):

        localctx = PlSqlParser.Partitioned_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 504, self.RULE_partitioned_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6314
            self.match(PlSqlParser.PARTITION)
            self.state = 6316
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,588,self._ctx)
            if la_ == 1:
                self.state = 6315
                self.partition_name()


            self.state = 6322
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                self.state = 6320
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,589,self._ctx)
                if la_ == 1:
                    self.state = 6318
                    self.segment_attributes_clause()
                    pass

                elif la_ == 2:
                    self.state = 6319
                    self.key_compression()
                    pass


                self.state = 6324
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6326
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2110:
                self.state = 6325
                self.match(PlSqlParser.UNUSABLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_hash_partitioned_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def on_hash_partitioned_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.On_hash_partitioned_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.On_hash_partitioned_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_on_hash_partitioned_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_hash_partitioned_table" ):
                listener.enterOn_hash_partitioned_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_hash_partitioned_table" ):
                listener.exitOn_hash_partitioned_table(self)




    def on_hash_partitioned_table(self):

        localctx = PlSqlParser.On_hash_partitioned_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 506, self.RULE_on_hash_partitioned_table)
        self._la = 0 # Token type
        try:
            self.state = 6352
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1679]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6328
                self.match(PlSqlParser.STORE)
                self.state = 6329
                self.match(PlSqlParser.IN)
                self.state = 6330
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6331
                self.tablespace()
                self.state = 6336
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6332
                    self.match(PlSqlParser.COMMA)
                    self.state = 6333
                    self.tablespace()
                    self.state = 6338
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6339
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6341
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6342
                self.on_hash_partitioned_clause()
                self.state = 6347
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6343
                    self.match(PlSqlParser.COMMA)
                    self.state = 6344
                    self.on_hash_partitioned_clause()
                    self.state = 6349
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6350
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_hash_partitioned_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_on_hash_partitioned_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_hash_partitioned_clause" ):
                listener.enterOn_hash_partitioned_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_hash_partitioned_clause" ):
                listener.exitOn_hash_partitioned_clause(self)




    def on_hash_partitioned_clause(self):

        localctx = PlSqlParser.On_hash_partitioned_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 508, self.RULE_on_hash_partitioned_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6354
            self.match(PlSqlParser.PARTITION)
            self.state = 6356
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,595,self._ctx)
            if la_ == 1:
                self.state = 6355
                self.partition_name()


            self.state = 6360
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1996:
                self.state = 6358
                self.match(PlSqlParser.TABLESPACE)
                self.state = 6359
                self.tablespace()


            self.state = 6363
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==1017:
                self.state = 6362
                self.key_compression()


            self.state = 6366
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2110:
                self.state = 6365
                self.match(PlSqlParser.UNUSABLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_comp_partitioned_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def on_comp_partitioned_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.On_comp_partitioned_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.On_comp_partitioned_clauseContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_on_comp_partitioned_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_comp_partitioned_table" ):
                listener.enterOn_comp_partitioned_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_comp_partitioned_table" ):
                listener.exitOn_comp_partitioned_table(self)




    def on_comp_partitioned_table(self):

        localctx = PlSqlParser.On_comp_partitioned_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 510, self.RULE_on_comp_partitioned_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6381
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679:
                self.state = 6368
                self.match(PlSqlParser.STORE)
                self.state = 6369
                self.match(PlSqlParser.IN)
                self.state = 6370
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6371
                self.tablespace()
                self.state = 6376
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6372
                    self.match(PlSqlParser.COMMA)
                    self.state = 6373
                    self.tablespace()
                    self.state = 6378
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6379
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 6383
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6384
            self.on_comp_partitioned_clause()
            self.state = 6389
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6385
                self.match(PlSqlParser.COMMA)
                self.state = 6386
                self.on_comp_partitioned_clause()
                self.state = 6391
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6392
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_comp_partitioned_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def segment_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,i)


        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def index_subpartition_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Index_subpartition_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_on_comp_partitioned_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_comp_partitioned_clause" ):
                listener.enterOn_comp_partitioned_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_comp_partitioned_clause" ):
                listener.exitOn_comp_partitioned_clause(self)




    def on_comp_partitioned_clause(self):

        localctx = PlSqlParser.On_comp_partitioned_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 512, self.RULE_on_comp_partitioned_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6394
            self.match(PlSqlParser.PARTITION)
            self.state = 6396
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,602,self._ctx)
            if la_ == 1:
                self.state = 6395
                self.partition_name()


            self.state = 6402
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                self.state = 6400
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,603,self._ctx)
                if la_ == 1:
                    self.state = 6398
                    self.segment_attributes_clause()
                    pass

                elif la_ == 2:
                    self.state = 6399
                    self.key_compression()
                    pass


                self.state = 6404
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6405
            self.match(PlSqlParser.UNUSABLE)
            self.state = 6407
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679 or _la==2347:
                self.state = 6406
                self.index_subpartition_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_subpartition_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def index_subpartition_subclause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Index_subpartition_subclauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Index_subpartition_subclauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_subpartition_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_subpartition_clause" ):
                listener.enterIndex_subpartition_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_subpartition_clause" ):
                listener.exitIndex_subpartition_clause(self)




    def index_subpartition_clause(self):

        localctx = PlSqlParser.Index_subpartition_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 514, self.RULE_index_subpartition_clause)
        self._la = 0 # Token type
        try:
            self.state = 6433
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1679]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6409
                self.match(PlSqlParser.STORE)
                self.state = 6410
                self.match(PlSqlParser.IN)
                self.state = 6411
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6412
                self.tablespace()
                self.state = 6417
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6413
                    self.match(PlSqlParser.COMMA)
                    self.state = 6414
                    self.tablespace()
                    self.state = 6419
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6420
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6422
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6423
                self.index_subpartition_subclause()
                self.state = 6428
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6424
                    self.match(PlSqlParser.COMMA)
                    self.state = 6425
                    self.index_subpartition_subclause()
                    self.state = 6430
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6431
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_subpartition_subclauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_index_subpartition_subclause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_subpartition_subclause" ):
                listener.enterIndex_subpartition_subclause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_subpartition_subclause" ):
                listener.exitIndex_subpartition_subclause(self)




    def index_subpartition_subclause(self):

        localctx = PlSqlParser.Index_subpartition_subclauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 516, self.RULE_index_subpartition_subclause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6435
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 6437
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,609,self._ctx)
            if la_ == 1:
                self.state = 6436
                self.subpartition_name()


            self.state = 6441
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1996:
                self.state = 6439
                self.match(PlSqlParser.TABLESPACE)
                self.state = 6440
                self.tablespace()


            self.state = 6444
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==1017:
                self.state = 6443
                self.key_compression()


            self.state = 6447
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2110:
                self.state = 6446
                self.match(PlSqlParser.UNUSABLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Odci_parametersContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_odci_parameters

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOdci_parameters" ):
                listener.enterOdci_parameters(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOdci_parameters" ):
                listener.exitOdci_parameters(self)




    def odci_parameters(self):

        localctx = PlSqlParser.Odci_parametersContext(self, self._ctx, self.state)
        self.enterRule(localctx, 518, self.RULE_odci_parameters)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6449
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IndextypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_indextype

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndextype" ):
                listener.enterIndextype(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndextype" ):
                listener.exitIndextype(self)




    def indextype(self):

        localctx = PlSqlParser.IndextypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 520, self.RULE_indextype)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6454
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,613,self._ctx)
            if la_ == 1:
                self.state = 6451
                self.id_expression()
                self.state = 6452
                self.match(PlSqlParser.PERIOD)


            self.state = 6456
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_indexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def alter_index_ops_set1(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_index_ops_set1Context,0)


        def alter_index_ops_set2(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_index_ops_set2Context,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_index

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_index" ):
                listener.enterAlter_index(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_index" ):
                listener.exitAlter_index(self)




    def alter_index(self):

        localctx = PlSqlParser.Alter_indexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 522, self.RULE_alter_index)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6458
            self.match(PlSqlParser.ALTER)
            self.state = 6459
            self.match(PlSqlParser.INDEX)
            self.state = 6460
            self.index_name()
            self.state = 6463
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [39, 247, 356, 554, 701, 832, 877, 1057, 1085, 1261, 1296, 1299, 1602, 1678]:
                self.state = 6461
                self.alter_index_ops_set1()
                pass
            elif token in [21, 218, 237, 404, 438, 467, 738, 926, 929, 1065, 1263, 1434, 1481, 1634, 2110, 2114, 2194]:
                self.state = 6462
                self.alter_index_ops_set2()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_index_ops_set1Context(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def deallocate_unused_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Deallocate_unused_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,i)


        def allocate_extent_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allocate_extent_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,i)


        def shrink_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Shrink_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,i)


        def parallel_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,i)


        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_index_ops_set1

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_index_ops_set1" ):
                listener.enterAlter_index_ops_set1(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_index_ops_set1" ):
                listener.exitAlter_index_ops_set1(self)




    def alter_index_ops_set1(self):

        localctx = PlSqlParser.Alter_index_ops_set1Context(self, self._ctx, self.state)
        self.enterRule(localctx, 524, self.RULE_alter_index_ops_set1)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6471 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 6471
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [356]:
                    self.state = 6465
                    self.deallocate_unused_clause()
                    pass
                elif token in [39]:
                    self.state = 6466
                    self.allocate_extent_clause()
                    pass
                elif token in [1602]:
                    self.state = 6467
                    self.shrink_clause()
                    pass
                elif token in [1085, 1261]:
                    self.state = 6468
                    self.parallel_clause()
                    pass
                elif token in [247, 701, 877, 1296, 1299, 1678]:
                    self.state = 6469
                    self.physical_attributes_clause()
                    pass
                elif token in [554, 832, 1057]:
                    self.state = 6470
                    self.logging_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6473 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==39 or _la==247 or _la==356 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1057 or _la==1085 or ((((_la - 1261)) & ~0x3f) == 0 and ((1 << (_la - 1261)) & 309237645313) != 0) or _la==1602 or _la==1678):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_index_ops_set2Context(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def rebuild_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Rebuild_clauseContext,0)


        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def odci_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Odci_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def enable_or_disable(self):
            return self.getTypedRuleContext(PlSqlParser.Enable_or_disableContext,0)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def visible_or_invisible(self):
            return self.getTypedRuleContext(PlSqlParser.Visible_or_invisibleContext,0)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def new_index_name(self):
            return self.getTypedRuleContext(PlSqlParser.New_index_nameContext,0)


        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def monitoring_nomonitoring(self):
            return self.getTypedRuleContext(PlSqlParser.Monitoring_nomonitoringContext,0)


        def USAGE(self):
            return self.getToken(PlSqlParser.USAGE, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def BLOCK(self):
            return self.getToken(PlSqlParser.BLOCK, 0)

        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def alter_index_partitioning(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_index_partitioningContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_index_ops_set2

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_index_ops_set2" ):
                listener.enterAlter_index_ops_set2(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_index_ops_set2" ):
                listener.exitAlter_index_ops_set2(self)




    def alter_index_ops_set2(self):

        localctx = PlSqlParser.Alter_index_ops_set2Context(self, self._ctx, self.state)
        self.enterRule(localctx, 526, self.RULE_alter_index_ops_set2)
        try:
            self.state = 6496
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,617,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6475
                self.rebuild_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6476
                self.match(PlSqlParser.PARAMETERS)
                self.state = 6477
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6478
                self.odci_parameters()
                self.state = 6479
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6481
                self.match(PlSqlParser.COMPILE)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6482
                self.enable_or_disable()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 6483
                self.match(PlSqlParser.UNUSABLE)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 6484
                self.visible_or_invisible()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 6485
                self.match(PlSqlParser.RENAME)
                self.state = 6486
                self.match(PlSqlParser.TO)
                self.state = 6487
                self.new_index_name()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 6488
                self.match(PlSqlParser.COALESCE)
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 6489
                self.monitoring_nomonitoring()
                self.state = 6490
                self.match(PlSqlParser.USAGE)
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 6492
                self.match(PlSqlParser.UPDATE)
                self.state = 6493
                self.match(PlSqlParser.BLOCK)
                self.state = 6494
                self.match(PlSqlParser.REFERENCES)
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 6495
                self.alter_index_partitioning()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Visible_or_invisibleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VISIBLE(self):
            return self.getToken(PlSqlParser.VISIBLE, 0)

        def INVISIBLE(self):
            return self.getToken(PlSqlParser.INVISIBLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_visible_or_invisible

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVisible_or_invisible" ):
                listener.enterVisible_or_invisible(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVisible_or_invisible" ):
                listener.exitVisible_or_invisible(self)




    def visible_or_invisible(self):

        localctx = PlSqlParser.Visible_or_invisibleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 528, self.RULE_visible_or_invisible)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6498
            _la = self._input.LA(1)
            if not(_la==738 or _la==2194):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Monitoring_nomonitoringContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MONITORING(self):
            return self.getToken(PlSqlParser.MONITORING, 0)

        def NOMONITORING(self):
            return self.getToken(PlSqlParser.NOMONITORING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_monitoring_nomonitoring

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMonitoring_nomonitoring" ):
                listener.enterMonitoring_nomonitoring(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMonitoring_nomonitoring" ):
                listener.exitMonitoring_nomonitoring(self)




    def monitoring_nomonitoring(self):

        localctx = PlSqlParser.Monitoring_nomonitoringContext(self, self._ctx, self.state)
        self.enterRule(localctx, 530, self.RULE_monitoring_nomonitoring)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6500
            _la = self._input.LA(1)
            if not(_la==929 or _la==1065):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rebuild_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REBUILD(self):
            return self.getToken(PlSqlParser.REBUILD, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def REVERSE(self):
            return self.getToken(PlSqlParser.REVERSE, 0)

        def NOREVERSE(self):
            return self.getToken(PlSqlParser.NOREVERSE, 0)

        def parallel_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def PARAMETERS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARAMETERS)
            else:
                return self.getToken(PlSqlParser.PARAMETERS, i)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def odci_parameters(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Odci_parametersContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Odci_parametersContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def ONLINE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ONLINE)
            else:
                return self.getToken(PlSqlParser.ONLINE, i)

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_rebuild_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRebuild_clause" ):
                listener.enterRebuild_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRebuild_clause" ):
                listener.exitRebuild_clause(self)




    def rebuild_clause(self):

        localctx = PlSqlParser.Rebuild_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 532, self.RULE_rebuild_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6502
            self.match(PlSqlParser.REBUILD)
            self.state = 6509
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275]:
                self.state = 6503
                self.match(PlSqlParser.PARTITION)
                self.state = 6504
                self.partition_name()
                pass
            elif token in [1691]:
                self.state = 6505
                self.match(PlSqlParser.SUBPARTITION)
                self.state = 6506
                self.subpartition_name()
                pass
            elif token in [1510]:
                self.state = 6507
                self.match(PlSqlParser.REVERSE)
                pass
            elif token in [1112]:
                self.state = 6508
                self.match(PlSqlParser.NOREVERSE)
                pass
            elif token in [-1, 246, 247, 554, 701, 832, 877, 1017, 1057, 1085, 1190, 1261, 1263, 1296, 1299, 1678, 1996, 2354, 2367]:
                pass
            else:
                pass
            self.state = 6525
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1085 or _la==1190 or ((((_la - 1261)) & ~0x3f) == 0 and ((1 << (_la - 1261)) & 309237645317) != 0) or _la==1678 or _la==1996:
                self.state = 6523
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1085, 1261]:
                    self.state = 6511
                    self.parallel_clause()
                    pass
                elif token in [1996]:
                    self.state = 6512
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 6513
                    self.tablespace()
                    pass
                elif token in [1263]:
                    self.state = 6514
                    self.match(PlSqlParser.PARAMETERS)
                    self.state = 6515
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 6516
                    self.odci_parameters()
                    self.state = 6517
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                elif token in [1190]:
                    self.state = 6519
                    self.match(PlSqlParser.ONLINE)
                    pass
                elif token in [247, 701, 877, 1296, 1299, 1678]:
                    self.state = 6520
                    self.physical_attributes_clause()
                    pass
                elif token in [246, 1017]:
                    self.state = 6521
                    self.key_compression()
                    pass
                elif token in [554, 832, 1057]:
                    self.state = 6522
                    self.logging_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6527
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_index_partitioningContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def modify_index_default_attrs(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_index_default_attrsContext,0)


        def add_hash_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Add_hash_index_partitionContext,0)


        def modify_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_index_partitionContext,0)


        def rename_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Rename_index_partitionContext,0)


        def drop_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_index_partitionContext,0)


        def split_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Split_index_partitionContext,0)


        def coalesce_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Coalesce_index_partitionContext,0)


        def modify_index_subpartition(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_index_subpartitionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_index_partitioning

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_index_partitioning" ):
                listener.enterAlter_index_partitioning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_index_partitioning" ):
                listener.exitAlter_index_partitioning(self)




    def alter_index_partitioning(self):

        localctx = PlSqlParser.Alter_index_partitioningContext(self, self._ctx, self.state)
        self.enterRule(localctx, 534, self.RULE_alter_index_partitioning)
        try:
            self.state = 6536
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,621,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6528
                self.modify_index_default_attrs()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6529
                self.add_hash_index_partition()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6530
                self.modify_index_partition()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6531
                self.rename_index_partition()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 6532
                self.drop_index_partition()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 6533
                self.split_index_partition()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 6534
                self.coalesce_index_partition()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 6535
                self.modify_index_subpartition()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_index_default_attrsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def physical_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_index_default_attrs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_index_default_attrs" ):
                listener.enterModify_index_default_attrs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_index_default_attrs" ):
                listener.exitModify_index_default_attrs(self)




    def modify_index_default_attrs(self):

        localctx = PlSqlParser.Modify_index_default_attrsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 536, self.RULE_modify_index_default_attrs)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6538
            self.match(PlSqlParser.MODIFY)
            self.state = 6539
            self.match(PlSqlParser.DEFAULT)
            self.state = 6540
            self.match(PlSqlParser.ATTRIBUTES)
            self.state = 6544
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 6541
                self.match(PlSqlParser.FOR)
                self.state = 6542
                self.match(PlSqlParser.PARTITION)
                self.state = 6543
                self.partition_name()


            self.state = 6553
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [247, 701, 877, 1296, 1299, 1678]:
                self.state = 6546
                self.physical_attributes_clause()
                pass
            elif token in [1996]:
                self.state = 6547
                self.match(PlSqlParser.TABLESPACE)
                self.state = 6550
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                    self.state = 6548
                    self.tablespace()
                    pass
                elif token in [368]:
                    self.state = 6549
                    self.match(PlSqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [554, 832, 1057]:
                self.state = 6552
                self.logging_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_hash_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_hash_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_hash_index_partition" ):
                listener.enterAdd_hash_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_hash_index_partition" ):
                listener.exitAdd_hash_index_partition(self)




    def add_hash_index_partition(self):

        localctx = PlSqlParser.Add_hash_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 538, self.RULE_add_hash_index_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6555
            self.match(PlSqlParser.ADD)
            self.state = 6556
            self.match(PlSqlParser.PARTITION)
            self.state = 6558
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,625,self._ctx)
            if la_ == 1:
                self.state = 6557
                self.partition_name()


            self.state = 6562
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1996:
                self.state = 6560
                self.match(PlSqlParser.TABLESPACE)
                self.state = 6561
                self.tablespace()


            self.state = 6565
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==1017:
                self.state = 6564
                self.key_compression()


            self.state = 6568
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 6567
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Coalesce_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_coalesce_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCoalesce_index_partition" ):
                listener.enterCoalesce_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCoalesce_index_partition" ):
                listener.exitCoalesce_index_partition(self)




    def coalesce_index_partition(self):

        localctx = PlSqlParser.Coalesce_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 540, self.RULE_coalesce_index_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6570
            self.match(PlSqlParser.COALESCE)
            self.state = 6571
            self.match(PlSqlParser.PARTITION)
            self.state = 6573
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 6572
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def odci_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Odci_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def BLOCK(self):
            return self.getToken(PlSqlParser.BLOCK, 0)

        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def modify_index_partitions_ops(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Modify_index_partitions_opsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Modify_index_partitions_opsContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_index_partition" ):
                listener.enterModify_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_index_partition" ):
                listener.exitModify_index_partition(self)




    def modify_index_partition(self):

        localctx = PlSqlParser.Modify_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 542, self.RULE_modify_index_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6575
            self.match(PlSqlParser.MODIFY)
            self.state = 6576
            self.match(PlSqlParser.PARTITION)
            self.state = 6577
            self.partition_name()
            self.state = 6593
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [39, 246, 247, 356, 554, 701, 832, 877, 1017, 1057, 1296, 1299, 1678]:
                self.state = 6579 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 6578
                    self.modify_index_partitions_ops()
                    self.state = 6581 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==39 or _la==246 or _la==247 or _la==356 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678):
                        break

                pass
            elif token in [1263]:
                self.state = 6583
                self.match(PlSqlParser.PARAMETERS)
                self.state = 6584
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6585
                self.odci_parameters()
                self.state = 6586
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [218]:
                self.state = 6588
                self.match(PlSqlParser.COALESCE)
                pass
            elif token in [2114]:
                self.state = 6589
                self.match(PlSqlParser.UPDATE)
                self.state = 6590
                self.match(PlSqlParser.BLOCK)
                self.state = 6591
                self.match(PlSqlParser.REFERENCES)
                pass
            elif token in [2110]:
                self.state = 6592
                self.match(PlSqlParser.UNUSABLE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_index_partitions_opsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def deallocate_unused_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,0)


        def allocate_extent_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,0)


        def physical_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,0)


        def logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_index_partitions_ops

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_index_partitions_ops" ):
                listener.enterModify_index_partitions_ops(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_index_partitions_ops" ):
                listener.exitModify_index_partitions_ops(self)




    def modify_index_partitions_ops(self):

        localctx = PlSqlParser.Modify_index_partitions_opsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 544, self.RULE_modify_index_partitions_ops)
        try:
            self.state = 6600
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [356]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6595
                self.deallocate_unused_clause()
                pass
            elif token in [39]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6596
                self.allocate_extent_clause()
                pass
            elif token in [247, 701, 877, 1296, 1299, 1678]:
                self.enterOuterAlt(localctx, 3)
                self.state = 6597
                self.physical_attributes_clause()
                pass
            elif token in [554, 832, 1057]:
                self.enterOuterAlt(localctx, 4)
                self.state = 6598
                self.logging_clause()
                pass
            elif token in [246, 1017]:
                self.enterOuterAlt(localctx, 5)
                self.state = 6599
                self.key_compression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rename_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def new_partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.New_partition_nameContext,0)


        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_rename_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRename_index_partition" ):
                listener.enterRename_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRename_index_partition" ):
                listener.exitRename_index_partition(self)




    def rename_index_partition(self):

        localctx = PlSqlParser.Rename_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 546, self.RULE_rename_index_partition)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6602
            self.match(PlSqlParser.RENAME)
            self.state = 6607
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275]:
                self.state = 6603
                self.match(PlSqlParser.PARTITION)
                self.state = 6604
                self.partition_name()
                pass
            elif token in [1691]:
                self.state = 6605
                self.match(PlSqlParser.SUBPARTITION)
                self.state = 6606
                self.subpartition_name()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 6609
            self.match(PlSqlParser.TO)
            self.state = 6610
            self.new_partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_index_partition" ):
                listener.enterDrop_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_index_partition" ):
                listener.exitDrop_index_partition(self)




    def drop_index_partition(self):

        localctx = PlSqlParser.Drop_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 548, self.RULE_drop_index_partition)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6612
            self.match(PlSqlParser.DROP)
            self.state = 6613
            self.match(PlSqlParser.PARTITION)
            self.state = 6614
            self.partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Split_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SPLIT(self):
            return self.getToken(PlSqlParser.SPLIT, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name_old(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_name_oldContext,0)


        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.LiteralContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.LiteralContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def index_partition_description(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Index_partition_descriptionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Index_partition_descriptionContext,i)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_split_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSplit_index_partition" ):
                listener.enterSplit_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSplit_index_partition" ):
                listener.exitSplit_index_partition(self)




    def split_index_partition(self):

        localctx = PlSqlParser.Split_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 550, self.RULE_split_index_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6616
            self.match(PlSqlParser.SPLIT)
            self.state = 6617
            self.match(PlSqlParser.PARTITION)
            self.state = 6618
            self.partition_name_old()
            self.state = 6619
            self.match(PlSqlParser.AT)
            self.state = 6620
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6621
            self.literal()
            self.state = 6626
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6622
                self.match(PlSqlParser.COMMA)
                self.state = 6623
                self.literal()
                self.state = 6628
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6629
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 6637
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==735:
                self.state = 6630
                self.match(PlSqlParser.INTO)
                self.state = 6631
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 6632
                self.index_partition_description()
                self.state = 6633
                self.match(PlSqlParser.COMMA)
                self.state = 6634
                self.index_partition_description()
                self.state = 6635
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 6640
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 6639
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_partition_descriptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def odci_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Odci_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def segment_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,i)


        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_partition_description

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_partition_description" ):
                listener.enterIndex_partition_description(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_partition_description" ):
                listener.exitIndex_partition_description(self)




    def index_partition_description(self):

        localctx = PlSqlParser.Index_partition_descriptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 552, self.RULE_index_partition_description)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6642
            self.match(PlSqlParser.PARTITION)
            self.state = 6660
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,641,self._ctx)
            if la_ == 1:
                self.state = 6643
                self.partition_name()
                self.state = 6655
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [246, 247, 554, 701, 832, 877, 1017, 1057, 1296, 1299, 1678, 1996]:
                    self.state = 6646 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 6646
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,637,self._ctx)
                        if la_ == 1:
                            self.state = 6644
                            self.segment_attributes_clause()
                            pass

                        elif la_ == 2:
                            self.state = 6645
                            self.key_compression()
                            pass


                        self.state = 6648 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (_la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996):
                            break

                    pass
                elif token in [1263]:
                    self.state = 6650
                    self.match(PlSqlParser.PARAMETERS)
                    self.state = 6651
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 6652
                    self.odci_parameters()
                    self.state = 6653
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 6658
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2110:
                    self.state = 6657
                    self.match(PlSqlParser.UNUSABLE)




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_index_subpartitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def allocate_extent_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,0)


        def deallocate_unused_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_index_subpartition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_index_subpartition" ):
                listener.enterModify_index_subpartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_index_subpartition" ):
                listener.exitModify_index_subpartition(self)




    def modify_index_subpartition(self):

        localctx = PlSqlParser.Modify_index_subpartitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 554, self.RULE_modify_index_subpartition)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6662
            self.match(PlSqlParser.MODIFY)
            self.state = 6663
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 6664
            self.subpartition_name()
            self.state = 6668
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2110]:
                self.state = 6665
                self.match(PlSqlParser.UNUSABLE)
                pass
            elif token in [39]:
                self.state = 6666
                self.allocate_extent_clause()
                pass
            elif token in [356]:
                self.state = 6667
                self.deallocate_unused_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_name_oldContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_name_old

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_name_old" ):
                listener.enterPartition_name_old(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_name_old" ):
                listener.exitPartition_name_old(self)




    def partition_name_old(self):

        localctx = PlSqlParser.Partition_name_oldContext(self, self._ctx, self.state)
        self.enterRule(localctx, 556, self.RULE_partition_name_old)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6670
            self.partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class New_partition_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_new_partition_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNew_partition_name" ):
                listener.enterNew_partition_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNew_partition_name" ):
                listener.exitNew_partition_name(self)




    def new_partition_name(self):

        localctx = PlSqlParser.New_partition_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 558, self.RULE_new_partition_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6672
            self.partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class New_index_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_new_index_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNew_index_name" ):
                listener.enterNew_index_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNew_index_name" ):
                listener.exitNew_index_name(self)




    def new_index_name(self):

        localctx = PlSqlParser.New_index_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 560, self.RULE_new_index_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6674
            self.index_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_inmemory_join_groupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.jg = None # Id_expressionContext
            self.t = None # Id_expressionContext
            self.c = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def schema_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Schema_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_inmemory_join_group

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_inmemory_join_group" ):
                listener.enterAlter_inmemory_join_group(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_inmemory_join_group" ):
                listener.exitAlter_inmemory_join_group(self)




    def alter_inmemory_join_group(self):

        localctx = PlSqlParser.Alter_inmemory_join_groupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 562, self.RULE_alter_inmemory_join_group)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6676
            self.match(PlSqlParser.ALTER)
            self.state = 6677
            self.match(PlSqlParser.INMEMORY)
            self.state = 6678
            self.match(PlSqlParser.JOIN)
            self.state = 6679
            self.match(PlSqlParser.GROUP)
            self.state = 6683
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,643,self._ctx)
            if la_ == 1:
                self.state = 6680
                self.schema_name()
                self.state = 6681
                self.match(PlSqlParser.PERIOD)


            self.state = 6685
            localctx.jg = self.id_expression()
            self.state = 6686
            _la = self._input.LA(1)
            if not(_la==21 or _la==1480):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6687
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6691
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,644,self._ctx)
            if la_ == 1:
                self.state = 6688
                self.schema_name()
                self.state = 6689
                self.match(PlSqlParser.PERIOD)


            self.state = 6693
            localctx.t = self.id_expression()
            self.state = 6694
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6695
            localctx.c = self.id_expression()
            self.state = 6696
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 6697
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_userContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def user_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def identified_by(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Identified_byContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Identified_byContext,i)


        def identified_other_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Identified_other_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Identified_other_clauseContext,i)


        def user_tablespace_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_tablespace_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_tablespace_clauseContext,i)


        def quota_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quota_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quota_clauseContext,i)


        def profile_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Profile_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Profile_clauseContext,i)


        def password_expire_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Password_expire_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Password_expire_clauseContext,i)


        def user_lock_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_lock_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_lock_clauseContext,i)


        def user_editions_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_editions_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_editions_clauseContext,i)


        def container_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Container_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_user

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_user" ):
                listener.enterCreate_user(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_user" ):
                listener.exitCreate_user(self)




    def create_user(self):

        localctx = PlSqlParser.Create_userContext(self, self._ctx, self.state)
        self.enterRule(localctx, 564, self.RULE_create_user)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6699
            self.match(PlSqlParser.CREATE)
            self.state = 6700
            self.match(PlSqlParser.USER)
            self.state = 6701
            self.user_object_name()
            self.state = 6705
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 6702
                self.match(PlSqlParser.IF)
                self.state = 6703
                self.match(PlSqlParser.NOT)
                self.state = 6704
                self.match(PlSqlParser.EXISTS)


            self.state = 6716 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 6716
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,646,self._ctx)
                if la_ == 1:
                    self.state = 6707
                    self.identified_by()
                    pass

                elif la_ == 2:
                    self.state = 6708
                    self.identified_other_clause()
                    pass

                elif la_ == 3:
                    self.state = 6709
                    self.user_tablespace_clause()
                    pass

                elif la_ == 4:
                    self.state = 6710
                    self.quota_clause()
                    pass

                elif la_ == 5:
                    self.state = 6711
                    self.profile_clause()
                    pass

                elif la_ == 6:
                    self.state = 6712
                    self.password_expire_clause()
                    pass

                elif la_ == 7:
                    self.state = 6713
                    self.user_lock_clause()
                    pass

                elif la_ == 8:
                    self.state = 6714
                    self.user_editions_clause()
                    pass

                elif la_ == 9:
                    self.state = 6715
                    self.container_clause()
                    pass


                self.state = 6718 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==7 or _la==274 or _la==368 or _la==467 or _la==644 or _la==1283 or _la==1388 or _la==1415 or _la==2007):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_userContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def user_object_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_object_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,i)


        def alter_identified_by(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Alter_identified_byContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Alter_identified_byContext,i)


        def identified_other_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Identified_other_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Identified_other_clauseContext,i)


        def user_tablespace_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_tablespace_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_tablespace_clauseContext,i)


        def quota_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quota_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quota_clauseContext,i)


        def profile_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Profile_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Profile_clauseContext,i)


        def user_default_role_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_default_role_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_default_role_clauseContext,i)


        def password_expire_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Password_expire_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Password_expire_clauseContext,i)


        def user_lock_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_lock_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_lock_clauseContext,i)


        def alter_user_editions_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Alter_user_editions_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Alter_user_editions_clauseContext,i)


        def container_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Container_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,i)


        def container_data_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Container_data_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Container_data_clauseContext,i)


        def proxy_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Proxy_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_user

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_user" ):
                listener.enterAlter_user(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_user" ):
                listener.exitAlter_user(self)




    def alter_user(self):

        localctx = PlSqlParser.Alter_userContext(self, self._ctx, self.state)
        self.enterRule(localctx, 566, self.RULE_alter_user)
        self._la = 0 # Token type
        try:
            self.state = 6748
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [42]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6720
                self.match(PlSqlParser.ALTER)
                self.state = 6721
                self.match(PlSqlParser.USER)
                self.state = 6722
                self.user_object_name()
                self.state = 6734 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 6734
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,648,self._ctx)
                    if la_ == 1:
                        self.state = 6723
                        self.alter_identified_by()
                        pass

                    elif la_ == 2:
                        self.state = 6724
                        self.identified_other_clause()
                        pass

                    elif la_ == 3:
                        self.state = 6725
                        self.user_tablespace_clause()
                        pass

                    elif la_ == 4:
                        self.state = 6726
                        self.quota_clause()
                        pass

                    elif la_ == 5:
                        self.state = 6727
                        self.profile_clause()
                        pass

                    elif la_ == 6:
                        self.state = 6728
                        self.user_default_role_clause()
                        pass

                    elif la_ == 7:
                        self.state = 6729
                        self.password_expire_clause()
                        pass

                    elif la_ == 8:
                        self.state = 6730
                        self.user_lock_clause()
                        pass

                    elif la_ == 9:
                        self.state = 6731
                        self.alter_user_editions_clause()
                        pass

                    elif la_ == 10:
                        self.state = 6732
                        self.container_clause()
                        pass

                    elif la_ == 11:
                        self.state = 6733
                        self.container_data_clause()
                        pass


                    self.state = 6736 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==7 or _la==21 or _la==274 or _la==368 or _la==467 or _la==644 or _la==1283 or _la==1388 or _la==1415 or _la==1480 or _la==1590 or _la==2007):
                        break

                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6738
                self.user_object_name()
                self.state = 6743
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6739
                    self.match(PlSqlParser.COMMA)
                    self.state = 6740
                    self.user_object_name()
                    self.state = 6745
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 6746
                self.proxy_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_userContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def user_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_user

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_user" ):
                listener.enterDrop_user(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_user" ):
                listener.exitDrop_user(self)




    def drop_user(self):

        localctx = PlSqlParser.Drop_userContext(self, self._ctx, self.state)
        self.enterRule(localctx, 568, self.RULE_drop_user)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6750
            self.match(PlSqlParser.DROP)
            self.state = 6751
            self.match(PlSqlParser.USER)
            self.state = 6752
            self.user_object_name()
            self.state = 6755
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 6753
                self.match(PlSqlParser.IF)
                self.state = 6754
                self.match(PlSqlParser.EXISTS)


            self.state = 6758
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 6757
                self.match(PlSqlParser.CASCADE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_identified_byContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identified_by(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_byContext,0)


        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_identified_by

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_identified_by" ):
                listener.enterAlter_identified_by(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_identified_by" ):
                listener.exitAlter_identified_by(self)




    def alter_identified_by(self):

        localctx = PlSqlParser.Alter_identified_byContext(self, self._ctx, self.state)
        self.enterRule(localctx, 570, self.RULE_alter_identified_by)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6760
            self.identified_by()
            self.state = 6763
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1484:
                self.state = 6761
                self.match(PlSqlParser.REPLACE)
                self.state = 6762
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identified_byContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_identified_by

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentified_by" ):
                listener.enterIdentified_by(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentified_by" ):
                listener.exitIdentified_by(self)




    def identified_by(self):

        localctx = PlSqlParser.Identified_byContext(self, self._ctx, self.state)
        self.enterRule(localctx, 572, self.RULE_identified_by)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6765
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 6766
            self.match(PlSqlParser.BY)
            self.state = 6767
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identified_other_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def EXTERNALLY(self):
            return self.getToken(PlSqlParser.EXTERNALLY, 0)

        def GLOBALLY(self):
            return self.getToken(PlSqlParser.GLOBALLY, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_identified_other_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentified_other_clause" ):
                listener.enterIdentified_other_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentified_other_clause" ):
                listener.exitIdentified_other_clause(self)




    def identified_other_clause(self):

        localctx = PlSqlParser.Identified_other_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 574, self.RULE_identified_other_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6769
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 6770
            _la = self._input.LA(1)
            if not(_la==524 or _la==603):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6773
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 6771
                self.match(PlSqlParser.AS)
                self.state = 6772
                self.quoted_string()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class User_tablespace_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_user_tablespace_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUser_tablespace_clause" ):
                listener.enterUser_tablespace_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUser_tablespace_clause" ):
                listener.exitUser_tablespace_clause(self)




    def user_tablespace_clause(self):

        localctx = PlSqlParser.User_tablespace_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 576, self.RULE_user_tablespace_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6775
            _la = self._input.LA(1)
            if not(_la==368 or _la==2007):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6776
            self.match(PlSqlParser.TABLESPACE)
            self.state = 6777
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Quota_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def QUOTA(self):
            return self.getToken(PlSqlParser.QUOTA, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_quota_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuota_clause" ):
                listener.enterQuota_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuota_clause" ):
                listener.exitQuota_clause(self)




    def quota_clause(self):

        localctx = PlSqlParser.Quota_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 578, self.RULE_quota_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6779
            self.match(PlSqlParser.QUOTA)
            self.state = 6782
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2341]:
                self.state = 6780
                self.size_clause()
                pass
            elif token in [2093]:
                self.state = 6781
                self.match(PlSqlParser.UNLIMITED)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 6784
            self.match(PlSqlParser.ON)
            self.state = 6785
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Profile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_profile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProfile_clause" ):
                listener.enterProfile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProfile_clause" ):
                listener.exitProfile_clause(self)




    def profile_clause(self):

        localctx = PlSqlParser.Profile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 580, self.RULE_profile_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6787
            self.match(PlSqlParser.PROFILE)
            self.state = 6788
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Role_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def role_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Role_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Role_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def EXCEPT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EXCEPT)
            else:
                return self.getToken(PlSqlParser.EXCEPT, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_role_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRole_clause" ):
                listener.enterRole_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRole_clause" ):
                listener.exitRole_clause(self)




    def role_clause(self):

        localctx = PlSqlParser.Role_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 582, self.RULE_role_clause)
        self._la = 0 # Token type
        try:
            self.state = 6813
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6790
                self.role_name()
                self.state = 6795
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6791
                    self.match(PlSqlParser.COMMA)
                    self.state = 6792
                    self.role_name()
                    self.state = 6797
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [38]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6798
                self.match(PlSqlParser.ALL)
                self.state = 6810
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==497:
                    self.state = 6799
                    self.match(PlSqlParser.EXCEPT)
                    self.state = 6800
                    self.role_name()
                    self.state = 6805
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 6801
                        self.match(PlSqlParser.COMMA)
                        self.state = 6802
                        self.role_name()
                        self.state = 6807
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 6812
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class User_default_role_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def role_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Role_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_user_default_role_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUser_default_role_clause" ):
                listener.enterUser_default_role_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUser_default_role_clause" ):
                listener.exitUser_default_role_clause(self)




    def user_default_role_clause(self):

        localctx = PlSqlParser.User_default_role_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 584, self.RULE_user_default_role_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6815
            self.match(PlSqlParser.DEFAULT)
            self.state = 6816
            self.match(PlSqlParser.ROLE)
            self.state = 6819
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,661,self._ctx)
            if la_ == 1:
                self.state = 6817
                self.match(PlSqlParser.NONE)
                pass

            elif la_ == 2:
                self.state = 6818
                self.role_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Password_expire_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PASSWORD(self):
            return self.getToken(PlSqlParser.PASSWORD, 0)

        def EXPIRE(self):
            return self.getToken(PlSqlParser.EXPIRE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_password_expire_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPassword_expire_clause" ):
                listener.enterPassword_expire_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPassword_expire_clause" ):
                listener.exitPassword_expire_clause(self)




    def password_expire_clause(self):

        localctx = PlSqlParser.Password_expire_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 586, self.RULE_password_expire_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6821
            self.match(PlSqlParser.PASSWORD)
            self.state = 6822
            self.match(PlSqlParser.EXPIRE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class User_lock_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACCOUNT(self):
            return self.getToken(PlSqlParser.ACCOUNT, 0)

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def UNLOCK(self):
            return self.getToken(PlSqlParser.UNLOCK, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_user_lock_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUser_lock_clause" ):
                listener.enterUser_lock_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUser_lock_clause" ):
                listener.exitUser_lock_clause(self)




    def user_lock_clause(self):

        localctx = PlSqlParser.User_lock_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 588, self.RULE_user_lock_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6824
            self.match(PlSqlParser.ACCOUNT)
            self.state = 6825
            _la = self._input.LA(1)
            if not(_la==829 or _la==2095):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class User_editions_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def EDITIONS(self):
            return self.getToken(PlSqlParser.EDITIONS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_user_editions_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUser_editions_clause" ):
                listener.enterUser_editions_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUser_editions_clause" ):
                listener.exitUser_editions_clause(self)




    def user_editions_clause(self):

        localctx = PlSqlParser.User_editions_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 590, self.RULE_user_editions_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6827
            self.match(PlSqlParser.ENABLE)
            self.state = 6828
            self.match(PlSqlParser.EDITIONS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_user_editions_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def user_editions_clause(self):
            return self.getTypedRuleContext(PlSqlParser.User_editions_clauseContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def regular_id(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Regular_idContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Regular_idContext,i)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_user_editions_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_user_editions_clause" ):
                listener.enterAlter_user_editions_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_user_editions_clause" ):
                listener.exitAlter_user_editions_clause(self)




    def alter_user_editions_clause(self):

        localctx = PlSqlParser.Alter_user_editions_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 592, self.RULE_alter_user_editions_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6830
            self.user_editions_clause()
            self.state = 6840
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 6831
                self.match(PlSqlParser.FOR)
                self.state = 6832
                self.regular_id()
                self.state = 6837
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 6833
                    self.match(PlSqlParser.COMMA)
                    self.state = 6834
                    self.regular_id()
                    self.state = 6839
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 6843
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 6842
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Proxy_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REVOKE(self):
            return self.getToken(PlSqlParser.REVOKE, 0)

        def CONNECT(self):
            return self.getToken(PlSqlParser.CONNECT, 0)

        def THROUGH(self):
            return self.getToken(PlSqlParser.THROUGH, 0)

        def ENTERPRISE(self):
            return self.getToken(PlSqlParser.ENTERPRISE, 0)

        def USERS(self):
            return self.getToken(PlSqlParser.USERS, 0)

        def user_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,0)


        def GRANT(self):
            return self.getToken(PlSqlParser.GRANT, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def AUTHENTICATION(self):
            return self.getToken(PlSqlParser.AUTHENTICATION, 0)

        def REQUIRED(self):
            return self.getToken(PlSqlParser.REQUIRED, 0)

        def AUTHENTICATED(self):
            return self.getToken(PlSqlParser.AUTHENTICATED, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def ROLES(self):
            return self.getToken(PlSqlParser.ROLES, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def role_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Role_clauseContext,0)


        def PASSWORD(self):
            return self.getToken(PlSqlParser.PASSWORD, 0)

        def CERTIFICATE(self):
            return self.getToken(PlSqlParser.CERTIFICATE, 0)

        def DISTINGUISHED(self):
            return self.getToken(PlSqlParser.DISTINGUISHED, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_proxy_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProxy_clause" ):
                listener.enterProxy_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProxy_clause" ):
                listener.exitProxy_clause(self)




    def proxy_clause(self):

        localctx = PlSqlParser.Proxy_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 594, self.RULE_proxy_clause)
        self._la = 0 # Token type
        try:
            self.state = 6884
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1511]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6845
                self.match(PlSqlParser.REVOKE)
                self.state = 6846
                self.match(PlSqlParser.CONNECT)
                self.state = 6847
                self.match(PlSqlParser.THROUGH)
                self.state = 6851
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,665,self._ctx)
                if la_ == 1:
                    self.state = 6848
                    self.match(PlSqlParser.ENTERPRISE)
                    self.state = 6849
                    self.match(PlSqlParser.USERS)
                    pass

                elif la_ == 2:
                    self.state = 6850
                    self.user_object_name()
                    pass


                pass
            elif token in [607]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6853
                self.match(PlSqlParser.GRANT)
                self.state = 6854
                self.match(PlSqlParser.CONNECT)
                self.state = 6855
                self.match(PlSqlParser.THROUGH)
                self.state = 6882
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,671,self._ctx)
                if la_ == 1:
                    self.state = 6856
                    self.match(PlSqlParser.ENTERPRISE)
                    self.state = 6857
                    self.match(PlSqlParser.USERS)
                    pass

                elif la_ == 2:
                    self.state = 6858
                    self.user_object_name()
                    self.state = 6866
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2212:
                        self.state = 6859
                        self.match(PlSqlParser.WITH)
                        self.state = 6864
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1074]:
                            self.state = 6860
                            self.match(PlSqlParser.NO)
                            self.state = 6861
                            self.match(PlSqlParser.ROLES)
                            pass
                        elif token in [1515]:
                            self.state = 6862
                            self.match(PlSqlParser.ROLE)
                            self.state = 6863
                            self.role_clause()
                            pass
                        else:
                            raise NoViableAltException(self)



                    self.state = 6870
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==85:
                        self.state = 6868
                        self.match(PlSqlParser.AUTHENTICATION)
                        self.state = 6869
                        self.match(PlSqlParser.REQUIRED)


                    self.state = 6880
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==84:
                        self.state = 6872
                        self.match(PlSqlParser.AUTHENTICATED)
                        self.state = 6873
                        self.match(PlSqlParser.USING)
                        self.state = 6878
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1283]:
                            self.state = 6874
                            self.match(PlSqlParser.PASSWORD)
                            pass
                        elif token in [179]:
                            self.state = 6875
                            self.match(PlSqlParser.CERTIFICATE)
                            pass
                        elif token in [418]:
                            self.state = 6876
                            self.match(PlSqlParser.DISTINGUISHED)
                            self.state = 6877
                            self.match(PlSqlParser.NAME)
                            pass
                        else:
                            raise NoViableAltException(self)



                    pass


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Container_namesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_container_names

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterContainer_names" ):
                listener.enterContainer_names(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitContainer_names" ):
                listener.exitContainer_names(self)




    def container_names(self):

        localctx = PlSqlParser.Container_namesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 596, self.RULE_container_names)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6886
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 6887
            self.id_expression()
            self.state = 6892
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 6888
                self.match(PlSqlParser.COMMA)
                self.state = 6889
                self.id_expression()
                self.state = 6894
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 6895
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_container_dataContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def CONTAINER_DATA(self):
            return self.getToken(PlSqlParser.CONTAINER_DATA, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def container_names(self):
            return self.getTypedRuleContext(PlSqlParser.Container_namesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_set_container_data

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_container_data" ):
                listener.enterSet_container_data(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_container_data" ):
                listener.exitSet_container_data(self)




    def set_container_data(self):

        localctx = PlSqlParser.Set_container_dataContext(self, self._ctx, self.state)
        self.enterRule(localctx, 598, self.RULE_set_container_data)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6897
            self.match(PlSqlParser.SET)
            self.state = 6898
            self.match(PlSqlParser.CONTAINER_DATA)
            self.state = 6899
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 6903
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [38]:
                self.state = 6900
                self.match(PlSqlParser.ALL)
                pass
            elif token in [368]:
                self.state = 6901
                self.match(PlSqlParser.DEFAULT)
                pass
            elif token in [2347]:
                self.state = 6902
                self.container_names()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_rem_container_dataContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONTAINER_DATA(self):
            return self.getToken(PlSqlParser.CONTAINER_DATA, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def container_names(self):
            return self.getTypedRuleContext(PlSqlParser.Container_namesContext,0)


        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_rem_container_data

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_rem_container_data" ):
                listener.enterAdd_rem_container_data(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_rem_container_data" ):
                listener.exitAdd_rem_container_data(self)




    def add_rem_container_data(self):

        localctx = PlSqlParser.Add_rem_container_dataContext(self, self._ctx, self.state)
        self.enterRule(localctx, 600, self.RULE_add_rem_container_data)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6905
            _la = self._input.LA(1)
            if not(_la==21 or _la==1480):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 6906
            self.match(PlSqlParser.CONTAINER_DATA)
            self.state = 6907
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 6908
            self.container_names()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Container_data_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def set_container_data(self):
            return self.getTypedRuleContext(PlSqlParser.Set_container_dataContext,0)


        def add_rem_container_data(self):
            return self.getTypedRuleContext(PlSqlParser.Add_rem_container_dataContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def container_tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Container_tableview_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_container_data_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterContainer_data_clause" ):
                listener.enterContainer_data_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitContainer_data_clause" ):
                listener.exitContainer_data_clause(self)




    def container_data_clause(self):

        localctx = PlSqlParser.Container_data_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 602, self.RULE_container_data_clause)
        self._la = 0 # Token type
        try:
            self.state = 6916
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1590]:
                self.enterOuterAlt(localctx, 1)
                self.state = 6910
                self.set_container_data()
                pass
            elif token in [21, 1480]:
                self.enterOuterAlt(localctx, 2)
                self.state = 6911
                self.add_rem_container_data()
                self.state = 6914
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==580:
                    self.state = 6912
                    self.match(PlSqlParser.FOR)
                    self.state = 6913
                    self.container_tableview_name()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Administer_key_managementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADMINISTER(self):
            return self.getToken(PlSqlParser.ADMINISTER, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def MANAGEMENT(self):
            return self.getToken(PlSqlParser.MANAGEMENT, 0)

        def keystore_management_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_management_clausesContext,0)


        def key_management_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Key_management_clausesContext,0)


        def secret_management_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Secret_management_clausesContext,0)


        def zero_downtime_software_patching_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Zero_downtime_software_patching_clausesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_administer_key_management

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdminister_key_management" ):
                listener.enterAdminister_key_management(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdminister_key_management" ):
                listener.exitAdminister_key_management(self)




    def administer_key_management(self):

        localctx = PlSqlParser.Administer_key_managementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 604, self.RULE_administer_key_management)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6918
            self.match(PlSqlParser.ADMINISTER)
            self.state = 6919
            self.match(PlSqlParser.KEY)
            self.state = 6920
            self.match(PlSqlParser.MANAGEMENT)
            self.state = 6925
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,677,self._ctx)
            if la_ == 1:
                self.state = 6921
                self.keystore_management_clauses()
                pass

            elif la_ == 2:
                self.state = 6922
                self.key_management_clauses()
                pass

            elif la_ == 3:
                self.state = 6923
                self.secret_management_clauses()
                pass

            elif la_ == 4:
                self.state = 6924
                self.zero_downtime_software_patching_clauses()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Keystore_management_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def create_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Create_keystoreContext,0)


        def open_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Open_keystoreContext,0)


        def close_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Close_keystoreContext,0)


        def backup_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Backup_keystoreContext,0)


        def alter_keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_keystore_passwordContext,0)


        def merge_into_new_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_into_new_keystoreContext,0)


        def merge_into_existing_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_into_existing_keystoreContext,0)


        def isolate_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Isolate_keystoreContext,0)


        def unite_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Unite_keystoreContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_keystore_management_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKeystore_management_clauses" ):
                listener.enterKeystore_management_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKeystore_management_clauses" ):
                listener.exitKeystore_management_clauses(self)




    def keystore_management_clauses(self):

        localctx = PlSqlParser.Keystore_management_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 606, self.RULE_keystore_management_clauses)
        try:
            self.state = 6936
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,678,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 6927
                self.create_keystore()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 6928
                self.open_keystore()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 6929
                self.close_keystore()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 6930
                self.backup_keystore()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 6931
                self.alter_keystore_password()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 6932
                self.merge_into_new_keystore()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 6933
                self.merge_into_existing_keystore()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 6934
                self.isolate_keystore()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 6935
                self.unite_keystore()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ksl = None # Token

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,0)


        def KEYSTORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEYSTORE)
            else:
                return self.getToken(PlSqlParser.KEYSTORE, i)

        def AUTO_LOGIN(self):
            return self.getToken(PlSqlParser.AUTO_LOGIN, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_keystore" ):
                listener.enterCreate_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_keystore" ):
                listener.exitCreate_keystore(self)




    def create_keystore(self):

        localctx = PlSqlParser.Create_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 608, self.RULE_create_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6938
            self.match(PlSqlParser.CREATE)
            self.state = 6949
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [774]:
                self.state = 6939
                self.match(PlSqlParser.KEYSTORE)
                self.state = 6940
                localctx.ksl = self.match(PlSqlParser.CHAR_STRING)
                pass
            elif token in [92, 821]:
                self.state = 6942
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==821:
                    self.state = 6941
                    self.match(PlSqlParser.LOCAL)


                self.state = 6944
                self.match(PlSqlParser.AUTO_LOGIN)
                self.state = 6945
                self.match(PlSqlParser.KEYSTORE)
                self.state = 6946
                self.match(PlSqlParser.FROM)
                self.state = 6947
                self.match(PlSqlParser.KEYSTORE)
                self.state = 6948
                localctx.ksl = self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 6951
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 6952
            self.match(PlSqlParser.BY)
            self.state = 6953
            self.keystore_password()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Open_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def OPEN(self):
            return self.getToken(PlSqlParser.OPEN, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_open_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOpen_keystore" ):
                listener.enterOpen_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOpen_keystore" ):
                listener.exitOpen_keystore(self)




    def open_keystore(self):

        localctx = PlSqlParser.Open_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 610, self.RULE_open_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6955
            self.match(PlSqlParser.SET)
            self.state = 6956
            self.match(PlSqlParser.KEYSTORE)
            self.state = 6957
            self.match(PlSqlParser.OPEN)
            self.state = 6959
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 6958
                self.force_keystore()


            self.state = 6961
            self.identified_by_store()
            self.state = 6963
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 6962
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Force_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_force_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterForce_keystore" ):
                listener.enterForce_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitForce_keystore" ):
                listener.exitForce_keystore(self)




    def force_keystore(self):

        localctx = PlSqlParser.Force_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 612, self.RULE_force_keystore)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6965
            self.match(PlSqlParser.FORCE)
            self.state = 6966
            self.match(PlSqlParser.KEYSTORE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Close_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def CLOSE(self):
            return self.getToken(PlSqlParser.CLOSE, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_close_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClose_keystore" ):
                listener.enterClose_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClose_keystore" ):
                listener.exitClose_keystore(self)




    def close_keystore(self):

        localctx = PlSqlParser.Close_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 614, self.RULE_close_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6968
            self.match(PlSqlParser.SET)
            self.state = 6969
            self.match(PlSqlParser.KEYSTORE)
            self.state = 6970
            self.match(PlSqlParser.CLOSE)
            self.state = 6972
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 6971
                self.identified_by_store()


            self.state = 6975
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 6974
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Backup_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.bi = None # Token
            self.ksl = None # Token

        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_backup_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBackup_keystore" ):
                listener.enterBackup_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBackup_keystore" ):
                listener.exitBackup_keystore(self)




    def backup_keystore(self):

        localctx = PlSqlParser.Backup_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 616, self.RULE_backup_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6977
            self.match(PlSqlParser.BACKUP)
            self.state = 6978
            self.match(PlSqlParser.KEYSTORE)
            self.state = 6981
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 6979
                self.match(PlSqlParser.USING)
                self.state = 6980
                localctx.bi = self.match(PlSqlParser.CHAR_STRING)


            self.state = 6984
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 6983
                self.force_keystore()


            self.state = 6986
            self.identified_by_store()
            self.state = 6989
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2052:
                self.state = 6987
                self.match(PlSqlParser.TO)
                self.state = 6988
                localctx.ksl = self.match(PlSqlParser.CHAR_STRING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_keystore_passwordContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.o = None # Keystore_passwordContext
            self.n = None # Keystore_passwordContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def PASSWORD(self):
            return self.getToken(PlSqlParser.PASSWORD, 0)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def keystore_password(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Keystore_passwordContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,i)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_keystore_password

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_keystore_password" ):
                listener.enterAlter_keystore_password(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_keystore_password" ):
                listener.exitAlter_keystore_password(self)




    def alter_keystore_password(self):

        localctx = PlSqlParser.Alter_keystore_passwordContext(self, self._ctx, self.state)
        self.enterRule(localctx, 618, self.RULE_alter_keystore_password)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 6991
            self.match(PlSqlParser.ALTER)
            self.state = 6992
            self.match(PlSqlParser.KEYSTORE)
            self.state = 6993
            self.match(PlSqlParser.PASSWORD)
            self.state = 6995
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 6994
                self.force_keystore()


            self.state = 6997
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 6998
            self.match(PlSqlParser.BY)
            self.state = 6999
            localctx.o = self.keystore_password()
            self.state = 7000
            self.match(PlSqlParser.SET)
            self.state = 7001
            localctx.n = self.keystore_password()
            self.state = 7003
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7002
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_into_new_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ksl1 = None # Token
            self.ksl2 = None # Token

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def KEYSTORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEYSTORE)
            else:
                return self.getToken(PlSqlParser.KEYSTORE, i)

        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def identified_by_password_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Identified_by_password_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Identified_by_password_clauseContext,i)


        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_into_new_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_into_new_keystore" ):
                listener.enterMerge_into_new_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_into_new_keystore" ):
                listener.exitMerge_into_new_keystore(self)




    def merge_into_new_keystore(self):

        localctx = PlSqlParser.Merge_into_new_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 620, self.RULE_merge_into_new_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7005
            self.match(PlSqlParser.MERGE)
            self.state = 7006
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7007
            localctx.ksl1 = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7009
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 7008
                self.identified_by_password_clause()


            self.state = 7011
            self.match(PlSqlParser.AND)
            self.state = 7012
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7013
            localctx.ksl2 = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7015
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 7014
                self.identified_by_password_clause()


            self.state = 7017
            self.match(PlSqlParser.INTO)
            self.state = 7018
            self.match(PlSqlParser.NEW)
            self.state = 7019
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7020
            localctx.ksl2 = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7021
            self.identified_by_password_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_into_existing_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ksl1 = None # Token
            self.ksl2 = None # Token

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def KEYSTORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEYSTORE)
            else:
                return self.getToken(PlSqlParser.KEYSTORE, i)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def EXISTING(self):
            return self.getToken(PlSqlParser.EXISTING, 0)

        def identified_by_password_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Identified_by_password_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Identified_by_password_clauseContext,i)


        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_into_existing_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_into_existing_keystore" ):
                listener.enterMerge_into_existing_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_into_existing_keystore" ):
                listener.exitMerge_into_existing_keystore(self)




    def merge_into_existing_keystore(self):

        localctx = PlSqlParser.Merge_into_existing_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 622, self.RULE_merge_into_existing_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7023
            self.match(PlSqlParser.MERGE)
            self.state = 7024
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7025
            localctx.ksl1 = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7027
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 7026
                self.identified_by_password_clause()


            self.state = 7029
            self.match(PlSqlParser.INTO)
            self.state = 7030
            self.match(PlSqlParser.EXISTING)
            self.state = 7031
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7032
            localctx.ksl2 = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7033
            self.identified_by_password_clause()
            self.state = 7035
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7034
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Isolate_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.i = None # Keystore_passwordContext

        def ISOLATE(self):
            return self.getToken(PlSqlParser.ISOLATE, 0)

        def KEYSTORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEYSTORE)
            else:
                return self.getToken(PlSqlParser.KEYSTORE, i)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def ROOT(self):
            return self.getToken(PlSqlParser.ROOT, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_isolate_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIsolate_keystore" ):
                listener.enterIsolate_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIsolate_keystore" ):
                listener.exitIsolate_keystore(self)




    def isolate_keystore(self):

        localctx = PlSqlParser.Isolate_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 624, self.RULE_isolate_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7038
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7037
                self.match(PlSqlParser.FORCE)


            self.state = 7040
            self.match(PlSqlParser.ISOLATE)
            self.state = 7041
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7042
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7043
            self.match(PlSqlParser.BY)
            self.state = 7044
            localctx.i = self.keystore_password()
            self.state = 7045
            self.match(PlSqlParser.FROM)
            self.state = 7046
            self.match(PlSqlParser.ROOT)
            self.state = 7047
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7049
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7048
                self.force_keystore()


            self.state = 7051
            self.identified_by_store()
            self.state = 7053
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7052
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unite_keystoreContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.i = None # Keystore_passwordContext

        def UNITE(self):
            return self.getToken(PlSqlParser.UNITE, 0)

        def KEYSTORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEYSTORE)
            else:
                return self.getToken(PlSqlParser.KEYSTORE, i)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def ROOT(self):
            return self.getToken(PlSqlParser.ROOT, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,0)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_unite_keystore

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnite_keystore" ):
                listener.enterUnite_keystore(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnite_keystore" ):
                listener.exitUnite_keystore(self)




    def unite_keystore(self):

        localctx = PlSqlParser.Unite_keystoreContext(self, self._ctx, self.state)
        self.enterRule(localctx, 626, self.RULE_unite_keystore)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7055
            self.match(PlSqlParser.UNITE)
            self.state = 7056
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7057
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7058
            self.match(PlSqlParser.BY)
            self.state = 7059
            localctx.i = self.keystore_password()
            self.state = 7060
            self.match(PlSqlParser.WITH)
            self.state = 7061
            self.match(PlSqlParser.ROOT)
            self.state = 7062
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7064
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7063
                self.force_keystore()


            self.state = 7066
            self.identified_by_store()
            self.state = 7068
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7067
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Key_management_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def set_key(self):
            return self.getTypedRuleContext(PlSqlParser.Set_keyContext,0)


        def create_key(self):
            return self.getTypedRuleContext(PlSqlParser.Create_keyContext,0)


        def use_key(self):
            return self.getTypedRuleContext(PlSqlParser.Use_keyContext,0)


        def set_key_tag(self):
            return self.getTypedRuleContext(PlSqlParser.Set_key_tagContext,0)


        def export_keys(self):
            return self.getTypedRuleContext(PlSqlParser.Export_keysContext,0)


        def import_keys(self):
            return self.getTypedRuleContext(PlSqlParser.Import_keysContext,0)


        def migrate_keys(self):
            return self.getTypedRuleContext(PlSqlParser.Migrate_keysContext,0)


        def reverse_migrate_keys(self):
            return self.getTypedRuleContext(PlSqlParser.Reverse_migrate_keysContext,0)


        def move_keys(self):
            return self.getTypedRuleContext(PlSqlParser.Move_keysContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_key_management_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKey_management_clauses" ):
                listener.enterKey_management_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKey_management_clauses" ):
                listener.exitKey_management_clauses(self)




    def key_management_clauses(self):

        localctx = PlSqlParser.Key_management_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 628, self.RULE_key_management_clauses)
        try:
            self.state = 7079
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,699,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7070
                self.set_key()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7071
                self.create_key()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 7072
                self.use_key()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 7073
                self.set_key_tag()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 7074
                self.export_keys()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 7075
                self.import_keys()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 7076
                self.migrate_keys()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 7077
                self.reverse_migrate_keys()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 7078
                self.move_keys()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_keyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def mk(self):
            return self.getTypedRuleContext(PlSqlParser.MkContext,0)


        def using_tag_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_tag_clauseContext,0)


        def using_algorithm_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_algorithm_clauseContext,0)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def mkid(self):
            return self.getTypedRuleContext(PlSqlParser.MkidContext,0)


        def COLON(self):
            return self.getToken(PlSqlParser.COLON, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_set_key

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_key" ):
                listener.enterSet_key(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_key" ):
                listener.exitSet_key(self)




    def set_key(self):

        localctx = PlSqlParser.Set_keyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 630, self.RULE_set_key)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7081
            self.match(PlSqlParser.SET)
            self.state = 7083
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7082
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7085
            self.match(PlSqlParser.KEY)
            self.state = 7092
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2343:
                self.state = 7089
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,701,self._ctx)
                if la_ == 1:
                    self.state = 7086
                    self.mkid()
                    self.state = 7087
                    self.match(PlSqlParser.COLON)


                self.state = 7091
                self.mk()


            self.state = 7095
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,703,self._ctx)
            if la_ == 1:
                self.state = 7094
                self.using_tag_clause()


            self.state = 7098
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 7097
                self.using_algorithm_clause()


            self.state = 7101
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7100
                self.force_keystore()


            self.state = 7103
            self.identified_by_store()
            self.state = 7105
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7104
                self.with_backup_clause()


            self.state = 7108
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 7107
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_keyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def mk(self):
            return self.getTypedRuleContext(PlSqlParser.MkContext,0)


        def using_tag_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_tag_clauseContext,0)


        def using_algorithm_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_algorithm_clauseContext,0)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def mkid(self):
            return self.getTypedRuleContext(PlSqlParser.MkidContext,0)


        def COLON(self):
            return self.getToken(PlSqlParser.COLON, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_key

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_key" ):
                listener.enterCreate_key(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_key" ):
                listener.exitCreate_key(self)




    def create_key(self):

        localctx = PlSqlParser.Create_keyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 632, self.RULE_create_key)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7110
            self.match(PlSqlParser.CREATE)
            self.state = 7112
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7111
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7114
            self.match(PlSqlParser.KEY)
            self.state = 7121
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2343:
                self.state = 7118
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,709,self._ctx)
                if la_ == 1:
                    self.state = 7115
                    self.mkid()
                    self.state = 7116
                    self.match(PlSqlParser.COLON)


                self.state = 7120
                self.mk()


            self.state = 7124
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,711,self._ctx)
            if la_ == 1:
                self.state = 7123
                self.using_tag_clause()


            self.state = 7127
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 7126
                self.using_algorithm_clause()


            self.state = 7130
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7129
                self.force_keystore()


            self.state = 7132
            self.identified_by_store()
            self.state = 7134
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7133
                self.with_backup_clause()


            self.state = 7137
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 7136
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MkidContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_mkid

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMkid" ):
                listener.enterMkid(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMkid" ):
                listener.exitMkid(self)




    def mkid(self):

        localctx = PlSqlParser.MkidContext(self, self._ctx, self.state)
        self.enterRule(localctx, 634, self.RULE_mkid)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7139
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class MkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_mk

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMk" ):
                listener.enterMk(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMk" ):
                listener.exitMk(self)




    def mk(self):

        localctx = PlSqlParser.MkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 636, self.RULE_mk)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7141
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Use_keyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.k = None # Token

        def USE(self):
            return self.getToken(PlSqlParser.USE, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def using_tag_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_tag_clauseContext,0)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_use_key

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUse_key" ):
                listener.enterUse_key(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUse_key" ):
                listener.exitUse_key(self)




    def use_key(self):

        localctx = PlSqlParser.Use_keyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 638, self.RULE_use_key)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7143
            self.match(PlSqlParser.USE)
            self.state = 7145
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7144
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7147
            self.match(PlSqlParser.KEY)
            self.state = 7148
            localctx.k = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7150
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 7149
                self.using_tag_clause()


            self.state = 7153
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7152
                self.force_keystore()


            self.state = 7155
            self.identified_by_store()
            self.state = 7157
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7156
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_key_tagContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.t = None # Token
            self.k = None # Token

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def TAG(self):
            return self.getToken(PlSqlParser.TAG, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_set_key_tag

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_key_tag" ):
                listener.enterSet_key_tag(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_key_tag" ):
                listener.exitSet_key_tag(self)




    def set_key_tag(self):

        localctx = PlSqlParser.Set_key_tagContext(self, self._ctx, self.state)
        self.enterRule(localctx, 640, self.RULE_set_key_tag)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7159
            self.match(PlSqlParser.SET)
            self.state = 7160
            self.match(PlSqlParser.TAG)
            self.state = 7161
            localctx.t = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7162
            self.match(PlSqlParser.FOR)
            self.state = 7163
            localctx.k = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7165
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7164
                self.force_keystore()


            self.state = 7167
            self.identified_by_store()
            self.state = 7169
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7168
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Export_keysContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXPORT(self):
            return self.getToken(PlSqlParser.EXPORT, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def secret(self):
            return self.getTypedRuleContext(PlSqlParser.SecretContext,0)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def IDENTIFIER(self):
            return self.getToken(PlSqlParser.IDENTIFIER, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_export_keys

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExport_keys" ):
                listener.enterExport_keys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExport_keys" ):
                listener.exitExport_keys(self)




    def export_keys(self):

        localctx = PlSqlParser.Export_keysContext(self, self._ctx, self.state)
        self.enterRule(localctx, 642, self.RULE_export_keys)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7171
            self.match(PlSqlParser.EXPORT)
            self.state = 7173
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7172
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7175
            self.match(PlSqlParser.KEYS)
            self.state = 7176
            self.match(PlSqlParser.WITH)
            self.state = 7177
            self.match(PlSqlParser.SECRET)
            self.state = 7178
            self.secret()
            self.state = 7179
            self.match(PlSqlParser.TO)
            self.state = 7180
            self.filename()
            self.state = 7182
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7181
                self.force_keystore()


            self.state = 7184
            self.identified_by_store()
            self.state = 7202
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7185
                self.match(PlSqlParser.WITH)
                self.state = 7186
                self.match(PlSqlParser.IDENTIFIER)
                self.state = 7187
                self.match(PlSqlParser.IN)
                self.state = 7200
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 7188
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 7193
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 7189
                        self.match(PlSqlParser.COMMA)
                        self.state = 7190
                        self.match(PlSqlParser.CHAR_STRING)
                        self.state = 7195
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass
                elif token in [2347]:
                    self.state = 7196
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 7197
                    self.subquery()
                    self.state = 7198
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Import_keysContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IMPORT(self):
            return self.getToken(PlSqlParser.IMPORT, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def secret(self):
            return self.getTypedRuleContext(PlSqlParser.SecretContext,0)


        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_import_keys

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImport_keys" ):
                listener.enterImport_keys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImport_keys" ):
                listener.exitImport_keys(self)




    def import_keys(self):

        localctx = PlSqlParser.Import_keysContext(self, self._ctx, self.state)
        self.enterRule(localctx, 644, self.RULE_import_keys)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7204
            self.match(PlSqlParser.IMPORT)
            self.state = 7206
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7205
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7208
            self.match(PlSqlParser.KEYS)
            self.state = 7209
            self.match(PlSqlParser.WITH)
            self.state = 7210
            self.match(PlSqlParser.SECRET)
            self.state = 7211
            self.secret()
            self.state = 7212
            self.match(PlSqlParser.FROM)
            self.state = 7213
            self.filename()
            self.state = 7215
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7214
                self.force_keystore()


            self.state = 7217
            self.identified_by_store()
            self.state = 7219
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7218
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Migrate_keysContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.hsm = None # SecretContext

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def MIGRATE(self):
            return self.getToken(PlSqlParser.MIGRATE, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,0)


        def secret(self):
            return self.getTypedRuleContext(PlSqlParser.SecretContext,0)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_migrate_keys

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMigrate_keys" ):
                listener.enterMigrate_keys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMigrate_keys" ):
                listener.exitMigrate_keys(self)




    def migrate_keys(self):

        localctx = PlSqlParser.Migrate_keysContext(self, self._ctx, self.state)
        self.enterRule(localctx, 646, self.RULE_migrate_keys)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7221
            self.match(PlSqlParser.SET)
            self.state = 7223
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7222
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7225
            self.match(PlSqlParser.KEY)
            self.state = 7226
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7227
            self.match(PlSqlParser.BY)
            self.state = 7228
            localctx.hsm = self.secret()
            self.state = 7230
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7229
                self.force_keystore()


            self.state = 7232
            self.match(PlSqlParser.MIGRATE)
            self.state = 7233
            self.match(PlSqlParser.USING)
            self.state = 7234
            self.keystore_password()
            self.state = 7236
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7235
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Reverse_migrate_keysContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.s = None # SecretContext
            self.hsm = None # SecretContext

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def REVERSE(self):
            return self.getToken(PlSqlParser.REVERSE, 0)

        def MIGRATE(self):
            return self.getToken(PlSqlParser.MIGRATE, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def secret(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.SecretContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.SecretContext,i)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_reverse_migrate_keys

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReverse_migrate_keys" ):
                listener.enterReverse_migrate_keys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReverse_migrate_keys" ):
                listener.exitReverse_migrate_keys(self)




    def reverse_migrate_keys(self):

        localctx = PlSqlParser.Reverse_migrate_keysContext(self, self._ctx, self.state)
        self.enterRule(localctx, 648, self.RULE_reverse_migrate_keys)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7238
            self.match(PlSqlParser.SET)
            self.state = 7240
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7239
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7242
            self.match(PlSqlParser.KEY)
            self.state = 7243
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7244
            self.match(PlSqlParser.BY)
            self.state = 7245
            localctx.s = self.secret()
            self.state = 7247
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7246
                self.force_keystore()


            self.state = 7249
            self.match(PlSqlParser.REVERSE)
            self.state = 7250
            self.match(PlSqlParser.MIGRATE)
            self.state = 7251
            self.match(PlSqlParser.USING)
            self.state = 7252
            localctx.hsm = self.secret()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Move_keysContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ksl1 = None # Token
            self.ksp1 = None # Keystore_passwordContext
            self.ksp = None # Keystore_passwordContext

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def KEYSTORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEYSTORE)
            else:
                return self.getToken(PlSqlParser.KEYSTORE, i)

        def IDENTIFIED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IDENTIFIED)
            else:
                return self.getToken(PlSqlParser.IDENTIFIED, i)

        def BY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BY)
            else:
                return self.getToken(PlSqlParser.BY, i)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def keystore_password(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Keystore_passwordContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,i)


        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def IDENTIFIER(self):
            return self.getToken(PlSqlParser.IDENTIFIER, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_move_keys

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMove_keys" ):
                listener.enterMove_keys(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMove_keys" ):
                listener.exitMove_keys(self)




    def move_keys(self):

        localctx = PlSqlParser.Move_keysContext(self, self._ctx, self.state)
        self.enterRule(localctx, 650, self.RULE_move_keys)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7254
            self.match(PlSqlParser.MOVE)
            self.state = 7256
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==472:
                self.state = 7255
                self.match(PlSqlParser.ENCRYPTION)


            self.state = 7258
            self.match(PlSqlParser.KEYS)
            self.state = 7259
            self.match(PlSqlParser.TO)
            self.state = 7260
            self.match(PlSqlParser.NEW)
            self.state = 7261
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7262
            localctx.ksl1 = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7263
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7264
            self.match(PlSqlParser.BY)
            self.state = 7265
            localctx.ksp1 = self.keystore_password()
            self.state = 7266
            self.match(PlSqlParser.FROM)
            self.state = 7268
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7267
                self.match(PlSqlParser.FORCE)


            self.state = 7270
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7271
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7272
            self.match(PlSqlParser.BY)
            self.state = 7273
            localctx.ksp = self.keystore_password()
            self.state = 7288
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,739,self._ctx)
            if la_ == 1:
                self.state = 7274
                self.match(PlSqlParser.WITH)
                self.state = 7275
                self.match(PlSqlParser.IDENTIFIER)
                self.state = 7276
                self.match(PlSqlParser.IN)
                self.state = 7286
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 7277
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 7282
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 7278
                        self.match(PlSqlParser.COMMA)
                        self.state = 7279
                        self.match(PlSqlParser.CHAR_STRING)
                        self.state = 7284
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass
                elif token in [1569, 2347]:
                    self.state = 7285
                    self.subquery()
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 7291
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7290
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identified_by_storeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_identified_by_store

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentified_by_store" ):
                listener.enterIdentified_by_store(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentified_by_store" ):
                listener.exitIdentified_by_store(self)




    def identified_by_store(self):

        localctx = PlSqlParser.Identified_by_storeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 652, self.RULE_identified_by_store)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7293
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7294
            self.match(PlSqlParser.BY)
            self.state = 7298
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [523]:
                self.state = 7295
                self.match(PlSqlParser.EXTERNAL)
                self.state = 7296
                self.match(PlSqlParser.STORE)
                pass
            elif token in [2344]:
                self.state = 7297
                self.keystore_password()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_algorithm_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ea = None # Token

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def ALGORITHM(self):
            return self.getToken(PlSqlParser.ALGORITHM, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_using_algorithm_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_algorithm_clause" ):
                listener.enterUsing_algorithm_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_algorithm_clause" ):
                listener.exitUsing_algorithm_clause(self)




    def using_algorithm_clause(self):

        localctx = PlSqlParser.Using_algorithm_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 654, self.RULE_using_algorithm_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7300
            self.match(PlSqlParser.USING)
            self.state = 7301
            self.match(PlSqlParser.ALGORITHM)
            self.state = 7302
            localctx.ea = self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_tag_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.t = None # Token

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def TAG(self):
            return self.getToken(PlSqlParser.TAG, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_using_tag_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_tag_clause" ):
                listener.enterUsing_tag_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_tag_clause" ):
                listener.exitUsing_tag_clause(self)




    def using_tag_clause(self):

        localctx = PlSqlParser.Using_tag_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 656, self.RULE_using_tag_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7304
            self.match(PlSqlParser.USING)
            self.state = 7305
            self.match(PlSqlParser.TAG)
            self.state = 7306
            localctx.t = self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Secret_management_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_update_secret(self):
            return self.getTypedRuleContext(PlSqlParser.Add_update_secretContext,0)


        def delete_secret(self):
            return self.getTypedRuleContext(PlSqlParser.Delete_secretContext,0)


        def add_update_secret_seps(self):
            return self.getTypedRuleContext(PlSqlParser.Add_update_secret_sepsContext,0)


        def delete_secret_seps(self):
            return self.getTypedRuleContext(PlSqlParser.Delete_secret_sepsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_secret_management_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSecret_management_clauses" ):
                listener.enterSecret_management_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSecret_management_clauses" ):
                listener.exitSecret_management_clauses(self)




    def secret_management_clauses(self):

        localctx = PlSqlParser.Secret_management_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 658, self.RULE_secret_management_clauses)
        try:
            self.state = 7312
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,742,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7308
                self.add_update_secret()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7309
                self.delete_secret()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 7310
                self.add_update_secret_seps()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 7311
                self.delete_secret_seps()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_update_secretContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.s = None # Token
            self.ci = None # Token

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def CLIENT(self):
            return self.getToken(PlSqlParser.CLIENT, 0)

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def using_tag_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_tag_clauseContext,0)


        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_update_secret

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_update_secret" ):
                listener.enterAdd_update_secret(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_update_secret" ):
                listener.exitAdd_update_secret(self)




    def add_update_secret(self):

        localctx = PlSqlParser.Add_update_secretContext(self, self._ctx, self.state)
        self.enterRule(localctx, 660, self.RULE_add_update_secret)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7314
            _la = self._input.LA(1)
            if not(_la==21 or _la==2114):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 7315
            self.match(PlSqlParser.SECRET)
            self.state = 7316
            localctx.s = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7317
            self.match(PlSqlParser.FOR)
            self.state = 7318
            self.match(PlSqlParser.CLIENT)
            self.state = 7319
            localctx.ci = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7321
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 7320
                self.using_tag_clause()


            self.state = 7324
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7323
                self.force_keystore()


            self.state = 7327
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 7326
                self.identified_by_store()


            self.state = 7330
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7329
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Delete_secretContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ci = None # Token

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def CLIENT(self):
            return self.getToken(PlSqlParser.CLIENT, 0)

        def identified_by_store(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_by_storeContext,0)


        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def force_keystore(self):
            return self.getTypedRuleContext(PlSqlParser.Force_keystoreContext,0)


        def with_backup_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_backup_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_delete_secret

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDelete_secret" ):
                listener.enterDelete_secret(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDelete_secret" ):
                listener.exitDelete_secret(self)




    def delete_secret(self):

        localctx = PlSqlParser.Delete_secretContext(self, self._ctx, self.state)
        self.enterRule(localctx, 662, self.RULE_delete_secret)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7332
            self.match(PlSqlParser.DELETE)
            self.state = 7333
            self.match(PlSqlParser.SECRET)
            self.state = 7334
            self.match(PlSqlParser.FOR)
            self.state = 7335
            self.match(PlSqlParser.CLIENT)
            self.state = 7336
            localctx.ci = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7338
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 7337
                self.force_keystore()


            self.state = 7340
            self.identified_by_store()
            self.state = 7342
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7341
                self.with_backup_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_update_secret_sepsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.s = None # Token
            self.ci = None # Token

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def CLIENT(self):
            return self.getToken(PlSqlParser.CLIENT, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def AUTO_LOGIN(self):
            return self.getToken(PlSqlParser.AUTO_LOGIN, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def directory_path(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_pathContext,0)


        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def using_tag_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_tag_clauseContext,0)


        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_update_secret_seps

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_update_secret_seps" ):
                listener.enterAdd_update_secret_seps(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_update_secret_seps" ):
                listener.exitAdd_update_secret_seps(self)




    def add_update_secret_seps(self):

        localctx = PlSqlParser.Add_update_secret_sepsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 664, self.RULE_add_update_secret_seps)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7344
            _la = self._input.LA(1)
            if not(_la==21 or _la==2114):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 7345
            self.match(PlSqlParser.SECRET)
            self.state = 7346
            localctx.s = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7347
            self.match(PlSqlParser.FOR)
            self.state = 7348
            self.match(PlSqlParser.CLIENT)
            self.state = 7349
            localctx.ci = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7351
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 7350
                self.using_tag_clause()


            self.state = 7353
            self.match(PlSqlParser.TO)
            self.state = 7355
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==821:
                self.state = 7354
                self.match(PlSqlParser.LOCAL)


            self.state = 7357
            self.match(PlSqlParser.AUTO_LOGIN)
            self.state = 7358
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7359
            self.directory_path()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Delete_secret_sepsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.s = None # Token
            self.ci = None # Token

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def SQ(self):
            return self.getToken(PlSqlParser.SQ, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def CLIENT(self):
            return self.getToken(PlSqlParser.CLIENT, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def AUTO_LOGIN(self):
            return self.getToken(PlSqlParser.AUTO_LOGIN, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def directory_path(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_pathContext,0)


        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_delete_secret_seps

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDelete_secret_seps" ):
                listener.enterDelete_secret_seps(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDelete_secret_seps" ):
                listener.exitDelete_secret_seps(self)




    def delete_secret_seps(self):

        localctx = PlSqlParser.Delete_secret_sepsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 666, self.RULE_delete_secret_seps)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7361
            self.match(PlSqlParser.DELETE)
            self.state = 7362
            self.match(PlSqlParser.SECRET)
            self.state = 7363
            localctx.s = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7364
            self.match(PlSqlParser.SQ)
            self.state = 7365
            self.match(PlSqlParser.FOR)
            self.state = 7366
            self.match(PlSqlParser.CLIENT)
            self.state = 7367
            localctx.ci = self.match(PlSqlParser.CHAR_STRING)
            self.state = 7368
            self.match(PlSqlParser.FROM)
            self.state = 7370
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==821:
                self.state = 7369
                self.match(PlSqlParser.LOCAL)


            self.state = 7372
            self.match(PlSqlParser.AUTO_LOGIN)
            self.state = 7373
            self.match(PlSqlParser.KEYSTORE)
            self.state = 7374
            self.directory_path()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Zero_downtime_software_patching_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SWITCHOVER(self):
            return self.getToken(PlSqlParser.SWITCHOVER, 0)

        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def path(self):
            return self.getTypedRuleContext(PlSqlParser.PathContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def CONTAINERS(self):
            return self.getToken(PlSqlParser.CONTAINERS, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_zero_downtime_software_patching_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterZero_downtime_software_patching_clauses" ):
                listener.enterZero_downtime_software_patching_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitZero_downtime_software_patching_clauses" ):
                listener.exitZero_downtime_software_patching_clauses(self)




    def zero_downtime_software_patching_clauses(self):

        localctx = PlSqlParser.Zero_downtime_software_patching_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 668, self.RULE_zero_downtime_software_patching_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7376
            self.match(PlSqlParser.SWITCHOVER)
            self.state = 7378
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2052:
                self.state = 7377
                self.match(PlSqlParser.TO)


            self.state = 7380
            self.match(PlSqlParser.LIBRARY)
            self.state = 7381
            self.path()
            self.state = 7382
            self.match(PlSqlParser.FOR)
            self.state = 7383
            self.match(PlSqlParser.ALL)
            self.state = 7384
            self.match(PlSqlParser.CONTAINERS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class With_backup_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.bi = None # Token

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_with_backup_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWith_backup_clause" ):
                listener.enterWith_backup_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWith_backup_clause" ):
                listener.exitWith_backup_clause(self)




    def with_backup_clause(self):

        localctx = PlSqlParser.With_backup_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 670, self.RULE_with_backup_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7386
            self.match(PlSqlParser.WITH)
            self.state = 7387
            self.match(PlSqlParser.BACKUP)
            self.state = 7390
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 7388
                self.match(PlSqlParser.USING)
                self.state = 7389
                localctx.bi = self.match(PlSqlParser.CHAR_STRING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identified_by_password_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def keystore_password(self):
            return self.getTypedRuleContext(PlSqlParser.Keystore_passwordContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_identified_by_password_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentified_by_password_clause" ):
                listener.enterIdentified_by_password_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentified_by_password_clause" ):
                listener.exitIdentified_by_password_clause(self)




    def identified_by_password_clause(self):

        localctx = PlSqlParser.Identified_by_password_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 672, self.RULE_identified_by_password_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7392
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 7393
            self.match(PlSqlParser.BY)
            self.state = 7394
            self.keystore_password()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Keystore_passwordContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_keystore_password

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKeystore_password" ):
                listener.enterKeystore_password(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKeystore_password" ):
                listener.exitKeystore_password(self)




    def keystore_password(self):

        localctx = PlSqlParser.Keystore_passwordContext(self, self._ctx, self.state)
        self.enterRule(localctx, 674, self.RULE_keystore_password)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7396
            self.match(PlSqlParser.DELIMITED_ID)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class PathContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_path

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPath" ):
                listener.enterPath(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPath" ):
                listener.exitPath(self)




    def path(self):

        localctx = PlSqlParser.PathContext(self, self._ctx, self.state)
        self.enterRule(localctx, 676, self.RULE_path)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7398
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SecretContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_secret

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSecret" ):
                listener.enterSecret(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSecret" ):
                listener.exitSecret(self)




    def secret(self):

        localctx = PlSqlParser.SecretContext(self, self._ctx, self.state)
        self.enterRule(localctx, 678, self.RULE_secret)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7400
            self.match(PlSqlParser.DELIMITED_ID)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AnalyzeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ANALYZE(self):
            return self.getToken(PlSqlParser.ANALYZE, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def validation_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Validation_clausesContext,0)


        def LIST(self):
            return self.getToken(PlSqlParser.LIST, 0)

        def CHAINED(self):
            return self.getToken(PlSqlParser.CHAINED, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def STATISTICS(self):
            return self.getToken(PlSqlParser.STATISTICS, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def partition_extention_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_extention_clauseContext,0)


        def into_clause1(self):
            return self.getTypedRuleContext(PlSqlParser.Into_clause1Context,0)


        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_analyze

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAnalyze" ):
                listener.enterAnalyze(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAnalyze" ):
                listener.exitAnalyze(self)




    def analyze(self):

        localctx = PlSqlParser.AnalyzeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 680, self.RULE_analyze)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7415
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,756,self._ctx)
            if la_ == 1:
                self.state = 7402
                self.match(PlSqlParser.ANALYZE)
                self.state = 7407
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1999]:
                    self.state = 7403
                    self.match(PlSqlParser.TABLE)
                    self.state = 7404
                    self.tableview_name()
                    pass
                elif token in [675]:
                    self.state = 7405
                    self.match(PlSqlParser.INDEX)
                    self.state = 7406
                    self.index_name()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 7410
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1275 or _la==1691:
                    self.state = 7409
                    self.partition_extention_clause()


                pass

            elif la_ == 2:
                self.state = 7412
                self.match(PlSqlParser.ANALYZE)
                self.state = 7413
                self.match(PlSqlParser.CLUSTER)
                self.state = 7414
                self.cluster_name()
                pass


            self.state = 7429
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2160]:
                self.state = 7417
                self.validation_clauses()
                pass
            elif token in [813]:
                self.state = 7418
                self.match(PlSqlParser.LIST)
                self.state = 7419
                self.match(PlSqlParser.CHAINED)
                self.state = 7420
                self.match(PlSqlParser.ROWS)
                self.state = 7422
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==735:
                    self.state = 7421
                    self.into_clause1()


                pass
            elif token in [381]:
                self.state = 7424
                self.match(PlSqlParser.DELETE)
                self.state = 7426
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1865:
                    self.state = 7425
                    self.match(PlSqlParser.SYSTEM)


                self.state = 7428
                self.match(PlSqlParser.STATISTICS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_extention_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def partition_key_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_key_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_key_valueContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def subpartition_key_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Subpartition_key_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Subpartition_key_valueContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_extention_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_extention_clause" ):
                listener.enterPartition_extention_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_extention_clause" ):
                listener.exitPartition_extention_clause(self)




    def partition_extention_clause(self):

        localctx = PlSqlParser.Partition_extention_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 682, self.RULE_partition_extention_clause)
        self._la = 0 # Token type
        try:
            self.state = 7469
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7431
                self.match(PlSqlParser.PARTITION)
                self.state = 7448
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2347]:
                    self.state = 7432
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 7433
                    self.partition_name()
                    self.state = 7434
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                elif token in [580]:
                    self.state = 7436
                    self.match(PlSqlParser.FOR)
                    self.state = 7437
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 7438
                    self.partition_key_value()
                    self.state = 7443
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 7439
                        self.match(PlSqlParser.COMMA)
                        self.state = 7440
                        self.partition_key_value()
                        self.state = 7445
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 7446
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [1691]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7450
                self.match(PlSqlParser.SUBPARTITION)
                self.state = 7467
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2347]:
                    self.state = 7451
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 7452
                    self.subpartition_name()
                    self.state = 7453
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                elif token in [580]:
                    self.state = 7455
                    self.match(PlSqlParser.FOR)
                    self.state = 7456
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 7457
                    self.subpartition_key_value()
                    self.state = 7462
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 7458
                        self.match(PlSqlParser.COMMA)
                        self.state = 7459
                        self.subpartition_key_value()
                        self.state = 7464
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 7465
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Validation_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VALIDATE(self):
            return self.getToken(PlSqlParser.VALIDATE, 0)

        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def DANGLING(self):
            return self.getToken(PlSqlParser.DANGLING, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def STRUCTURE(self):
            return self.getToken(PlSqlParser.STRUCTURE, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def FAST(self):
            return self.getToken(PlSqlParser.FAST, 0)

        def online_or_offline(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Online_or_offlineContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Online_or_offlineContext,i)


        def into_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Into_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Into_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_validation_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterValidation_clauses" ):
                listener.enterValidation_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitValidation_clauses" ):
                listener.exitValidation_clauses(self)




    def validation_clauses(self):

        localctx = PlSqlParser.Validation_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 684, self.RULE_validation_clauses)
        self._la = 0 # Token type
        try:
            self.state = 7500
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,771,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7471
                self.match(PlSqlParser.VALIDATE)
                self.state = 7472
                self.match(PlSqlParser.REF)
                self.state = 7473
                self.match(PlSqlParser.UPDATE)
                self.state = 7478
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1590:
                    self.state = 7474
                    self.match(PlSqlParser.SET)
                    self.state = 7475
                    self.match(PlSqlParser.DANGLING)
                    self.state = 7476
                    self.match(PlSqlParser.TO)
                    self.state = 7477
                    self.match(PlSqlParser.NULL_)


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7480
                self.match(PlSqlParser.VALIDATE)
                self.state = 7481
                self.match(PlSqlParser.STRUCTURE)
                self.state = 7492
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,768,self._ctx)
                if la_ == 1:
                    self.state = 7482
                    self.match(PlSqlParser.CASCADE)
                    self.state = 7483
                    self.match(PlSqlParser.FAST)

                elif la_ == 2:
                    self.state = 7484
                    self.match(PlSqlParser.CASCADE)
                    self.state = 7486
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,766,self._ctx)
                    if la_ == 1:
                        self.state = 7485
                        self.online_or_offline()


                    self.state = 7489
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,767,self._ctx)
                    if la_ == 1:
                        self.state = 7488
                        self.into_clause()



                elif la_ == 3:
                    self.state = 7491
                    self.match(PlSqlParser.CASCADE)


                self.state = 7495
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1177 or _la==1190:
                    self.state = 7494
                    self.online_or_offline()


                self.state = 7498
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==153 or _la==735:
                    self.state = 7497
                    self.into_clause()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Compute_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMPUTE(self):
            return self.getToken(PlSqlParser.COMPUTE, 0)

        def STATISTICS(self):
            return self.getToken(PlSqlParser.STATISTICS, 0)

        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def for_clause(self):
            return self.getTypedRuleContext(PlSqlParser.For_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_compute_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompute_clauses" ):
                listener.enterCompute_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompute_clauses" ):
                listener.exitCompute_clauses(self)




    def compute_clauses(self):

        localctx = PlSqlParser.Compute_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 686, self.RULE_compute_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7502
            self.match(PlSqlParser.COMPUTE)
            self.state = 7504
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1865:
                self.state = 7503
                self.match(PlSqlParser.SYSTEM)


            self.state = 7506
            self.match(PlSqlParser.STATISTICS)
            self.state = 7508
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,773,self._ctx)
            if la_ == 1:
                self.state = 7507
                self.for_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class For_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def for_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.For_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.For_clauseContext,i)


        def SIZE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SIZE)
            else:
                return self.getToken(PlSqlParser.SIZE, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def INDEXED(self):
            return self.getToken(PlSqlParser.INDEXED, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_for_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFor_clause" ):
                listener.enterFor_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFor_clause" ):
                listener.exitFor_clause(self)




    def for_clause(self):

        localctx = PlSqlParser.For_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 688, self.RULE_for_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7510
            self.match(PlSqlParser.FOR)
            self.state = 7558
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1999]:
                self.state = 7511
                self.match(PlSqlParser.TABLE)
                self.state = 7515
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,774,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 7512
                        self.for_clause() 
                    self.state = 7517
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,774,self._ctx)

                pass
            elif token in [38]:
                self.state = 7518
                self.match(PlSqlParser.ALL)
                self.state = 7537
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [227, 671]:
                    self.state = 7520
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==671:
                        self.state = 7519
                        self.match(PlSqlParser.INDEXED)


                    self.state = 7522
                    self.match(PlSqlParser.COLUMNS)
                    self.state = 7525
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,776,self._ctx)
                    if la_ == 1:
                        self.state = 7523
                        self.match(PlSqlParser.SIZE)
                        self.state = 7524
                        self.match(PlSqlParser.UNSIGNED_INTEGER)


                    self.state = 7530
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,777,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 7527
                            self.for_clause() 
                        self.state = 7532
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,777,self._ctx)

                    pass
                elif token in [672, 821]:
                    self.state = 7534
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==821:
                        self.state = 7533
                        self.match(PlSqlParser.LOCAL)


                    self.state = 7536
                    self.match(PlSqlParser.INDEXES)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [227]:
                self.state = 7539
                self.match(PlSqlParser.COLUMNS)
                self.state = 7542
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1617:
                    self.state = 7540
                    self.match(PlSqlParser.SIZE)
                    self.state = 7541
                    self.match(PlSqlParser.UNSIGNED_INTEGER)


                self.state = 7548 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 7544
                        self.column_name()
                        self.state = 7545
                        self.match(PlSqlParser.SIZE)
                        self.state = 7546
                        self.match(PlSqlParser.UNSIGNED_INTEGER)

                    else:
                        raise NoViableAltException(self)
                    self.state = 7550 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,781,self._ctx)

                self.state = 7555
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,782,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 7552
                        self.for_clause() 
                    self.state = 7557
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,782,self._ctx)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Online_or_offlineContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_online_or_offline

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOnline_or_offline" ):
                listener.enterOnline_or_offline(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOnline_or_offline" ):
                listener.exitOnline_or_offline(self)




    def online_or_offline(self):

        localctx = PlSqlParser.Online_or_offlineContext(self, self._ctx, self.state)
        self.enterRule(localctx, 690, self.RULE_online_or_offline)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7560
            _la = self._input.LA(1)
            if not(_la==1177 or _la==1190):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Into_clause1Context(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_into_clause1

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInto_clause1" ):
                listener.enterInto_clause1(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInto_clause1" ):
                listener.exitInto_clause1(self)




    def into_clause1(self):

        localctx = PlSqlParser.Into_clause1Context(self, self._ctx, self.state)
        self.enterRule(localctx, 692, self.RULE_into_clause1)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7562
            self.match(PlSqlParser.INTO)
            self.state = 7564
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 7563
                self.tableview_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_key_valueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def literal(self):
            return self.getTypedRuleContext(PlSqlParser.LiteralContext,0)


        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_key_value

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_key_value" ):
                listener.enterPartition_key_value(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_key_value" ):
                listener.exitPartition_key_value(self)




    def partition_key_value(self):

        localctx = PlSqlParser.Partition_key_valueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 694, self.RULE_partition_key_value)
        try:
            self.state = 7569
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [194, 878, 2301, 2311, 2316, 2317, 2318, 2325, 2341, 2342, 2343]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7566
                self.literal()
                pass
            elif token in [2020]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7567
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 7568
                self.quoted_string()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_key_valueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def literal(self):
            return self.getTypedRuleContext(PlSqlParser.LiteralContext,0)


        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_key_value

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_key_value" ):
                listener.enterSubpartition_key_value(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_key_value" ):
                listener.exitSubpartition_key_value(self)




    def subpartition_key_value(self):

        localctx = PlSqlParser.Subpartition_key_valueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 696, self.RULE_subpartition_key_value)
        try:
            self.state = 7574
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [194, 878, 2301, 2311, 2316, 2317, 2318, 2325, 2341, 2342, 2343]:
                self.enterOuterAlt(localctx, 1)
                self.state = 7571
                self.literal()
                pass
            elif token in [2020]:
                self.enterOuterAlt(localctx, 2)
                self.state = 7572
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 7573
                self.quoted_string()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Associate_statisticsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ASSOCIATE(self):
            return self.getToken(PlSqlParser.ASSOCIATE, 0)

        def STATISTICS(self):
            return self.getToken(PlSqlParser.STATISTICS, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def column_association(self):
            return self.getTypedRuleContext(PlSqlParser.Column_associationContext,0)


        def function_association(self):
            return self.getTypedRuleContext(PlSqlParser.Function_associationContext,0)


        def storage_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Storage_table_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_associate_statistics

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAssociate_statistics" ):
                listener.enterAssociate_statistics(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAssociate_statistics" ):
                listener.exitAssociate_statistics(self)




    def associate_statistics(self):

        localctx = PlSqlParser.Associate_statisticsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 698, self.RULE_associate_statistics)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7576
            self.match(PlSqlParser.ASSOCIATE)
            self.state = 7577
            self.match(PlSqlParser.STATISTICS)
            self.state = 7578
            self.match(PlSqlParser.WITH)
            self.state = 7581
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [227]:
                self.state = 7579
                self.column_association()
                pass
            elif token in [593, 672, 690, 1258, 2075]:
                self.state = 7580
                self.function_association()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 7584
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 7583
                self.storage_table_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_associationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def tableview_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tableview_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def using_statistics_type(self):
            return self.getTypedRuleContext(PlSqlParser.Using_statistics_typeContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_column_association

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_association" ):
                listener.enterColumn_association(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_association" ):
                listener.exitColumn_association(self)




    def column_association(self):

        localctx = PlSqlParser.Column_associationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 700, self.RULE_column_association)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7586
            self.match(PlSqlParser.COLUMNS)
            self.state = 7587
            self.tableview_name()
            self.state = 7588
            self.match(PlSqlParser.PERIOD)
            self.state = 7589
            self.column_name()
            self.state = 7597
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 7590
                self.match(PlSqlParser.COMMA)
                self.state = 7591
                self.tableview_name()
                self.state = 7592
                self.match(PlSqlParser.PERIOD)
                self.state = 7593
                self.column_name()
                self.state = 7599
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 7600
            self.using_statistics_type()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_associationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FUNCTIONS(self):
            return self.getToken(PlSqlParser.FUNCTIONS, 0)

        def function_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Function_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Function_nameContext,i)


        def PACKAGES(self):
            return self.getToken(PlSqlParser.PACKAGES, 0)

        def package_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Package_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Package_nameContext,i)


        def TYPES(self):
            return self.getToken(PlSqlParser.TYPES, 0)

        def type_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_nameContext,i)


        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def index_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Index_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Index_nameContext,i)


        def INDEXTYPES(self):
            return self.getToken(PlSqlParser.INDEXTYPES, 0)

        def indextype_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Indextype_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Indextype_nameContext,i)


        def using_statistics_type(self):
            return self.getTypedRuleContext(PlSqlParser.Using_statistics_typeContext,0)


        def default_cost_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Default_cost_clauseContext,0)


        def default_selectivity_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Default_selectivity_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_function_association

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_association" ):
                listener.enterFunction_association(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_association" ):
                listener.exitFunction_association(self)




    def function_association(self):

        localctx = PlSqlParser.Function_associationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 702, self.RULE_function_association)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7647
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [593]:
                self.state = 7602
                self.match(PlSqlParser.FUNCTIONS)
                self.state = 7603
                self.function_name()
                self.state = 7608
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7604
                    self.match(PlSqlParser.COMMA)
                    self.state = 7605
                    self.function_name()
                    self.state = 7610
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1258]:
                self.state = 7611
                self.match(PlSqlParser.PACKAGES)
                self.state = 7612
                self.package_name()
                self.state = 7617
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7613
                    self.match(PlSqlParser.COMMA)
                    self.state = 7614
                    self.package_name()
                    self.state = 7619
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2075]:
                self.state = 7620
                self.match(PlSqlParser.TYPES)
                self.state = 7621
                self.type_name()
                self.state = 7626
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7622
                    self.match(PlSqlParser.COMMA)
                    self.state = 7623
                    self.type_name()
                    self.state = 7628
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [672]:
                self.state = 7629
                self.match(PlSqlParser.INDEXES)
                self.state = 7630
                self.index_name()
                self.state = 7635
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7631
                    self.match(PlSqlParser.COMMA)
                    self.state = 7632
                    self.index_name()
                    self.state = 7637
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [690]:
                self.state = 7638
                self.match(PlSqlParser.INDEXTYPES)
                self.state = 7639
                self.indextype_name()
                self.state = 7644
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7640
                    self.match(PlSqlParser.COMMA)
                    self.state = 7641
                    self.indextype_name()
                    self.state = 7646
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

            self.state = 7660
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,798,self._ctx)
            if la_ == 1:
                self.state = 7649
                self.using_statistics_type()
                pass

            elif la_ == 2:
                self.state = 7650
                self.default_cost_clause()
                self.state = 7653
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 7651
                    self.match(PlSqlParser.COMMA)
                    self.state = 7652
                    self.default_selectivity_clause()


                pass

            elif la_ == 3:
                self.state = 7655
                self.default_selectivity_clause()
                self.state = 7658
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 7656
                    self.match(PlSqlParser.COMMA)
                    self.state = 7657
                    self.default_cost_clause()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Indextype_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_indextype_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndextype_name" ):
                listener.enterIndextype_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndextype_name" ):
                listener.exitIndextype_name(self)




    def indextype_name(self):

        localctx = PlSqlParser.Indextype_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 704, self.RULE_indextype_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7662
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_statistics_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def statistics_type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Statistics_type_nameContext,0)


        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_using_statistics_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_statistics_type" ):
                listener.enterUsing_statistics_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_statistics_type" ):
                listener.exitUsing_statistics_type(self)




    def using_statistics_type(self):

        localctx = PlSqlParser.Using_statistics_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 706, self.RULE_using_statistics_type)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7664
            self.match(PlSqlParser.USING)
            self.state = 7667
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.state = 7665
                self.statistics_type_name()
                pass
            elif token in [1162]:
                self.state = 7666
                self.match(PlSqlParser.NULL_)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Statistics_type_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_statistics_type_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStatistics_type_name" ):
                listener.enterStatistics_type_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStatistics_type_name" ):
                listener.exitStatistics_type_name(self)




    def statistics_type_name(self):

        localctx = PlSqlParser.Statistics_type_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 708, self.RULE_statistics_type_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7669
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_cost_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def COST(self):
            return self.getToken(PlSqlParser.COST, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def cpu_cost(self):
            return self.getTypedRuleContext(PlSqlParser.Cpu_costContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def io_cost(self):
            return self.getTypedRuleContext(PlSqlParser.Io_costContext,0)


        def network_cost(self):
            return self.getTypedRuleContext(PlSqlParser.Network_costContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_cost_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_cost_clause" ):
                listener.enterDefault_cost_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_cost_clause" ):
                listener.exitDefault_cost_clause(self)




    def default_cost_clause(self):

        localctx = PlSqlParser.Default_cost_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 710, self.RULE_default_cost_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7671
            self.match(PlSqlParser.DEFAULT)
            self.state = 7672
            self.match(PlSqlParser.COST)
            self.state = 7673
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 7674
            self.cpu_cost()
            self.state = 7675
            self.match(PlSqlParser.COMMA)
            self.state = 7676
            self.io_cost()
            self.state = 7677
            self.match(PlSqlParser.COMMA)
            self.state = 7678
            self.network_cost()
            self.state = 7679
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cpu_costContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cpu_cost

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCpu_cost" ):
                listener.enterCpu_cost(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCpu_cost" ):
                listener.exitCpu_cost(self)




    def cpu_cost(self):

        localctx = PlSqlParser.Cpu_costContext(self, self._ctx, self.state)
        self.enterRule(localctx, 712, self.RULE_cpu_cost)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7681
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Io_costContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_io_cost

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIo_cost" ):
                listener.enterIo_cost(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIo_cost" ):
                listener.exitIo_cost(self)




    def io_cost(self):

        localctx = PlSqlParser.Io_costContext(self, self._ctx, self.state)
        self.enterRule(localctx, 714, self.RULE_io_cost)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7683
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Network_costContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_network_cost

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNetwork_cost" ):
                listener.enterNetwork_cost(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNetwork_cost" ):
                listener.exitNetwork_cost(self)




    def network_cost(self):

        localctx = PlSqlParser.Network_costContext(self, self._ctx, self.state)
        self.enterRule(localctx, 716, self.RULE_network_cost)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7685
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_selectivity_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def SELECTIVITY(self):
            return self.getToken(PlSqlParser.SELECTIVITY, 0)

        def default_selectivity(self):
            return self.getTypedRuleContext(PlSqlParser.Default_selectivityContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_default_selectivity_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_selectivity_clause" ):
                listener.enterDefault_selectivity_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_selectivity_clause" ):
                listener.exitDefault_selectivity_clause(self)




    def default_selectivity_clause(self):

        localctx = PlSqlParser.Default_selectivity_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 718, self.RULE_default_selectivity_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7687
            self.match(PlSqlParser.DEFAULT)
            self.state = 7688
            self.match(PlSqlParser.SELECTIVITY)
            self.state = 7689
            self.default_selectivity()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_selectivityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_selectivity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_selectivity" ):
                listener.enterDefault_selectivity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_selectivity" ):
                listener.exitDefault_selectivity(self)




    def default_selectivity(self):

        localctx = PlSqlParser.Default_selectivityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 720, self.RULE_default_selectivity)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7691
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Storage_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def MANAGED(self):
            return self.getToken(PlSqlParser.MANAGED, 0)

        def STORAGE(self):
            return self.getToken(PlSqlParser.STORAGE, 0)

        def TABLES(self):
            return self.getToken(PlSqlParser.TABLES, 0)

        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_storage_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStorage_table_clause" ):
                listener.enterStorage_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStorage_table_clause" ):
                listener.exitStorage_table_clause(self)




    def storage_table_clause(self):

        localctx = PlSqlParser.Storage_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 722, self.RULE_storage_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7693
            self.match(PlSqlParser.WITH)
            self.state = 7694
            _la = self._input.LA(1)
            if not(_la==1865 or _la==2144):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 7695
            self.match(PlSqlParser.MANAGED)
            self.state = 7696
            self.match(PlSqlParser.STORAGE)
            self.state = 7697
            self.match(PlSqlParser.TABLES)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unified_auditingContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def policy_name(self):
            return self.getTypedRuleContext(PlSqlParser.Policy_nameContext,0)


        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def NAMESPACE(self):
            return self.getToken(PlSqlParser.NAMESPACE, 0)

        def oracle_namespace(self):
            return self.getTypedRuleContext(PlSqlParser.Oracle_namespaceContext,0)


        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def attribute_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Attribute_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Attribute_nameContext,i)


        def audit_user(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Audit_userContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Audit_userContext,i)


        def WHENEVER(self):
            return self.getToken(PlSqlParser.WHENEVER, 0)

        def SUCCESSFUL(self):
            return self.getToken(PlSqlParser.SUCCESSFUL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_unified_auditing

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnified_auditing" ):
                listener.enterUnified_auditing(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnified_auditing" ):
                listener.exitUnified_auditing(self)




    def unified_auditing(self):

        localctx = PlSqlParser.Unified_auditingContext(self, self._ctx, self.state)
        self.enterRule(localctx, 724, self.RULE_unified_auditing)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7699
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")
            self.state = 7700
            self.match(PlSqlParser.AUDIT)
            self.state = 7744
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1339]:
                self.state = 7701
                self.match(PlSqlParser.POLICY)
                self.state = 7702
                self.policy_name()
                self.state = 7712
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==154 or _la==497:
                    self.state = 7703
                    _la = self._input.LA(1)
                    if not(_la==154 or _la==497):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 7704
                    self.audit_user()
                    self.state = 7709
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 7705
                        self.match(PlSqlParser.COMMA)
                        self.state = 7706
                        self.audit_user()
                        self.state = 7711
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                self.state = 7719
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2203:
                    self.state = 7714
                    self.match(PlSqlParser.WHENEVER)
                    self.state = 7716
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1138:
                        self.state = 7715
                        self.match(PlSqlParser.NOT)


                    self.state = 7718
                    self.match(PlSqlParser.SUCCESSFUL)


                pass
            elif token in [281]:
                self.state = 7721
                self.match(PlSqlParser.CONTEXT)
                self.state = 7722
                self.match(PlSqlParser.NAMESPACE)
                self.state = 7723
                self.oracle_namespace()
                self.state = 7724
                self.match(PlSqlParser.ATTRIBUTES)
                self.state = 7725
                self.attribute_name()
                self.state = 7730
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7726
                    self.match(PlSqlParser.COMMA)
                    self.state = 7727
                    self.attribute_name()
                    self.state = 7732
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 7742
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==154:
                    self.state = 7733
                    self.match(PlSqlParser.BY)
                    self.state = 7734
                    self.audit_user()
                    self.state = 7739
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 7735
                        self.match(PlSqlParser.COMMA)
                        self.state = 7736
                        self.audit_user()
                        self.state = 7741
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Policy_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_policy_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPolicy_name" ):
                listener.enterPolicy_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPolicy_name" ):
                listener.exitPolicy_name(self)




    def policy_name(self):

        localctx = PlSqlParser.Policy_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 726, self.RULE_policy_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7746
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Audit_traditionalContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def audit_operation_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_operation_clauseContext,0)


        def audit_schema_object_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_schema_object_clauseContext,0)


        def NETWORK(self):
            return self.getToken(PlSqlParser.NETWORK, 0)

        def audit_direct_path(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_direct_pathContext,0)


        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def WHENEVER(self):
            return self.getToken(PlSqlParser.WHENEVER, 0)

        def SUCCESSFUL(self):
            return self.getToken(PlSqlParser.SUCCESSFUL, 0)

        def audit_container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_container_clauseContext,0)


        def SESSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SESSION)
            else:
                return self.getToken(PlSqlParser.SESSION, i)

        def ACCESS(self):
            return self.getToken(PlSqlParser.ACCESS, 0)

        def auditing_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Auditing_by_clauseContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_audit_traditional

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAudit_traditional" ):
                listener.enterAudit_traditional(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAudit_traditional" ):
                listener.exitAudit_traditional(self)




    def audit_traditional(self):

        localctx = PlSqlParser.Audit_traditionalContext(self, self._ctx, self.state)
        self.enterRule(localctx, 728, self.RULE_audit_traditional)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7748
            self.match(PlSqlParser.AUDIT)
            self.state = 7759
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,809,self._ctx)
            if la_ == 1:
                self.state = 7749
                self.audit_operation_clause()
                self.state = 7754
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,808,self._ctx)
                if la_ == 1:
                    self.state = 7750
                    self.auditing_by_clause()

                elif la_ == 2:
                    self.state = 7751
                    self.match(PlSqlParser.IN)
                    self.state = 7752
                    self.match(PlSqlParser.SESSION)
                    self.state = 7753
                    self.match(PlSqlParser.CURRENT)


                pass

            elif la_ == 2:
                self.state = 7756
                self.audit_schema_object_clause()
                pass

            elif la_ == 3:
                self.state = 7757
                self.match(PlSqlParser.NETWORK)
                pass

            elif la_ == 4:
                self.state = 7758
                self.audit_direct_path()
                pass


            self.state = 7763
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,810,self._ctx)
            if la_ == 1:
                self.state = 7761
                self.match(PlSqlParser.BY)
                self.state = 7762
                _la = self._input.LA(1)
                if not(_la==4 or _la==1586):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 7770
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,812,self._ctx)
            if la_ == 1:
                self.state = 7765
                self.match(PlSqlParser.WHENEVER)
                self.state = 7767
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1138:
                    self.state = 7766
                    self.match(PlSqlParser.NOT)


                self.state = 7769
                self.match(PlSqlParser.SUCCESSFUL)


            self.state = 7773
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,813,self._ctx)
            if la_ == 1:
                self.state = 7772
                self.audit_container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Audit_direct_pathContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DIRECT_PATH(self):
            return self.getToken(PlSqlParser.DIRECT_PATH, 0)

        def auditing_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Auditing_by_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_audit_direct_path

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAudit_direct_path" ):
                listener.enterAudit_direct_path(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAudit_direct_path" ):
                listener.exitAudit_direct_path(self)




    def audit_direct_path(self):

        localctx = PlSqlParser.Audit_direct_pathContext(self, self._ctx, self.state)
        self.enterRule(localctx, 730, self.RULE_audit_direct_path)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7775
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")
            self.state = 7776
            self.match(PlSqlParser.DIRECT_PATH)
            self.state = 7777
            self.auditing_by_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Audit_container_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONTAINER(self):
            return self.getToken(PlSqlParser.CONTAINER, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_audit_container_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAudit_container_clause" ):
                listener.enterAudit_container_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAudit_container_clause" ):
                listener.exitAudit_container_clause(self)




    def audit_container_clause(self):

        localctx = PlSqlParser.Audit_container_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 732, self.RULE_audit_container_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7779
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")

            self.state = 7780
            self.match(PlSqlParser.CONTAINER)
            self.state = 7781
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 7782
            _la = self._input.LA(1)
            if not(_la==38 or _la==319):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Audit_operation_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def sql_statement_shortcut(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sql_statement_shortcutContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sql_statement_shortcutContext,i)


        def ALL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ALL)
            else:
                return self.getToken(PlSqlParser.ALL, i)

        def system_privilege(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.System_privilegeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.System_privilegeContext,i)


        def PRIVILEGES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIVILEGES)
            else:
                return self.getToken(PlSqlParser.PRIVILEGES, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def STATEMENTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.STATEMENTS)
            else:
                return self.getToken(PlSqlParser.STATEMENTS, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_audit_operation_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAudit_operation_clause" ):
                listener.enterAudit_operation_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAudit_operation_clause" ):
                listener.exitAudit_operation_clause(self)




    def audit_operation_clause(self):

        localctx = PlSqlParser.Audit_operation_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 734, self.RULE_audit_operation_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7820
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,822,self._ctx)
            if la_ == 1:
                self.state = 7789
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,815,self._ctx)
                if la_ == 1:
                    self.state = 7784
                    self.sql_statement_shortcut()
                    pass

                elif la_ == 2:
                    self.state = 7785
                    self.match(PlSqlParser.ALL)
                    self.state = 7787
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,814,self._ctx)
                    if la_ == 1:
                        self.state = 7786
                        self.match(PlSqlParser.STATEMENTS)


                    pass


                self.state = 7801
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,818,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 7791
                        self.match(PlSqlParser.COMMA)
                        self.state = 7797
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,817,self._ctx)
                        if la_ == 1:
                            self.state = 7792
                            self.sql_statement_shortcut()
                            pass

                        elif la_ == 2:
                            self.state = 7793
                            self.match(PlSqlParser.ALL)
                            self.state = 7795
                            self._errHandler.sync(self)
                            la_ = self._interp.adaptivePredict(self._input,816,self._ctx)
                            if la_ == 1:
                                self.state = 7794
                                self.match(PlSqlParser.STATEMENTS)


                            pass

                 
                    self.state = 7803
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,818,self._ctx)

                pass

            elif la_ == 2:
                self.state = 7807
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,819,self._ctx)
                if la_ == 1:
                    self.state = 7804
                    self.system_privilege()
                    pass

                elif la_ == 2:
                    self.state = 7805
                    self.match(PlSqlParser.ALL)
                    self.state = 7806
                    self.match(PlSqlParser.PRIVILEGES)
                    pass


                self.state = 7817
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,821,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 7809
                        self.match(PlSqlParser.COMMA)
                        self.state = 7813
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,820,self._ctx)
                        if la_ == 1:
                            self.state = 7810
                            self.system_privilege()
                            pass

                        elif la_ == 2:
                            self.state = 7811
                            self.match(PlSqlParser.ALL)
                            self.state = 7812
                            self.match(PlSqlParser.PRIVILEGES)
                            pass

                 
                    self.state = 7819
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,821,self._ctx)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Auditing_by_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def audit_user(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Audit_userContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Audit_userContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_auditing_by_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAuditing_by_clause" ):
                listener.enterAuditing_by_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAuditing_by_clause" ):
                listener.exitAuditing_by_clause(self)




    def auditing_by_clause(self):

        localctx = PlSqlParser.Auditing_by_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 736, self.RULE_auditing_by_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7822
            self.match(PlSqlParser.BY)
            self.state = 7823
            self.audit_user()
            self.state = 7828
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,823,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 7824
                    self.match(PlSqlParser.COMMA)
                    self.state = 7825
                    self.audit_user() 
                self.state = 7830
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,823,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Audit_userContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_audit_user

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAudit_user" ):
                listener.enterAudit_user(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAudit_user" ):
                listener.exitAudit_user(self)




    def audit_user(self):

        localctx = PlSqlParser.Audit_userContext(self, self._ctx, self.state)
        self.enterRule(localctx, 738, self.RULE_audit_user)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7831
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Audit_schema_object_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def auditing_on_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Auditing_on_clauseContext,0)


        def sql_operation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sql_operationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sql_operationContext,i)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_audit_schema_object_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAudit_schema_object_clause" ):
                listener.enterAudit_schema_object_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAudit_schema_object_clause" ):
                listener.exitAudit_schema_object_clause(self)




    def audit_schema_object_clause(self):

        localctx = PlSqlParser.Audit_schema_object_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 740, self.RULE_audit_schema_object_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7842
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [42, 83, 230, 381, 505, 565, 607, 675, 713, 829, 1429, 1481, 1569, 2114]:
                self.state = 7833
                self.sql_operation()
                self.state = 7838
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7834
                    self.match(PlSqlParser.COMMA)
                    self.state = 7835
                    self.sql_operation()
                    self.state = 7840
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [38]:
                self.state = 7841
                self.match(PlSqlParser.ALL)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 7844
            self.auditing_on_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sql_operationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def GRANT(self):
            return self.getToken(PlSqlParser.GRANT, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def SELECT(self):
            return self.getToken(PlSqlParser.SELECT, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_operation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_operation" ):
                listener.enterSql_operation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_operation" ):
                listener.exitSql_operation(self)




    def sql_operation(self):

        localctx = PlSqlParser.Sql_operationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 742, self.RULE_sql_operation)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7846
            _la = self._input.LA(1)
            if not(_la==42 or _la==83 or _la==230 or _la==381 or _la==505 or _la==565 or _la==607 or _la==675 or _la==713 or _la==829 or _la==1429 or _la==1481 or _la==1569 or _la==2114):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Auditing_on_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Object_nameContext,0)


        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def MINING(self):
            return self.getToken(PlSqlParser.MINING, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def model_name(self):
            return self.getTypedRuleContext(PlSqlParser.Model_nameContext,0)


        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def TRANSLATION(self):
            return self.getToken(PlSqlParser.TRANSLATION, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def profile_name(self):
            return self.getTypedRuleContext(PlSqlParser.Profile_nameContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_auditing_on_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAuditing_on_clause" ):
                listener.enterAuditing_on_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAuditing_on_clause" ):
                listener.exitAuditing_on_clause(self)




    def auditing_on_clause(self):

        localctx = PlSqlParser.Auditing_on_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 744, self.RULE_auditing_on_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7848
            self.match(PlSqlParser.ON)
            self.state = 7861
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,826,self._ctx)
            if la_ == 1:
                self.state = 7849
                self.object_name()
                pass

            elif la_ == 2:
                self.state = 7850
                self.match(PlSqlParser.DIRECTORY)
                self.state = 7851
                self.regular_id()
                pass

            elif la_ == 3:
                self.state = 7852
                self.match(PlSqlParser.MINING)
                self.state = 7853
                self.match(PlSqlParser.MODEL)
                self.state = 7854
                self.model_name()
                pass

            elif la_ == 4:
                self.state = 7855
                if not self.isVersion12():
                    from antlr4.error.Errors import FailedPredicateException
                    raise FailedPredicateException(self, "self.isVersion12()")
                self.state = 7856
                self.match(PlSqlParser.SQL)
                self.state = 7857
                self.match(PlSqlParser.TRANSLATION)
                self.state = 7858
                self.match(PlSqlParser.PROFILE)
                self.state = 7859
                self.profile_name()
                pass

            elif la_ == 5:
                self.state = 7860
                self.match(PlSqlParser.DEFAULT)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_model_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_name" ):
                listener.enterModel_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_name" ):
                listener.exitModel_name(self)




    def model_name(self):

        localctx = PlSqlParser.Model_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 746, self.RULE_model_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7866
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,827,self._ctx)
            if la_ == 1:
                self.state = 7863
                self.id_expression()
                self.state = 7864
                self.match(PlSqlParser.PERIOD)


            self.state = 7868
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_object_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_name" ):
                listener.enterObject_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_name" ):
                listener.exitObject_name(self)




    def object_name(self):

        localctx = PlSqlParser.Object_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 748, self.RULE_object_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7873
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,828,self._ctx)
            if la_ == 1:
                self.state = 7870
                self.id_expression()
                self.state = 7871
                self.match(PlSqlParser.PERIOD)


            self.state = 7875
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Profile_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_profile_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProfile_name" ):
                listener.enterProfile_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProfile_name" ):
                listener.exitProfile_name(self)




    def profile_name(self):

        localctx = PlSqlParser.Profile_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 750, self.RULE_profile_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7880
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,829,self._ctx)
            if la_ == 1:
                self.state = 7877
                self.id_expression()
                self.state = 7878
                self.match(PlSqlParser.PERIOD)


            self.state = 7882
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sql_statement_shortcutContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def OUTLINE(self):
            return self.getToken(PlSqlParser.OUTLINE, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def SYNONYM(self):
            return self.getToken(PlSqlParser.SYNONYM, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def GRANT(self):
            return self.getToken(PlSqlParser.GRANT, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def SELECT(self):
            return self.getToken(PlSqlParser.SELECT, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_statement_shortcut

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_statement_shortcut" ):
                listener.enterSql_statement_shortcut(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_statement_shortcut" ):
                listener.exitSql_statement_shortcut(self)




    def sql_statement_shortcut(self):

        localctx = PlSqlParser.Sql_statement_shortcutContext(self, self._ctx, self.state)
        self.enterRule(localctx, 752, self.RULE_sql_statement_shortcut)
        try:
            self.state = 7954
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,830,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 7884
                self.match(PlSqlParser.ALTER)
                self.state = 7885
                self.match(PlSqlParser.SYSTEM)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 7886
                self.match(PlSqlParser.CLUSTER)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 7887
                self.match(PlSqlParser.CONTEXT)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 7888
                self.match(PlSqlParser.DATABASE)
                self.state = 7889
                self.match(PlSqlParser.LINK)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 7890
                self.match(PlSqlParser.DIMENSION)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 7891
                self.match(PlSqlParser.DIRECTORY)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 7892
                self.match(PlSqlParser.INDEX)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 7893
                self.match(PlSqlParser.MATERIALIZED)
                self.state = 7894
                self.match(PlSqlParser.VIEW)
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 7895
                self.match(PlSqlParser.NOT)
                self.state = 7896
                self.match(PlSqlParser.EXISTS)
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 7897
                self.match(PlSqlParser.OUTLINE)
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 7898
                if not self.isVersion12():
                    from antlr4.error.Errors import FailedPredicateException
                    raise FailedPredicateException(self, "self.isVersion12()")
                self.state = 7899
                self.match(PlSqlParser.PLUGGABLE)
                self.state = 7900
                self.match(PlSqlParser.DATABASE)
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 7901
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 7902
                self.match(PlSqlParser.PROFILE)
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 7903
                self.match(PlSqlParser.PUBLIC)
                self.state = 7904
                self.match(PlSqlParser.DATABASE)
                self.state = 7905
                self.match(PlSqlParser.LINK)
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 7906
                self.match(PlSqlParser.PUBLIC)
                self.state = 7907
                self.match(PlSqlParser.SYNONYM)
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 7908
                self.match(PlSqlParser.ROLE)
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 7909
                self.match(PlSqlParser.ROLLBACK)
                self.state = 7910
                self.match(PlSqlParser.SEGMENT)
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 7911
                self.match(PlSqlParser.SEQUENCE)
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 7912
                self.match(PlSqlParser.SESSION)
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 7913
                self.match(PlSqlParser.SYNONYM)
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 7914
                self.match(PlSqlParser.SYSTEM)
                self.state = 7915
                self.match(PlSqlParser.AUDIT)
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 7916
                self.match(PlSqlParser.SYSTEM)
                self.state = 7917
                self.match(PlSqlParser.GRANT)
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 7918
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 7919
                self.match(PlSqlParser.TABLESPACE)
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 7920
                self.match(PlSqlParser.TRIGGER)
                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 7921
                self.match(PlSqlParser.TYPE)
                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 7922
                self.match(PlSqlParser.USER)
                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 7923
                self.match(PlSqlParser.VIEW)
                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 7924
                self.match(PlSqlParser.ALTER)
                self.state = 7925
                self.match(PlSqlParser.SEQUENCE)
                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 7926
                self.match(PlSqlParser.ALTER)
                self.state = 7927
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 7928
                self.match(PlSqlParser.COMMENT)
                self.state = 7929
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 32:
                self.enterOuterAlt(localctx, 32)
                self.state = 7930
                self.match(PlSqlParser.DELETE)
                self.state = 7931
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 33:
                self.enterOuterAlt(localctx, 33)
                self.state = 7932
                self.match(PlSqlParser.EXECUTE)
                self.state = 7933
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 34:
                self.enterOuterAlt(localctx, 34)
                self.state = 7934
                self.match(PlSqlParser.GRANT)
                self.state = 7935
                self.match(PlSqlParser.DIRECTORY)
                pass

            elif la_ == 35:
                self.enterOuterAlt(localctx, 35)
                self.state = 7936
                self.match(PlSqlParser.GRANT)
                self.state = 7937
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 36:
                self.enterOuterAlt(localctx, 36)
                self.state = 7938
                self.match(PlSqlParser.GRANT)
                self.state = 7939
                self.match(PlSqlParser.SEQUENCE)
                pass

            elif la_ == 37:
                self.enterOuterAlt(localctx, 37)
                self.state = 7940
                self.match(PlSqlParser.GRANT)
                self.state = 7941
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 38:
                self.enterOuterAlt(localctx, 38)
                self.state = 7942
                self.match(PlSqlParser.GRANT)
                self.state = 7943
                self.match(PlSqlParser.TYPE)
                pass

            elif la_ == 39:
                self.enterOuterAlt(localctx, 39)
                self.state = 7944
                self.match(PlSqlParser.INSERT)
                self.state = 7945
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 40:
                self.enterOuterAlt(localctx, 40)
                self.state = 7946
                self.match(PlSqlParser.LOCK)
                self.state = 7947
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 41:
                self.enterOuterAlt(localctx, 41)
                self.state = 7948
                self.match(PlSqlParser.SELECT)
                self.state = 7949
                self.match(PlSqlParser.SEQUENCE)
                pass

            elif la_ == 42:
                self.enterOuterAlt(localctx, 42)
                self.state = 7950
                self.match(PlSqlParser.SELECT)
                self.state = 7951
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 43:
                self.enterOuterAlt(localctx, 43)
                self.state = 7952
                self.match(PlSqlParser.UPDATE)
                self.state = 7953
                self.match(PlSqlParser.TABLE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_indexContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_index

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_index" ):
                listener.enterDrop_index(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_index" ):
                listener.exitDrop_index(self)




    def drop_index(self):

        localctx = PlSqlParser.Drop_indexContext(self, self._ctx, self.state)
        self.enterRule(localctx, 754, self.RULE_drop_index)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7956
            self.match(PlSqlParser.DROP)
            self.state = 7957
            self.match(PlSqlParser.INDEX)
            self.state = 7958
            self.index_name()
            self.state = 7961
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 7959
                self.match(PlSqlParser.IF)
                self.state = 7960
                self.match(PlSqlParser.EXISTS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Disassociate_statisticsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tb = None # Id_expressionContext
            self.c = None # Id_expressionContext
            self.fn = None # Id_expressionContext
            self.pkg = None # Id_expressionContext
            self.t = None # Id_expressionContext
            self.ix = None # Id_expressionContext
            self.it = None # Id_expressionContext

        def DISASSOCIATE(self):
            return self.getToken(PlSqlParser.DISASSOCIATE, 0)

        def STATISTICS(self):
            return self.getToken(PlSqlParser.STATISTICS, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def FUNCTIONS(self):
            return self.getToken(PlSqlParser.FUNCTIONS, 0)

        def PACKAGES(self):
            return self.getToken(PlSqlParser.PACKAGES, 0)

        def TYPES(self):
            return self.getToken(PlSqlParser.TYPES, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def INDEXTYPES(self):
            return self.getToken(PlSqlParser.INDEXTYPES, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def schema_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Schema_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_disassociate_statistics

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDisassociate_statistics" ):
                listener.enterDisassociate_statistics(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDisassociate_statistics" ):
                listener.exitDisassociate_statistics(self)




    def disassociate_statistics(self):

        localctx = PlSqlParser.Disassociate_statisticsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 756, self.RULE_disassociate_statistics)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 7963
            self.match(PlSqlParser.DISASSOCIATE)
            self.state = 7964
            self.match(PlSqlParser.STATISTICS)
            self.state = 7965
            self.match(PlSqlParser.FROM)
            self.state = 8085
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [227]:
                self.state = 7966
                self.match(PlSqlParser.COLUMNS)
                self.state = 7970
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,832,self._ctx)
                if la_ == 1:
                    self.state = 7967
                    self.schema_name()
                    self.state = 7968
                    self.match(PlSqlParser.PERIOD)


                self.state = 7972
                localctx.tb = self.id_expression()
                self.state = 7973
                self.match(PlSqlParser.PERIOD)
                self.state = 7974
                localctx.c = self.id_expression()
                self.state = 7987
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7975
                    self.match(PlSqlParser.COMMA)
                    self.state = 7979
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,833,self._ctx)
                    if la_ == 1:
                        self.state = 7976
                        self.schema_name()
                        self.state = 7977
                        self.match(PlSqlParser.PERIOD)


                    self.state = 7981
                    localctx.tb = self.id_expression()
                    self.state = 7982
                    self.match(PlSqlParser.PERIOD)
                    self.state = 7983
                    localctx.c = self.id_expression()
                    self.state = 7989
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [593]:
                self.state = 7990
                self.match(PlSqlParser.FUNCTIONS)
                self.state = 7994
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,835,self._ctx)
                if la_ == 1:
                    self.state = 7991
                    self.schema_name()
                    self.state = 7992
                    self.match(PlSqlParser.PERIOD)


                self.state = 7996
                localctx.fn = self.id_expression()
                self.state = 8006
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 7997
                    self.match(PlSqlParser.COMMA)
                    self.state = 8001
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,836,self._ctx)
                    if la_ == 1:
                        self.state = 7998
                        self.schema_name()
                        self.state = 7999
                        self.match(PlSqlParser.PERIOD)


                    self.state = 8003
                    localctx.fn = self.id_expression()
                    self.state = 8008
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1258]:
                self.state = 8009
                self.match(PlSqlParser.PACKAGES)
                self.state = 8013
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,838,self._ctx)
                if la_ == 1:
                    self.state = 8010
                    self.schema_name()
                    self.state = 8011
                    self.match(PlSqlParser.PERIOD)


                self.state = 8015
                localctx.pkg = self.id_expression()
                self.state = 8025
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8016
                    self.match(PlSqlParser.COMMA)
                    self.state = 8020
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,839,self._ctx)
                    if la_ == 1:
                        self.state = 8017
                        self.schema_name()
                        self.state = 8018
                        self.match(PlSqlParser.PERIOD)


                    self.state = 8022
                    localctx.pkg = self.id_expression()
                    self.state = 8027
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2075]:
                self.state = 8028
                self.match(PlSqlParser.TYPES)
                self.state = 8032
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,841,self._ctx)
                if la_ == 1:
                    self.state = 8029
                    self.schema_name()
                    self.state = 8030
                    self.match(PlSqlParser.PERIOD)


                self.state = 8034
                localctx.t = self.id_expression()
                self.state = 8044
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8035
                    self.match(PlSqlParser.COMMA)
                    self.state = 8039
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,842,self._ctx)
                    if la_ == 1:
                        self.state = 8036
                        self.schema_name()
                        self.state = 8037
                        self.match(PlSqlParser.PERIOD)


                    self.state = 8041
                    localctx.t = self.id_expression()
                    self.state = 8046
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [672]:
                self.state = 8047
                self.match(PlSqlParser.INDEXES)
                self.state = 8051
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,844,self._ctx)
                if la_ == 1:
                    self.state = 8048
                    self.schema_name()
                    self.state = 8049
                    self.match(PlSqlParser.PERIOD)


                self.state = 8053
                localctx.ix = self.id_expression()
                self.state = 8063
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8054
                    self.match(PlSqlParser.COMMA)
                    self.state = 8058
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,845,self._ctx)
                    if la_ == 1:
                        self.state = 8055
                        self.schema_name()
                        self.state = 8056
                        self.match(PlSqlParser.PERIOD)


                    self.state = 8060
                    localctx.ix = self.id_expression()
                    self.state = 8065
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [690]:
                self.state = 8066
                self.match(PlSqlParser.INDEXTYPES)
                self.state = 8070
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,847,self._ctx)
                if la_ == 1:
                    self.state = 8067
                    self.schema_name()
                    self.state = 8068
                    self.match(PlSqlParser.PERIOD)


                self.state = 8072
                localctx.it = self.id_expression()
                self.state = 8082
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8073
                    self.match(PlSqlParser.COMMA)
                    self.state = 8077
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,848,self._ctx)
                    if la_ == 1:
                        self.state = 8074
                        self.schema_name()
                        self.state = 8075
                        self.match(PlSqlParser.PERIOD)


                    self.state = 8079
                    localctx.it = self.id_expression()
                    self.state = 8084
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

            self.state = 8088
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 8087
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_indextypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.it = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def INDEXTYPE(self):
            return self.getToken(PlSqlParser.INDEXTYPE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_indextype

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_indextype" ):
                listener.enterDrop_indextype(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_indextype" ):
                listener.exitDrop_indextype(self)




    def drop_indextype(self):

        localctx = PlSqlParser.Drop_indextypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 758, self.RULE_drop_indextype)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8090
            self.match(PlSqlParser.DROP)
            self.state = 8091
            self.match(PlSqlParser.INDEXTYPE)
            self.state = 8095
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,852,self._ctx)
            if la_ == 1:
                self.state = 8092
                self.schema_name()
                self.state = 8093
                self.match(PlSqlParser.PERIOD)


            self.state = 8097
            localctx.it = self.id_expression()
            self.state = 8099
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 8098
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_inmemory_join_groupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.jg = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_inmemory_join_group

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_inmemory_join_group" ):
                listener.enterDrop_inmemory_join_group(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_inmemory_join_group" ):
                listener.exitDrop_inmemory_join_group(self)




    def drop_inmemory_join_group(self):

        localctx = PlSqlParser.Drop_inmemory_join_groupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 760, self.RULE_drop_inmemory_join_group)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8101
            self.match(PlSqlParser.DROP)
            self.state = 8102
            self.match(PlSqlParser.INMEMORY)
            self.state = 8103
            self.match(PlSqlParser.JOIN)
            self.state = 8104
            self.match(PlSqlParser.GROUP)
            self.state = 8108
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,854,self._ctx)
            if la_ == 1:
                self.state = 8105
                self.schema_name()
                self.state = 8106
                self.match(PlSqlParser.PERIOD)


            self.state = 8110
            localctx.jg = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Flashback_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tableview_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,i)


        def TO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TO)
            else:
                return self.getToken(PlSqlParser.TO, i)

        def BEFORE(self):
            return self.getToken(PlSqlParser.BEFORE, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RESTORE(self):
            return self.getToken(PlSqlParser.RESTORE, 0)

        def POINT(self):
            return self.getToken(PlSqlParser.POINT, 0)

        def restore_point(self):
            return self.getTypedRuleContext(PlSqlParser.Restore_pointContext,0)


        def SCN(self):
            return self.getToken(PlSqlParser.SCN, 0)

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def TRIGGERS(self):
            return self.getToken(PlSqlParser.TRIGGERS, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_flashback_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlashback_table" ):
                listener.enterFlashback_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlashback_table" ):
                listener.exitFlashback_table(self)




    def flashback_table(self):

        localctx = PlSqlParser.Flashback_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 762, self.RULE_flashback_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8112
            self.match(PlSqlParser.FLASHBACK)
            self.state = 8113
            self.match(PlSqlParser.TABLE)
            self.state = 8114
            self.tableview_name()
            self.state = 8119
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 8115
                self.match(PlSqlParser.COMMA)
                self.state = 8116
                self.tableview_name()
                self.state = 8121
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 8122
            self.match(PlSqlParser.TO)
            self.state = 8141
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1496, 1549, 2020]:
                self.state = 8128
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1549, 2020]:
                    self.state = 8123
                    _la = self._input.LA(1)
                    if not(_la==1549 or _la==2020):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 8124
                    self.expression()
                    pass
                elif token in [1496]:
                    self.state = 8125
                    self.match(PlSqlParser.RESTORE)
                    self.state = 8126
                    self.match(PlSqlParser.POINT)
                    self.state = 8127
                    self.restore_point()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 8132
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==404 or _la==467:
                    self.state = 8130
                    _la = self._input.LA(1)
                    if not(_la==404 or _la==467):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 8131
                    self.match(PlSqlParser.TRIGGERS)


                pass
            elif token in [109]:
                self.state = 8134
                self.match(PlSqlParser.BEFORE)
                self.state = 8135
                self.match(PlSqlParser.DROP)
                self.state = 8139
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1481:
                    self.state = 8136
                    self.match(PlSqlParser.RENAME)
                    self.state = 8137
                    self.match(PlSqlParser.TO)
                    self.state = 8138
                    self.tableview_name()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Restore_pointContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_restore_point

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRestore_point" ):
                listener.enterRestore_point(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRestore_point" ):
                listener.exitRestore_point(self)




    def restore_point(self):

        localctx = PlSqlParser.Restore_pointContext(self, self._ctx, self.state)
        self.enterRule(localctx, 764, self.RULE_restore_point)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8143
            self.identifier()
            self.state = 8148
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 8144
                self.match(PlSqlParser.PERIOD)
                self.state = 8145
                self.id_expression()
                self.state = 8150
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Purge_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ts = None # Id_expressionContext
            self.u = None # Id_expressionContext

        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def RECYCLEBIN(self):
            return self.getToken(PlSqlParser.RECYCLEBIN, 0)

        def DBA_RECYCLEBIN(self):
            return self.getToken(PlSqlParser.DBA_RECYCLEBIN, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_purge_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPurge_statement" ):
                listener.enterPurge_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPurge_statement" ):
                listener.exitPurge_statement(self)




    def purge_statement(self):

        localctx = PlSqlParser.Purge_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 766, self.RULE_purge_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8151
            self.match(PlSqlParser.PURGE)
            self.state = 8165
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [675, 1999]:
                self.state = 8152
                _la = self._input.LA(1)
                if not(_la==675 or _la==1999):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 8153
                self.id_expression()
                pass
            elif token in [1996]:
                self.state = 8154
                self.match(PlSqlParser.TABLESPACE)
                self.state = 8156
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,861,self._ctx)
                if la_ == 1:
                    self.state = 8155
                    self.match(PlSqlParser.SET)


                self.state = 8158
                localctx.ts = self.id_expression()
                self.state = 8161
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2144:
                    self.state = 8159
                    self.match(PlSqlParser.USER)
                    self.state = 8160
                    localctx.u = self.id_expression()


                pass
            elif token in [1440]:
                self.state = 8163
                self.match(PlSqlParser.RECYCLEBIN)
                pass
            elif token in [349]:
                self.state = 8164
                self.match(PlSqlParser.DBA_RECYCLEBIN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Noaudit_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NOAUDIT(self):
            return self.getToken(PlSqlParser.NOAUDIT, 0)

        def audit_operation_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_operation_clauseContext,0)


        def audit_schema_object_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Audit_schema_object_clauseContext,0)


        def NETWORK(self):
            return self.getToken(PlSqlParser.NETWORK, 0)

        def DIRECT_PATH(self):
            return self.getToken(PlSqlParser.DIRECT_PATH, 0)

        def LOAD(self):
            return self.getToken(PlSqlParser.LOAD, 0)

        def WHENEVER(self):
            return self.getToken(PlSqlParser.WHENEVER, 0)

        def SUCCESSFUL(self):
            return self.getToken(PlSqlParser.SUCCESSFUL, 0)

        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def auditing_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Auditing_by_clauseContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_noaudit_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNoaudit_statement" ):
                listener.enterNoaudit_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNoaudit_statement" ):
                listener.exitNoaudit_statement(self)




    def noaudit_statement(self):

        localctx = PlSqlParser.Noaudit_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 768, self.RULE_noaudit_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8167
            self.match(PlSqlParser.NOAUDIT)
            self.state = 8179
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,866,self._ctx)
            if la_ == 1:
                self.state = 8168
                self.audit_operation_clause()
                self.state = 8170
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==154:
                    self.state = 8169
                    self.auditing_by_clause()


                pass

            elif la_ == 2:
                self.state = 8172
                self.audit_schema_object_clause()
                pass

            elif la_ == 3:
                self.state = 8173
                self.match(PlSqlParser.NETWORK)
                pass

            elif la_ == 4:
                self.state = 8174
                self.match(PlSqlParser.DIRECT_PATH)
                self.state = 8175
                self.match(PlSqlParser.LOAD)
                self.state = 8177
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==154:
                    self.state = 8176
                    self.auditing_by_clause()


                pass


            self.state = 8186
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2203:
                self.state = 8181
                self.match(PlSqlParser.WHENEVER)
                self.state = 8183
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1138:
                    self.state = 8182
                    self.match(PlSqlParser.NOT)


                self.state = 8185
                self.match(PlSqlParser.SUCCESSFUL)


            self.state = 8189
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 8188
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rename_objectContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def object_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_nameContext,i)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_rename_object

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRename_object" ):
                listener.enterRename_object(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRename_object" ):
                listener.exitRename_object(self)




    def rename_object(self):

        localctx = PlSqlParser.Rename_objectContext(self, self._ctx, self.state)
        self.enterRule(localctx, 770, self.RULE_rename_object)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8191
            self.match(PlSqlParser.RENAME)
            self.state = 8192
            self.object_name()
            self.state = 8193
            self.match(PlSqlParser.TO)
            self.state = 8194
            self.object_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Grant_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GRANT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GRANT)
            else:
                return self.getToken(PlSqlParser.GRANT, i)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def grantee_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Grantee_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Grantee_nameContext,i)


        def PUBLIC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PUBLIC)
            else:
                return self.getToken(PlSqlParser.PUBLIC, i)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def grant_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Grant_object_nameContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def OPTION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OPTION)
            else:
                return self.getToken(PlSqlParser.OPTION, i)

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def ADMIN(self):
            return self.getToken(PlSqlParser.ADMIN, 0)

        def DELEGATE(self):
            return self.getToken(PlSqlParser.DELEGATE, 0)

        def role_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Role_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Role_nameContext,i)


        def system_privilege(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.System_privilegeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.System_privilegeContext,i)


        def object_privilege(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_privilegeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_privilegeContext,i)


        def paren_column_list(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Paren_column_listContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_grant_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrant_statement" ):
                listener.enterGrant_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrant_statement" ):
                listener.exitGrant_statement(self)




    def grant_statement(self):

        localctx = PlSqlParser.Grant_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 772, self.RULE_grant_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8196
            self.match(PlSqlParser.GRANT)
            self.state = 8208 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 8198
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 8197
                        self.match(PlSqlParser.COMMA)


                    self.state = 8206
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,872,self._ctx)
                    if la_ == 1:
                        self.state = 8200
                        self.role_name()
                        pass

                    elif la_ == 2:
                        self.state = 8201
                        self.system_privilege()
                        pass

                    elif la_ == 3:
                        self.state = 8202
                        self.object_privilege()
                        self.state = 8204
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==2347:
                            self.state = 8203
                            self.paren_column_list()


                        pass



                else:
                    raise NoViableAltException(self)
                self.state = 8210 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,873,self._ctx)

            self.state = 8214
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1193:
                self.state = 8212
                self.match(PlSqlParser.ON)
                self.state = 8213
                self.grant_object_name()


            self.state = 8216
            self.match(PlSqlParser.TO)
            self.state = 8219
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,875,self._ctx)
            if la_ == 1:
                self.state = 8217
                self.grantee_name()
                pass

            elif la_ == 2:
                self.state = 8218
                self.match(PlSqlParser.PUBLIC)
                pass


            self.state = 8228
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 8221
                self.match(PlSqlParser.COMMA)
                self.state = 8224
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,876,self._ctx)
                if la_ == 1:
                    self.state = 8222
                    self.grantee_name()
                    pass

                elif la_ == 2:
                    self.state = 8223
                    self.match(PlSqlParser.PUBLIC)
                    pass


                self.state = 8230
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 8234
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,878,self._ctx)
            if la_ == 1:
                self.state = 8231
                self.match(PlSqlParser.WITH)
                self.state = 8232
                _la = self._input.LA(1)
                if not(_la==26 or _la==379):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 8233
                self.match(PlSqlParser.OPTION)


            self.state = 8239
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,879,self._ctx)
            if la_ == 1:
                self.state = 8236
                self.match(PlSqlParser.WITH)
                self.state = 8237
                self.match(PlSqlParser.HIERARCHY)
                self.state = 8238
                self.match(PlSqlParser.OPTION)


            self.state = 8244
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 8241
                self.match(PlSqlParser.WITH)
                self.state = 8242
                self.match(PlSqlParser.GRANT)
                self.state = 8243
                self.match(PlSqlParser.OPTION)


            self.state = 8247
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 8246
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Container_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONTAINER(self):
            return self.getToken(PlSqlParser.CONTAINER, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_container_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterContainer_clause" ):
                listener.enterContainer_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitContainer_clause" ):
                listener.exitContainer_clause(self)




    def container_clause(self):

        localctx = PlSqlParser.Container_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 774, self.RULE_container_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8249
            self.match(PlSqlParser.CONTAINER)
            self.state = 8250
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 8251
            _la = self._input.LA(1)
            if not(_la==38 or _la==319):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Revoke_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REVOKE(self):
            return self.getToken(PlSqlParser.REVOKE, 0)

        def revoke_roles_from_programs(self):
            return self.getTypedRuleContext(PlSqlParser.Revoke_roles_from_programsContext,0)


        def revoke_system_privilege(self):
            return self.getTypedRuleContext(PlSqlParser.Revoke_system_privilegeContext,0)


        def revoke_object_privileges(self):
            return self.getTypedRuleContext(PlSqlParser.Revoke_object_privilegesContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_revoke_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRevoke_statement" ):
                listener.enterRevoke_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRevoke_statement" ):
                listener.exitRevoke_statement(self)




    def revoke_statement(self):

        localctx = PlSqlParser.Revoke_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 776, self.RULE_revoke_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8253
            self.match(PlSqlParser.REVOKE)
            self.state = 8262
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,884,self._ctx)
            if la_ == 1:
                self.state = 8256
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,882,self._ctx)
                if la_ == 1:
                    self.state = 8254
                    self.revoke_system_privilege()
                    pass

                elif la_ == 2:
                    self.state = 8255
                    self.revoke_object_privileges()
                    pass


                self.state = 8259
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==274:
                    self.state = 8258
                    self.container_clause()


                pass

            elif la_ == 2:
                self.state = 8261
                self.revoke_roles_from_programs()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Revoke_system_privilegeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def revokee_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Revokee_clauseContext,0)


        def system_privilege(self):
            return self.getTypedRuleContext(PlSqlParser.System_privilegeContext,0)


        def role_name(self):
            return self.getTypedRuleContext(PlSqlParser.Role_nameContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def PRIVILEGES(self):
            return self.getToken(PlSqlParser.PRIVILEGES, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_revoke_system_privilege

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRevoke_system_privilege" ):
                listener.enterRevoke_system_privilege(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRevoke_system_privilege" ):
                listener.exitRevoke_system_privilege(self)




    def revoke_system_privilege(self):

        localctx = PlSqlParser.Revoke_system_privilegeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 778, self.RULE_revoke_system_privilege)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8268
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,885,self._ctx)
            if la_ == 1:
                self.state = 8264
                self.system_privilege()
                pass

            elif la_ == 2:
                self.state = 8265
                self.role_name()
                pass

            elif la_ == 3:
                self.state = 8266
                self.match(PlSqlParser.ALL)
                self.state = 8267
                self.match(PlSqlParser.PRIVILEGES)
                pass


            self.state = 8270
            self.match(PlSqlParser.FROM)
            self.state = 8271
            self.revokee_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Revokee_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PUBLIC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PUBLIC)
            else:
                return self.getToken(PlSqlParser.PUBLIC, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_revokee_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRevokee_clause" ):
                listener.enterRevokee_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRevokee_clause" ):
                listener.exitRevokee_clause(self)




    def revokee_clause(self):

        localctx = PlSqlParser.Revokee_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 780, self.RULE_revokee_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8275
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,886,self._ctx)
            if la_ == 1:
                self.state = 8273
                self.id_expression()
                pass

            elif la_ == 2:
                self.state = 8274
                self.match(PlSqlParser.PUBLIC)
                pass


            self.state = 8284
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 8277
                self.match(PlSqlParser.COMMA)
                self.state = 8280
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,887,self._ctx)
                if la_ == 1:
                    self.state = 8278
                    self.id_expression()
                    pass

                elif la_ == 2:
                    self.state = 8279
                    self.match(PlSqlParser.PUBLIC)
                    pass


                self.state = 8286
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Revoke_object_privilegesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def on_object_clause(self):
            return self.getTypedRuleContext(PlSqlParser.On_object_clauseContext,0)


        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def revokee_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Revokee_clauseContext,0)


        def object_privilege(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_privilegeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_privilegeContext,i)


        def ALL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ALL)
            else:
                return self.getToken(PlSqlParser.ALL, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def CONSTRAINTS(self):
            return self.getToken(PlSqlParser.CONSTRAINTS, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def PRIVILEGES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIVILEGES)
            else:
                return self.getToken(PlSqlParser.PRIVILEGES, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_revoke_object_privileges

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRevoke_object_privileges" ):
                listener.enterRevoke_object_privileges(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRevoke_object_privileges" ):
                listener.exitRevoke_object_privileges(self)




    def revoke_object_privileges(self):

        localctx = PlSqlParser.Revoke_object_privilegesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 782, self.RULE_revoke_object_privileges)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8292
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,890,self._ctx)
            if la_ == 1:
                self.state = 8287
                self.object_privilege()
                pass

            elif la_ == 2:
                self.state = 8288
                self.match(PlSqlParser.ALL)
                self.state = 8290
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1384:
                    self.state = 8289
                    self.match(PlSqlParser.PRIVILEGES)


                pass


            self.state = 8304
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 8294
                self.match(PlSqlParser.COMMA)
                self.state = 8300
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,892,self._ctx)
                if la_ == 1:
                    self.state = 8295
                    self.object_privilege()
                    pass

                elif la_ == 2:
                    self.state = 8296
                    self.match(PlSqlParser.ALL)
                    self.state = 8298
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1384:
                        self.state = 8297
                        self.match(PlSqlParser.PRIVILEGES)


                    pass


                self.state = 8306
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 8307
            self.on_object_clause()
            self.state = 8308
            self.match(PlSqlParser.FROM)
            self.state = 8309
            self.revokee_clause()
            self.state = 8313
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [171]:
                self.state = 8310
                self.match(PlSqlParser.CASCADE)
                self.state = 8311
                self.match(PlSqlParser.CONSTRAINTS)
                pass
            elif token in [576]:
                self.state = 8312
                self.match(PlSqlParser.FORCE)
                pass
            elif token in [-1, 274, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_object_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.o = None # Id_expressionContext
            self.mmn = None # Id_expressionContext
            self.o2 = None # Id_expressionContext
            self.p = None # Id_expressionContext

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def directory_name(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_nameContext,0)


        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def edition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Edition_nameContext,0)


        def MINING(self):
            return self.getToken(PlSqlParser.MINING, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def TRANSLATION(self):
            return self.getToken(PlSqlParser.TRANSLATION, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def SOURCE(self):
            return self.getToken(PlSqlParser.SOURCE, 0)

        def RESOURCE(self):
            return self.getToken(PlSqlParser.RESOURCE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_on_object_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_object_clause" ):
                listener.enterOn_object_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_object_clause" ):
                listener.exitOn_object_clause(self)




    def on_object_clause(self):

        localctx = PlSqlParser.On_object_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 784, self.RULE_on_object_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8315
            self.match(PlSqlParser.ON)
            self.state = 8360
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,900,self._ctx)
            if la_ == 1:
                self.state = 8319
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,895,self._ctx)
                if la_ == 1:
                    self.state = 8316
                    self.schema_name()
                    self.state = 8317
                    self.match(PlSqlParser.PERIOD)


                self.state = 8321
                localctx.o = self.id_expression()
                pass

            elif la_ == 2:
                self.state = 8322
                self.match(PlSqlParser.USER)
                self.state = 8323
                self.id_expression()
                self.state = 8328
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8324
                    self.match(PlSqlParser.COMMA)
                    self.state = 8325
                    self.id_expression()
                    self.state = 8330
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                self.state = 8331
                self.match(PlSqlParser.DIRECTORY)
                self.state = 8332
                self.directory_name()
                pass

            elif la_ == 4:
                self.state = 8333
                self.match(PlSqlParser.EDITION)
                self.state = 8334
                self.edition_name()
                pass

            elif la_ == 5:
                self.state = 8335
                self.match(PlSqlParser.MINING)
                self.state = 8336
                self.match(PlSqlParser.MODEL)
                self.state = 8340
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,897,self._ctx)
                if la_ == 1:
                    self.state = 8337
                    self.schema_name()
                    self.state = 8338
                    self.match(PlSqlParser.PERIOD)


                self.state = 8342
                localctx.mmn = self.id_expression()
                pass

            elif la_ == 6:
                self.state = 8343
                self.match(PlSqlParser.JAVA)
                self.state = 8344
                _la = self._input.LA(1)
                if not(_la==1492 or _la==1630):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 8348
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,898,self._ctx)
                if la_ == 1:
                    self.state = 8345
                    self.schema_name()
                    self.state = 8346
                    self.match(PlSqlParser.PERIOD)


                self.state = 8350
                localctx.o2 = self.id_expression()
                pass

            elif la_ == 7:
                self.state = 8351
                self.match(PlSqlParser.SQL)
                self.state = 8352
                self.match(PlSqlParser.TRANSLATION)
                self.state = 8353
                self.match(PlSqlParser.PROFILE)
                self.state = 8357
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,899,self._ctx)
                if la_ == 1:
                    self.state = 8354
                    self.schema_name()
                    self.state = 8355
                    self.match(PlSqlParser.PERIOD)


                self.state = 8359
                localctx.p = self.id_expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Revoke_roles_from_programsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def program_unit(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Program_unitContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Program_unitContext,i)


        def role_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Role_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Role_nameContext,i)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_revoke_roles_from_programs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRevoke_roles_from_programs" ):
                listener.enterRevoke_roles_from_programs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRevoke_roles_from_programs" ):
                listener.exitRevoke_roles_from_programs(self)




    def revoke_roles_from_programs(self):

        localctx = PlSqlParser.Revoke_roles_from_programsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 786, self.RULE_revoke_roles_from_programs)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8371
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 8362
                self.role_name()
                self.state = 8367
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8363
                    self.match(PlSqlParser.COMMA)
                    self.state = 8364
                    self.role_name()
                    self.state = 8369
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [38]:
                self.state = 8370
                self.match(PlSqlParser.ALL)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 8373
            self.match(PlSqlParser.FROM)
            self.state = 8374
            self.program_unit()
            self.state = 8379
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 8375
                self.match(PlSqlParser.COMMA)
                self.state = 8376
                self.program_unit()
                self.state = 8381
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Program_unitContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def PACKAGE(self):
            return self.getToken(PlSqlParser.PACKAGE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_program_unit

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProgram_unit" ):
                listener.enterProgram_unit(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProgram_unit" ):
                listener.exitProgram_unit(self)




    def program_unit(self):

        localctx = PlSqlParser.Program_unitContext(self, self._ctx, self.state)
        self.enterRule(localctx, 788, self.RULE_program_unit)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8382
            _la = self._input.LA(1)
            if not(_la==592 or _la==1257 or _la==1386):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 8386
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,904,self._ctx)
            if la_ == 1:
                self.state = 8383
                self.schema_name()
                self.state = 8384
                self.match(PlSqlParser.PERIOD)


            self.state = 8388
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_dimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def level_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Level_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Level_clauseContext,i)


        def hierarchy_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Hierarchy_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Hierarchy_clauseContext,i)


        def attribute_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Attribute_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Attribute_clauseContext,i)


        def extended_attribute_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Extended_attribute_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Extended_attribute_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_dimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_dimension" ):
                listener.enterCreate_dimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_dimension" ):
                listener.exitCreate_dimension(self)




    def create_dimension(self):

        localctx = PlSqlParser.Create_dimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 790, self.RULE_create_dimension)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8390
            self.match(PlSqlParser.CREATE)
            self.state = 8391
            self.match(PlSqlParser.DIMENSION)
            self.state = 8392
            self.identifier()
            self.state = 8394 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8393
                self.level_clause()
                self.state = 8396 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==798):
                    break

            self.state = 8401 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8401
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,906,self._ctx)
                if la_ == 1:
                    self.state = 8398
                    self.hierarchy_clause()
                    pass

                elif la_ == 2:
                    self.state = 8399
                    self.attribute_clause()
                    pass

                elif la_ == 3:
                    self.state = 8400
                    self.extended_attribute_clause()
                    pass


                self.state = 8403 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==81 or _la==633):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_directoryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def directory_name(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_nameContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def directory_path(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_pathContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_directory

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_directory" ):
                listener.enterCreate_directory(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_directory" ):
                listener.exitCreate_directory(self)




    def create_directory(self):

        localctx = PlSqlParser.Create_directoryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 792, self.RULE_create_directory)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8405
            self.match(PlSqlParser.CREATE)
            self.state = 8408
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 8406
                self.match(PlSqlParser.OR)
                self.state = 8407
                self.match(PlSqlParser.REPLACE)


            self.state = 8410
            self.match(PlSqlParser.DIRECTORY)
            self.state = 8411
            self.directory_name()
            self.state = 8415
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 8412
                self.match(PlSqlParser.SHARING)
                self.state = 8413
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 8414
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 8417
            self.match(PlSqlParser.AS)
            self.state = 8418
            self.directory_path()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Directory_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_directory_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDirectory_name" ):
                listener.enterDirectory_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDirectory_name" ):
                listener.exitDirectory_name(self)




    def directory_name(self):

        localctx = PlSqlParser.Directory_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 794, self.RULE_directory_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8420
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Directory_pathContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_directory_path

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDirectory_path" ):
                listener.enterDirectory_path(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDirectory_path" ):
                listener.exitDirectory_path(self)




    def directory_path(self):

        localctx = PlSqlParser.Directory_pathContext(self, self._ctx, self.state)
        self.enterRule(localctx, 796, self.RULE_directory_path)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8422
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_inmemory_join_groupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.jg = None # Id_expressionContext
            self.t = None # Id_expressionContext
            self.c = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def schema_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Schema_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_inmemory_join_group

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_inmemory_join_group" ):
                listener.enterCreate_inmemory_join_group(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_inmemory_join_group" ):
                listener.exitCreate_inmemory_join_group(self)




    def create_inmemory_join_group(self):

        localctx = PlSqlParser.Create_inmemory_join_groupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 798, self.RULE_create_inmemory_join_group)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8424
            self.match(PlSqlParser.CREATE)
            self.state = 8425
            self.match(PlSqlParser.INMEMORY)
            self.state = 8426
            self.match(PlSqlParser.JOIN)
            self.state = 8427
            self.match(PlSqlParser.GROUP)
            self.state = 8431
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,910,self._ctx)
            if la_ == 1:
                self.state = 8428
                self.schema_name()
                self.state = 8429
                self.match(PlSqlParser.PERIOD)


            self.state = 8433
            localctx.jg = self.id_expression()
            self.state = 8434
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 8438
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,911,self._ctx)
            if la_ == 1:
                self.state = 8435
                self.schema_name()
                self.state = 8436
                self.match(PlSqlParser.PERIOD)


            self.state = 8440
            localctx.t = self.id_expression()
            self.state = 8441
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 8442
            localctx.c = self.id_expression()
            self.state = 8443
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 8455 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8444
                self.match(PlSqlParser.COMMA)
                self.state = 8448
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,912,self._ctx)
                if la_ == 1:
                    self.state = 8445
                    self.schema_name()
                    self.state = 8446
                    self.match(PlSqlParser.PERIOD)


                self.state = 8450
                localctx.t = self.id_expression()
                self.state = 8451
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8452
                localctx.c = self.id_expression()
                self.state = 8453
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 8457 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==2353):
                    break

            self.state = 8459
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_hierarchyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.hn = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_hierarchy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_hierarchy" ):
                listener.enterDrop_hierarchy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_hierarchy" ):
                listener.exitDrop_hierarchy(self)




    def drop_hierarchy(self):

        localctx = PlSqlParser.Drop_hierarchyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 800, self.RULE_drop_hierarchy)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8461
            self.match(PlSqlParser.DROP)
            self.state = 8462
            self.match(PlSqlParser.HIERARCHY)
            self.state = 8466
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,914,self._ctx)
            if la_ == 1:
                self.state = 8463
                self.schema_name()
                self.state = 8464
                self.match(PlSqlParser.PERIOD)


            self.state = 8468
            localctx.hn = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_libraryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def library_name(self):
            return self.getTypedRuleContext(PlSqlParser.Library_nameContext,0)


        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def library_editionable(self):
            return self.getTypedRuleContext(PlSqlParser.Library_editionableContext,0)


        def library_debug(self):
            return self.getTypedRuleContext(PlSqlParser.Library_debugContext,0)


        def compiler_parameters_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compiler_parameters_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compiler_parameters_clauseContext,i)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_library

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_library" ):
                listener.enterAlter_library(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_library" ):
                listener.exitAlter_library(self)




    def alter_library(self):

        localctx = PlSqlParser.Alter_libraryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 802, self.RULE_alter_library)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8470
            self.match(PlSqlParser.ALTER)
            self.state = 8471
            self.match(PlSqlParser.LIBRARY)
            self.state = 8472
            self.library_name()
            self.state = 8488
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,918,self._ctx)
            if la_ == 1:
                self.state = 8473
                self.match(PlSqlParser.COMPILE)
                self.state = 8475
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,915,self._ctx)
                if la_ == 1:
                    self.state = 8474
                    self.library_debug()


                self.state = 8480
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,916,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 8477
                        self.compiler_parameters_clause() 
                    self.state = 8482
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,916,self._ctx)

                self.state = 8485
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 8483
                    self.match(PlSqlParser.REUSE)
                    self.state = 8484
                    self.match(PlSqlParser.SETTINGS)


                pass

            elif la_ == 2:
                self.state = 8487
                self.library_editionable()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_javaContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def SOURCE(self):
            return self.getToken(PlSqlParser.SOURCE, 0)

        def CLASS(self):
            return self.getToken(PlSqlParser.CLASS, 0)

        def RESOURCE(self):
            return self.getToken(PlSqlParser.RESOURCE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_java

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_java" ):
                listener.enterDrop_java(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_java" ):
                listener.exitDrop_java(self)




    def drop_java(self):

        localctx = PlSqlParser.Drop_javaContext(self, self._ctx, self.state)
        self.enterRule(localctx, 804, self.RULE_drop_java)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8490
            self.match(PlSqlParser.DROP)
            self.state = 8491
            self.match(PlSqlParser.JAVA)
            self.state = 8492
            _la = self._input.LA(1)
            if not(_la==196 or _la==1492 or _la==1630):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 8496
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,919,self._ctx)
            if la_ == 1:
                self.state = 8493
                self.schema_name()
                self.state = 8494
                self.match(PlSqlParser.PERIOD)


            self.state = 8498
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_libraryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def library_name(self):
            return self.getTypedRuleContext(PlSqlParser.Library_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_library

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_library" ):
                listener.enterDrop_library(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_library" ):
                listener.exitDrop_library(self)




    def drop_library(self):

        localctx = PlSqlParser.Drop_libraryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 806, self.RULE_drop_library)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8500
            self.match(PlSqlParser.DROP)
            self.state = 8501
            self.match(PlSqlParser.LIBRARY)
            self.state = 8502
            self.library_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_javaContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.pn = None # Id_expressionContext
            self.sn = None # Id_expressionContext
            self.d = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def NAMED(self):
            return self.getToken(PlSqlParser.NAMED, 0)

        def CLASS(self):
            return self.getToken(PlSqlParser.CLASS, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def NOFORCE(self):
            return self.getToken(PlSqlParser.NOFORCE, 0)

        def SOURCE(self):
            return self.getToken(PlSqlParser.SOURCE, 0)

        def RESOURCE(self):
            return self.getToken(PlSqlParser.RESOURCE, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def invoker_rights_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Invoker_rights_clauseContext,0)


        def RESOLVER(self):
            return self.getToken(PlSqlParser.RESOLVER, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def RESOLVE(self):
            return self.getToken(PlSqlParser.RESOLVE, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def BFILE(self):
            return self.getToken(PlSqlParser.BFILE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def SCHEMA(self):
            return self.getToken(PlSqlParser.SCHEMA, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def BLOB(self):
            return self.getToken(PlSqlParser.BLOB, 0)

        def MINUS_SIGN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MINUS_SIGN)
            else:
                return self.getToken(PlSqlParser.MINUS_SIGN, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_java

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_java" ):
                listener.enterCreate_java(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_java" ):
                listener.exitCreate_java(self)




    def create_java(self):

        localctx = PlSqlParser.Create_javaContext(self, self._ctx, self.state)
        self.enterRule(localctx, 808, self.RULE_create_java)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8504
            self.match(PlSqlParser.CREATE)
            self.state = 8507
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 8505
                self.match(PlSqlParser.OR)
                self.state = 8506
                self.match(PlSqlParser.REPLACE)


            self.state = 8511
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==49:
                self.state = 8509
                self.match(PlSqlParser.AND)
                self.state = 8510
                _la = self._input.LA(1)
                if not(_la==237 or _la==1490):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 8514
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1044:
                self.state = 8513
                self.match(PlSqlParser.NOFORCE)


            self.state = 8516
            self.match(PlSqlParser.JAVA)
            self.state = 8530
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1492, 1630]:
                self.state = 8517
                _la = self._input.LA(1)
                if not(_la==1492 or _la==1630):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 8518
                self.match(PlSqlParser.NAMED)
                self.state = 8522
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,923,self._ctx)
                if la_ == 1:
                    self.state = 8519
                    self.schema_name()
                    self.state = 8520
                    self.match(PlSqlParser.PERIOD)


                self.state = 8524
                localctx.pn = self.id_expression()
                pass
            elif token in [196]:
                self.state = 8525
                self.match(PlSqlParser.CLASS)
                self.state = 8528
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1547:
                    self.state = 8526
                    self.match(PlSqlParser.SCHEMA)
                    self.state = 8527
                    self.id_expression()


                pass
            else:
                raise NoViableAltException(self)

            self.state = 8535
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 8532
                self.match(PlSqlParser.SHARING)
                self.state = 8533
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 8534
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 8538
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==86:
                self.state = 8537
                self.invoker_rights_clause()


            self.state = 8557
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1491:
                self.state = 8540
                self.match(PlSqlParser.RESOLVER)
                self.state = 8541
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8552 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 8542
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 8543
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 8545
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 8544
                        self.match(PlSqlParser.COMMA)


                    self.state = 8549
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                        self.state = 8547
                        localctx.sn = self.id_expression()
                        pass
                    elif token in [2352]:
                        self.state = 8548
                        self.match(PlSqlParser.MINUS_SIGN)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 8551
                    self.match(PlSqlParser.RIGHT_PAREN)
                    self.state = 8554 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==2347):
                        break

                self.state = 8556
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 8574
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2153]:
                self.state = 8559
                self.match(PlSqlParser.USING)
                self.state = 8570
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,932,self._ctx)
                if la_ == 1:
                    self.state = 8560
                    self.match(PlSqlParser.BFILE)
                    self.state = 8561
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 8562
                    localctx.d = self.id_expression()
                    self.state = 8563
                    self.match(PlSqlParser.COMMA)
                    self.state = 8564
                    self.filename()
                    self.state = 8565
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass

                elif la_ == 2:
                    self.state = 8567
                    _la = self._input.LA(1)
                    if not(_la==116 or _la==136 or _la==205):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 8568
                    self.subquery()
                    pass

                elif la_ == 3:
                    self.state = 8569
                    self.match(PlSqlParser.CHAR_STRING)
                    pass


                pass
            elif token in [67]:
                self.state = 8572
                self.match(PlSqlParser.AS)
                self.state = 8573
                self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_libraryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def plsql_library_source(self):
            return self.getTypedRuleContext(PlSqlParser.Plsql_library_sourceContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_library

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_library" ):
                listener.enterCreate_library(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_library" ):
                listener.exitCreate_library(self)




    def create_library(self):

        localctx = PlSqlParser.Create_libraryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 810, self.RULE_create_library)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8576
            self.match(PlSqlParser.CREATE)
            self.state = 8579
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 8577
                self.match(PlSqlParser.OR)
                self.state = 8578
                self.match(PlSqlParser.REPLACE)


            self.state = 8582
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==451 or _la==1070:
                self.state = 8581
                _la = self._input.LA(1)
                if not(_la==451 or _la==1070):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 8584
            self.match(PlSqlParser.LIBRARY)
            self.state = 8585
            self.plsql_library_source()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Plsql_library_sourceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def library_name(self):
            return self.getTypedRuleContext(PlSqlParser.Library_nameContext,0)


        def quoted_string(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quoted_stringContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,i)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def directory_name(self):
            return self.getTypedRuleContext(PlSqlParser.Directory_nameContext,0)


        def AGENT(self):
            return self.getToken(PlSqlParser.AGENT, 0)

        def CREDENTIAL(self):
            return self.getToken(PlSqlParser.CREDENTIAL, 0)

        def credential_name(self):
            return self.getTypedRuleContext(PlSqlParser.Credential_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_plsql_library_source

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPlsql_library_source" ):
                listener.enterPlsql_library_source(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPlsql_library_source" ):
                listener.exitPlsql_library_source(self)




    def plsql_library_source(self):

        localctx = PlSqlParser.Plsql_library_sourceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 812, self.RULE_plsql_library_source)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8587
            self.library_name()
            self.state = 8588
            _la = self._input.LA(1)
            if not(_la==67 or _la==740):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 8589
            self.quoted_string()
            self.state = 8592
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==696:
                self.state = 8590
                self.match(PlSqlParser.IN)
                self.state = 8591
                self.directory_name()


            self.state = 8596
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==34:
                self.state = 8594
                self.match(PlSqlParser.AGENT)
                self.state = 8595
                self.quoted_string()


            self.state = 8600
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==309:
                self.state = 8598
                self.match(PlSqlParser.CREDENTIAL)
                self.state = 8599
                self.credential_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Credential_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_credential_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCredential_name" ):
                listener.enterCredential_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCredential_name" ):
                listener.exitCredential_name(self)




    def credential_name(self):

        localctx = PlSqlParser.Credential_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 814, self.RULE_credential_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8605
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,939,self._ctx)
            if la_ == 1:
                self.state = 8602
                self.id_expression()
                self.state = 8603
                self.match(PlSqlParser.PERIOD)


            self.state = 8607
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Library_editionableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_library_editionable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLibrary_editionable" ):
                listener.enterLibrary_editionable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLibrary_editionable" ):
                listener.exitLibrary_editionable(self)




    def library_editionable(self):

        localctx = PlSqlParser.Library_editionableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 816, self.RULE_library_editionable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8609
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")
            self.state = 8610
            _la = self._input.LA(1)
            if not(_la==451 or _la==1070):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Library_debugContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_library_debug

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLibrary_debug" ):
                listener.enterLibrary_debug(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLibrary_debug" ):
                listener.exitLibrary_debug(self)




    def library_debug(self):

        localctx = PlSqlParser.Library_debugContext(self, self._ctx, self.state)
        self.enterRule(localctx, 818, self.RULE_library_debug)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8612
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")
            self.state = 8613
            self.match(PlSqlParser.DEBUG)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Compiler_parameters_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def parameter_name(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,0)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def parameter_value(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_valueContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_compiler_parameters_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompiler_parameters_clause" ):
                listener.enterCompiler_parameters_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompiler_parameters_clause" ):
                listener.exitCompiler_parameters_clause(self)




    def compiler_parameters_clause(self):

        localctx = PlSqlParser.Compiler_parameters_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 820, self.RULE_compiler_parameters_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8615
            self.parameter_name()
            self.state = 8616
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 8617
            self.parameter_value()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Parameter_valueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_parameter_value

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParameter_value" ):
                listener.enterParameter_value(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParameter_value" ):
                listener.exitParameter_value(self)




    def parameter_value(self):

        localctx = PlSqlParser.Parameter_valueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 822, self.RULE_parameter_value)
        try:
            self.state = 8621
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 8619
                self.regular_id()
                pass
            elif token in [2343]:
                self.enterOuterAlt(localctx, 2)
                self.state = 8620
                self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Library_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Regular_idContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Regular_idContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_library_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLibrary_name" ):
                listener.enterLibrary_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLibrary_name" ):
                listener.exitLibrary_name(self)




    def library_name(self):

        localctx = PlSqlParser.Library_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 824, self.RULE_library_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8626
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,941,self._ctx)
            if la_ == 1:
                self.state = 8623
                self.regular_id()
                self.state = 8624
                self.match(PlSqlParser.PERIOD)


            self.state = 8628
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_dimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def ADD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ADD)
            else:
                return self.getToken(PlSqlParser.ADD, i)

        def DROP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DROP)
            else:
                return self.getToken(PlSqlParser.DROP, i)

        def level_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Level_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Level_clauseContext,i)


        def hierarchy_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Hierarchy_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Hierarchy_clauseContext,i)


        def attribute_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Attribute_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Attribute_clauseContext,i)


        def extended_attribute_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Extended_attribute_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Extended_attribute_clauseContext,i)


        def LEVEL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEVEL)
            else:
                return self.getToken(PlSqlParser.LEVEL, i)

        def HIERARCHY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.HIERARCHY)
            else:
                return self.getToken(PlSqlParser.HIERARCHY, i)

        def ATTRIBUTE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ATTRIBUTE)
            else:
                return self.getToken(PlSqlParser.ATTRIBUTE, i)

        def RESTRICT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RESTRICT)
            else:
                return self.getToken(PlSqlParser.RESTRICT, i)

        def CASCADE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CASCADE)
            else:
                return self.getToken(PlSqlParser.CASCADE, i)

        def COLUMN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COLUMN)
            else:
                return self.getToken(PlSqlParser.COLUMN, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_dimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_dimension" ):
                listener.enterAlter_dimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_dimension" ):
                listener.exitAlter_dimension(self)




    def alter_dimension(self):

        localctx = PlSqlParser.Alter_dimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 826, self.RULE_alter_dimension)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8630
            self.match(PlSqlParser.ALTER)
            self.state = 8631
            self.match(PlSqlParser.DIMENSION)
            self.state = 8632
            self.identifier()
            self.state = 8677
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.state = 8640 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 8633
                    self.match(PlSqlParser.ADD)
                    self.state = 8638
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,942,self._ctx)
                    if la_ == 1:
                        self.state = 8634
                        self.level_clause()
                        pass

                    elif la_ == 2:
                        self.state = 8635
                        self.hierarchy_clause()
                        pass

                    elif la_ == 3:
                        self.state = 8636
                        self.attribute_clause()
                        pass

                    elif la_ == 4:
                        self.state = 8637
                        self.extended_attribute_clause()
                        pass


                    self.state = 8642 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==21):
                        break

                pass
            elif token in [438]:
                self.state = 8672 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 8644
                    self.match(PlSqlParser.DROP)
                    self.state = 8670
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [798]:
                        self.state = 8645
                        self.match(PlSqlParser.LEVEL)
                        self.state = 8646
                        self.identifier()
                        self.state = 8648
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==171 or _la==1500:
                            self.state = 8647
                            _la = self._input.LA(1)
                            if not(_la==171 or _la==1500):
                                self._errHandler.recoverInline(self)
                            else:
                                self._errHandler.reportMatch(self)
                                self.consume()


                        pass
                    elif token in [633]:
                        self.state = 8650
                        self.match(PlSqlParser.HIERARCHY)
                        self.state = 8651
                        self.identifier()
                        pass
                    elif token in [81]:
                        self.state = 8652
                        self.match(PlSqlParser.ATTRIBUTE)
                        self.state = 8653
                        self.identifier()
                        self.state = 8668
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==798:
                            self.state = 8654
                            self.match(PlSqlParser.LEVEL)
                            self.state = 8655
                            self.identifier()
                            self.state = 8666
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==226:
                                self.state = 8656
                                self.match(PlSqlParser.COLUMN)
                                self.state = 8657
                                self.column_name()
                                self.state = 8663
                                self._errHandler.sync(self)
                                _la = self._input.LA(1)
                                while _la==2353:
                                    self.state = 8658
                                    self.match(PlSqlParser.COMMA)
                                    self.state = 8659
                                    self.match(PlSqlParser.COLUMN)
                                    self.state = 8660
                                    self.column_name()
                                    self.state = 8665
                                    self._errHandler.sync(self)
                                    _la = self._input.LA(1)





                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 8674 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==438):
                        break

                pass
            elif token in [237]:
                self.state = 8676
                self.match(PlSqlParser.COMPILE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Level_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEVEL(self):
            return self.getToken(PlSqlParser.LEVEL, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def table_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_nameContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SKIP_(self):
            return self.getToken(PlSqlParser.SKIP_, 0)

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_level_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevel_clause" ):
                listener.enterLevel_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevel_clause" ):
                listener.exitLevel_clause(self)




    def level_clause(self):

        localctx = PlSqlParser.Level_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 828, self.RULE_level_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8679
            self.match(PlSqlParser.LEVEL)
            self.state = 8680
            self.identifier()
            self.state = 8681
            self.match(PlSqlParser.IS)
            self.state = 8702
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 8682
                self.table_name()
                self.state = 8683
                self.match(PlSqlParser.PERIOD)
                self.state = 8684
                self.column_name()
                pass
            elif token in [2347]:
                self.state = 8686
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8687
                self.table_name()
                self.state = 8688
                self.match(PlSqlParser.PERIOD)
                self.state = 8689
                self.column_name()
                self.state = 8697
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8690
                    self.match(PlSqlParser.COMMA)
                    self.state = 8691
                    self.table_name()
                    self.state = 8692
                    self.match(PlSqlParser.PERIOD)
                    self.state = 8693
                    self.column_name()
                    self.state = 8699
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 8700
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 8707
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1619:
                self.state = 8704
                self.match(PlSqlParser.SKIP_)
                self.state = 8705
                self.match(PlSqlParser.WHEN)
                self.state = 8706
                self.match(PlSqlParser.NULL_)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hierarchy_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def CHILD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHILD)
            else:
                return self.getToken(PlSqlParser.CHILD, i)

        def OF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OF)
            else:
                return self.getToken(PlSqlParser.OF, i)

        def dimension_join_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dimension_join_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_hierarchy_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHierarchy_clause" ):
                listener.enterHierarchy_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHierarchy_clause" ):
                listener.exitHierarchy_clause(self)




    def hierarchy_clause(self):

        localctx = PlSqlParser.Hierarchy_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 830, self.RULE_hierarchy_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8709
            self.match(PlSqlParser.HIERARCHY)
            self.state = 8710
            self.identifier()
            self.state = 8711
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 8712
            self.identifier()
            self.state = 8716 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8713
                self.match(PlSqlParser.CHILD)
                self.state = 8714
                self.match(PlSqlParser.OF)
                self.state = 8715
                self.identifier()
                self.state = 8718 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==192):
                    break

            self.state = 8721
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==748:
                self.state = 8720
                self.dimension_join_clause()


            self.state = 8723
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dimension_join_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JOIN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.JOIN)
            else:
                return self.getToken(PlSqlParser.JOIN, i)

        def KEY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEY)
            else:
                return self.getToken(PlSqlParser.KEY, i)

        def column_one_or_more_sub_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_one_or_more_sub_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_one_or_more_sub_clauseContext,i)


        def REFERENCES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REFERENCES)
            else:
                return self.getToken(PlSqlParser.REFERENCES, i)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dimension_join_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDimension_join_clause" ):
                listener.enterDimension_join_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDimension_join_clause" ):
                listener.exitDimension_join_clause(self)




    def dimension_join_clause(self):

        localctx = PlSqlParser.Dimension_join_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 832, self.RULE_dimension_join_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8731 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8725
                self.match(PlSqlParser.JOIN)
                self.state = 8726
                self.match(PlSqlParser.KEY)
                self.state = 8727
                self.column_one_or_more_sub_clause()
                self.state = 8728
                self.match(PlSqlParser.REFERENCES)
                self.state = 8729
                self.identifier()
                self.state = 8733 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==748):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Attribute_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ATTRIBUTE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ATTRIBUTE)
            else:
                return self.getToken(PlSqlParser.ATTRIBUTE, i)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def DETERMINES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DETERMINES)
            else:
                return self.getToken(PlSqlParser.DETERMINES, i)

        def column_one_or_more_sub_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_one_or_more_sub_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_one_or_more_sub_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_attribute_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAttribute_clause" ):
                listener.enterAttribute_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAttribute_clause" ):
                listener.exitAttribute_clause(self)




    def attribute_clause(self):

        localctx = PlSqlParser.Attribute_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 834, self.RULE_attribute_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8740 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 8735
                    self.match(PlSqlParser.ATTRIBUTE)
                    self.state = 8736
                    self.identifier()
                    self.state = 8737
                    self.match(PlSqlParser.DETERMINES)
                    self.state = 8738
                    self.column_one_or_more_sub_clause()

                else:
                    raise NoViableAltException(self)
                self.state = 8742 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,957,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Extended_attribute_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def LEVEL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEVEL)
            else:
                return self.getToken(PlSqlParser.LEVEL, i)

        def DETERMINES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DETERMINES)
            else:
                return self.getToken(PlSqlParser.DETERMINES, i)

        def column_one_or_more_sub_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_one_or_more_sub_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_one_or_more_sub_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_extended_attribute_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExtended_attribute_clause" ):
                listener.enterExtended_attribute_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExtended_attribute_clause" ):
                listener.exitExtended_attribute_clause(self)




    def extended_attribute_clause(self):

        localctx = PlSqlParser.Extended_attribute_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 836, self.RULE_extended_attribute_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8744
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 8745
            self.identifier()
            self.state = 8751 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8746
                self.match(PlSqlParser.LEVEL)
                self.state = 8747
                self.identifier()
                self.state = 8748
                self.match(PlSqlParser.DETERMINES)
                self.state = 8749
                self.column_one_or_more_sub_clause()
                self.state = 8753 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==798):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_one_or_more_sub_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_column_one_or_more_sub_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_one_or_more_sub_clause" ):
                listener.enterColumn_one_or_more_sub_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_one_or_more_sub_clause" ):
                listener.exitColumn_one_or_more_sub_clause(self)




    def column_one_or_more_sub_clause(self):

        localctx = PlSqlParser.Column_one_or_more_sub_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 838, self.RULE_column_one_or_more_sub_clause)
        self._la = 0 # Token type
        try:
            self.state = 8767
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 8755
                self.column_name()
                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 8756
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8757
                self.column_name()
                self.state = 8762
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 8758
                    self.match(PlSqlParser.COMMA)
                    self.state = 8759
                    self.column_name()
                    self.state = 8764
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 8765
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def out_of_line_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Out_of_line_constraintContext,0)


        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def RELY(self):
            return self.getToken(PlSqlParser.RELY, 0)

        def NORELY(self):
            return self.getToken(PlSqlParser.NORELY, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def alter_view_editionable(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_view_editionableContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_view" ):
                listener.enterAlter_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_view" ):
                listener.exitAlter_view(self)




    def alter_view(self):

        localctx = PlSqlParser.Alter_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 840, self.RULE_alter_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8769
            self.match(PlSqlParser.ALTER)
            self.state = 8770
            self.match(PlSqlParser.VIEW)
            self.state = 8771
            self.tableview_name()
            self.state = 8804
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,964,self._ctx)
            if la_ == 1:
                self.state = 8772
                self.match(PlSqlParser.ADD)
                self.state = 8773
                self.out_of_line_constraint()
                pass

            elif la_ == 2:
                self.state = 8774
                self.match(PlSqlParser.MODIFY)
                self.state = 8775
                self.match(PlSqlParser.CONSTRAINT)
                self.state = 8776
                self.constraint_name()
                self.state = 8777
                _la = self._input.LA(1)
                if not(_la==1107 or _la==1476):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 3:
                self.state = 8779
                self.match(PlSqlParser.DROP)
                self.state = 8796
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [271]:
                    self.state = 8780
                    self.match(PlSqlParser.CONSTRAINT)
                    self.state = 8781
                    self.constraint_name()
                    pass
                elif token in [1376]:
                    self.state = 8782
                    self.match(PlSqlParser.PRIMARY)
                    self.state = 8783
                    self.match(PlSqlParser.KEY)
                    pass
                elif token in [2091]:
                    self.state = 8784
                    self.match(PlSqlParser.UNIQUE)
                    self.state = 8785
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 8786
                    self.column_name()
                    self.state = 8791
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 8787
                        self.match(PlSqlParser.COMMA)
                        self.state = 8788
                        self.column_name()
                        self.state = 8793
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 8794
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 4:
                self.state = 8798
                self.match(PlSqlParser.COMPILE)
                pass

            elif la_ == 5:
                self.state = 8799
                self.match(PlSqlParser.READ)
                self.state = 8800
                _la = self._input.LA(1)
                if not(_la==1192 or _la==2216):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 6:
                self.state = 8802
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,963,self._ctx)
                if la_ == 1:
                    self.state = 8801
                    self.alter_view_editionable()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_view_editionableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_view_editionable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_view_editionable" ):
                listener.enterAlter_view_editionable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_view_editionable" ):
                listener.exitAlter_view_editionable(self)




    def alter_view_editionable(self):

        localctx = PlSqlParser.Alter_view_editionableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 842, self.RULE_alter_view_editionable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8806
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")
            self.state = 8807
            _la = self._input.LA(1)
            if not(_la==451 or _la==1070):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.v = None # Id_expressionContext
            self.cn = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def select_only_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_only_statementContext,0)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def editioning_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Editioning_clauseContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def view_options(self):
            return self.getTypedRuleContext(PlSqlParser.View_optionsContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def COLLATION(self):
            return self.getToken(PlSqlParser.COLLATION, 0)

        def BEQUEATH(self):
            return self.getToken(PlSqlParser.BEQUEATH, 0)

        def subquery_restriction_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Subquery_restriction_clauseContext,0)


        def CURRENT_USER(self):
            return self.getToken(PlSqlParser.CURRENT_USER, 0)

        def DEFINER(self):
            return self.getToken(PlSqlParser.DEFINER, 0)

        def CONTAINER_MAP(self):
            return self.getToken(PlSqlParser.CONTAINER_MAP, 0)

        def CONTAINERS_DEFAULT(self):
            return self.getToken(PlSqlParser.CONTAINERS_DEFAULT, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def EXTENDED(self):
            return self.getToken(PlSqlParser.EXTENDED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_view" ):
                listener.enterCreate_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_view" ):
                listener.exitCreate_view(self)




    def create_view(self):

        localctx = PlSqlParser.Create_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 844, self.RULE_create_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8809
            self.match(PlSqlParser.CREATE)
            self.state = 8812
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 8810
                self.match(PlSqlParser.OR)
                self.state = 8811
                self.match(PlSqlParser.REPLACE)


            self.state = 8818
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576 or _la==1074:
                self.state = 8815
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 8814
                    self.match(PlSqlParser.NO)


                self.state = 8817
                self.match(PlSqlParser.FORCE)


            self.state = 8821
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==451 or _la==453 or _la==1070:
                self.state = 8820
                self.editioning_clause()


            self.state = 8823
            self.match(PlSqlParser.VIEW)
            self.state = 8827
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,969,self._ctx)
            if la_ == 1:
                self.state = 8824
                self.schema_name()
                self.state = 8825
                self.match(PlSqlParser.PERIOD)


            self.state = 8829
            localctx.v = self.id_expression()
            self.state = 8833
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 8830
                self.match(PlSqlParser.IF)
                self.state = 8831
                self.match(PlSqlParser.NOT)
                self.state = 8832
                self.match(PlSqlParser.EXISTS)


            self.state = 8845
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 8835
                self.match(PlSqlParser.SHARING)
                self.state = 8836
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 8843
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [894]:
                    self.state = 8837
                    self.match(PlSqlParser.METADATA)
                    pass
                elif token in [334, 2276]:
                    self.state = 8839
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2276:
                        self.state = 8838
                        self.match(PlSqlParser.EXTENDED)


                    self.state = 8841
                    self.match(PlSqlParser.DATA)
                    pass
                elif token in [1071]:
                    self.state = 8842
                    self.match(PlSqlParser.NONE)
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 8848
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1180 or _la==2347:
                self.state = 8847
                self.view_options()


            self.state = 8853
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 8850
                self.match(PlSqlParser.DEFAULT)
                self.state = 8851
                self.match(PlSqlParser.COLLATION)
                self.state = 8852
                localctx.cn = self.id_expression()


            self.state = 8857
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==114:
                self.state = 8855
                self.match(PlSqlParser.BEQUEATH)
                self.state = 8856
                _la = self._input.LA(1)
                if not(_la==324 or _la==376):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 8859
            self.match(PlSqlParser.AS)
            self.state = 8860
            self.select_only_statement()
            self.state = 8862
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 8861
                self.subquery_restriction_clause()


            self.state = 8865
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==276 or _la==278:
                self.state = 8864
                _la = self._input.LA(1)
                if not(_la==276 or _la==278):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Editioning_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EDITIONING(self):
            return self.getToken(PlSqlParser.EDITIONING, 0)

        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_editioning_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEditioning_clause" ):
                listener.enterEditioning_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEditioning_clause" ):
                listener.exitEditioning_clause(self)




    def editioning_clause(self):

        localctx = PlSqlParser.Editioning_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 846, self.RULE_editioning_clause)
        self._la = 0 # Token type
        try:
            self.state = 8873
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [453]:
                self.enterOuterAlt(localctx, 1)
                self.state = 8867
                self.match(PlSqlParser.EDITIONING)
                pass
            elif token in [451]:
                self.enterOuterAlt(localctx, 2)
                self.state = 8868
                self.match(PlSqlParser.EDITIONABLE)
                self.state = 8870
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==453:
                    self.state = 8869
                    self.match(PlSqlParser.EDITIONING)


                pass
            elif token in [1070]:
                self.enterOuterAlt(localctx, 3)
                self.state = 8872
                self.match(PlSqlParser.NONEDITIONABLE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class View_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def view_alias_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.View_alias_constraintContext,0)


        def object_view_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Object_view_clauseContext,0)


        def xmltype_view_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Xmltype_view_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_view_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterView_options" ):
                listener.enterView_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitView_options" ):
                listener.exitView_options(self)




    def view_options(self):

        localctx = PlSqlParser.View_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 848, self.RULE_view_options)
        try:
            self.state = 8878
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,981,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 8875
                self.view_alias_constraint()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 8876
                self.object_view_clause()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 8877
                self.xmltype_view_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class View_alias_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def table_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,i)


        def out_of_line_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Out_of_line_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Out_of_line_constraintContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def inline_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inline_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inline_constraintContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_view_alias_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterView_alias_constraint" ):
                listener.enterView_alias_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitView_alias_constraint" ):
                listener.exitView_alias_constraint(self)




    def view_alias_constraint(self):

        localctx = PlSqlParser.View_alias_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 850, self.RULE_view_alias_constraint)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8880
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 8894 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 8882
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 8881
                    self.match(PlSqlParser.COMMA)


                self.state = 8892
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,984,self._ctx)
                if la_ == 1:
                    self.state = 8884
                    self.table_alias()
                    self.state = 8888
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,983,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 8885
                            self.inline_constraint() 
                        self.state = 8890
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,983,self._ctx)

                    pass

                elif la_ == 2:
                    self.state = 8891
                    self.out_of_line_constraint()
                    pass


                self.state = 8896 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -36029346841886721) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -4398046511121) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 282338265137151) != 0) or _la==2372 or _la==2378):
                    break

            self.state = 8898
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_view_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tn = None # Id_expressionContext
            self.sv = None # Id_expressionContext

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def UNDER(self):
            return self.getToken(PlSqlParser.UNDER, 0)

        def schema_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Schema_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def IDENTIFIER(self):
            return self.getToken(PlSqlParser.IDENTIFIER, 0)

        def ID(self):
            return self.getToken(PlSqlParser.ID, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def REGULAR_ID(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REGULAR_ID)
            else:
                return self.getToken(PlSqlParser.REGULAR_ID, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def out_of_line_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Out_of_line_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Out_of_line_constraintContext,i)


        def inline_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inline_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inline_constraintContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_view_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_view_clause" ):
                listener.enterObject_view_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_view_clause" ):
                listener.exitObject_view_clause(self)




    def object_view_clause(self):

        localctx = PlSqlParser.Object_view_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 852, self.RULE_object_view_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8900
            self.match(PlSqlParser.OF)
            self.state = 8904
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,986,self._ctx)
            if la_ == 1:
                self.state = 8901
                self.schema_name()
                self.state = 8902
                self.match(PlSqlParser.PERIOD)


            self.state = 8906
            localctx.tn = self.id_expression()
            self.state = 8930
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2212]:
                self.state = 8907
                self.match(PlSqlParser.WITH)
                self.state = 8908
                self.match(PlSqlParser.OBJECT)
                self.state = 8909
                _la = self._input.LA(1)
                if not(_la==645 or _la==648):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 8921
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [368]:
                    self.state = 8910
                    self.match(PlSqlParser.DEFAULT)
                    pass
                elif token in [2347]:
                    self.state = 8911
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 8912
                    self.match(PlSqlParser.REGULAR_ID)
                    self.state = 8917
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 8913
                        self.match(PlSqlParser.COMMA)
                        self.state = 8914
                        self.match(PlSqlParser.REGULAR_ID)
                        self.state = 8919
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 8920
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [2086]:
                self.state = 8923
                self.match(PlSqlParser.UNDER)
                self.state = 8927
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,989,self._ctx)
                if la_ == 1:
                    self.state = 8924
                    self.schema_name()
                    self.state = 8925
                    self.match(PlSqlParser.PERIOD)


                self.state = 8929
                localctx.sv = self.id_expression()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 8949
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2347:
                self.state = 8932
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8941 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 8934
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 8933
                        self.match(PlSqlParser.COMMA)


                    self.state = 8939
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [190, 271, 272, 578, 1376, 2091]:
                        self.state = 8936
                        self.out_of_line_constraint()
                        pass
                    elif token in [2378]:
                        self.state = 8937
                        self.match(PlSqlParser.REGULAR_ID)
                        self.state = 8938
                        self.inline_constraint()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 8943 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==190 or _la==271 or _la==272 or _la==578 or _la==1376 or _la==2091 or _la==2353 or _la==2378):
                        break

                self.state = 8945
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 8951
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inline_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def references_clause(self):
            return self.getTypedRuleContext(PlSqlParser.References_clauseContext,0)


        def check_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Check_constraintContext,0)


        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def constraint_state(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_stateContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inline_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInline_constraint" ):
                listener.enterInline_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInline_constraint" ):
                listener.exitInline_constraint(self)




    def inline_constraint(self):

        localctx = PlSqlParser.Inline_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 854, self.RULE_inline_constraint)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 8954
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==271:
                self.state = 8952
                self.match(PlSqlParser.CONSTRAINT)
                self.state = 8953
                self.constraint_name()


            self.state = 8965
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138, 1162]:
                self.state = 8957
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1138:
                    self.state = 8956
                    self.match(PlSqlParser.NOT)


                self.state = 8959
                self.match(PlSqlParser.NULL_)
                pass
            elif token in [2091]:
                self.state = 8960
                self.match(PlSqlParser.UNIQUE)
                pass
            elif token in [1376]:
                self.state = 8961
                self.match(PlSqlParser.PRIMARY)
                self.state = 8962
                self.match(PlSqlParser.KEY)
                pass
            elif token in [1450]:
                self.state = 8963
                self.references_clause()
                pass
            elif token in [190]:
                self.state = 8964
                self.check_constraint()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 8968
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,998,self._ctx)
            if la_ == 1:
                self.state = 8967
                self.constraint_state()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inline_ref_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SCOPE(self):
            return self.getToken(PlSqlParser.SCOPE, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def ROWID(self):
            return self.getToken(PlSqlParser.ROWID, 0)

        def references_clause(self):
            return self.getTypedRuleContext(PlSqlParser.References_clauseContext,0)


        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def constraint_state(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_stateContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_inline_ref_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInline_ref_constraint" ):
                listener.enterInline_ref_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInline_ref_constraint" ):
                listener.exitInline_ref_constraint(self)




    def inline_ref_constraint(self):

        localctx = PlSqlParser.Inline_ref_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 856, self.RULE_inline_ref_constraint)
        self._la = 0 # Token type
        try:
            self.state = 8983
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1550]:
                self.enterOuterAlt(localctx, 1)
                self.state = 8970
                self.match(PlSqlParser.SCOPE)
                self.state = 8971
                self.match(PlSqlParser.IS)
                self.state = 8972
                self.tableview_name()
                pass
            elif token in [2212]:
                self.enterOuterAlt(localctx, 2)
                self.state = 8973
                self.match(PlSqlParser.WITH)
                self.state = 8974
                self.match(PlSqlParser.ROWID)
                pass
            elif token in [271, 1450]:
                self.enterOuterAlt(localctx, 3)
                self.state = 8977
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==271:
                    self.state = 8975
                    self.match(PlSqlParser.CONSTRAINT)
                    self.state = 8976
                    self.constraint_name()


                self.state = 8979
                self.references_clause()
                self.state = 8981
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1000,self._ctx)
                if la_ == 1:
                    self.state = 8980
                    self.constraint_state()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Out_of_line_ref_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ref_col_or_attr = None # Regular_idContext

        def SCOPE(self):
            return self.getToken(PlSqlParser.SCOPE, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def regular_id(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Regular_idContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Regular_idContext,i)


        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def ROWID(self):
            return self.getToken(PlSqlParser.ROWID, 0)

        def FOREIGN(self):
            return self.getToken(PlSqlParser.FOREIGN, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def references_clause(self):
            return self.getTypedRuleContext(PlSqlParser.References_clauseContext,0)


        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def constraint_state(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_stateContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_out_of_line_ref_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOut_of_line_ref_constraint" ):
                listener.enterOut_of_line_ref_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOut_of_line_ref_constraint" ):
                listener.exitOut_of_line_ref_constraint(self)




    def out_of_line_ref_constraint(self):

        localctx = PlSqlParser.Out_of_line_ref_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 858, self.RULE_out_of_line_ref_constraint)
        self._la = 0 # Token type
        try:
            self.state = 9020
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1550]:
                self.enterOuterAlt(localctx, 1)
                self.state = 8985
                self.match(PlSqlParser.SCOPE)
                self.state = 8986
                self.match(PlSqlParser.FOR)
                self.state = 8987
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8988
                localctx.ref_col_or_attr = self.regular_id()
                self.state = 8989
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 8990
                self.match(PlSqlParser.IS)
                self.state = 8991
                self.tableview_name()
                pass
            elif token in [1452]:
                self.enterOuterAlt(localctx, 2)
                self.state = 8993
                self.match(PlSqlParser.REF)
                self.state = 8994
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 8995
                localctx.ref_col_or_attr = self.regular_id()
                self.state = 8996
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 8997
                self.match(PlSqlParser.WITH)
                self.state = 8998
                self.match(PlSqlParser.ROWID)
                pass
            elif token in [271, 578]:
                self.enterOuterAlt(localctx, 3)
                self.state = 9002
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==271:
                    self.state = 9000
                    self.match(PlSqlParser.CONSTRAINT)
                    self.state = 9001
                    self.constraint_name()


                self.state = 9004
                self.match(PlSqlParser.FOREIGN)
                self.state = 9005
                self.match(PlSqlParser.KEY)
                self.state = 9006
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9011 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 9008
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 9007
                        self.match(PlSqlParser.COMMA)


                    self.state = 9010
                    localctx.ref_col_or_attr = self.regular_id()
                    self.state = 9013 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 281511483932671) != 0) or _la==2378):
                        break

                self.state = 9015
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 9016
                self.references_clause()
                self.state = 9018
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1005,self._ctx)
                if la_ == 1:
                    self.state = 9017
                    self.constraint_state()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Out_of_line_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constraint_state(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_stateContext,0)


        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def foreign_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Foreign_key_clauseContext,0)


        def CHECK(self):
            return self.getToken(PlSqlParser.CHECK, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def CONSTRAINTS(self):
            return self.getToken(PlSqlParser.CONSTRAINTS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_out_of_line_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOut_of_line_constraint" ):
                listener.enterOut_of_line_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOut_of_line_constraint" ):
                listener.exitOut_of_line_constraint(self)




    def out_of_line_constraint(self):

        localctx = PlSqlParser.Out_of_line_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 860, self.RULE_out_of_line_constraint)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9024
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==271 or _la==272:
                self.state = 9022
                _la = self._input.LA(1)
                if not(_la==271 or _la==272):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 9023
                self.constraint_name()


            self.state = 9057
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2091]:
                self.state = 9026
                self.match(PlSqlParser.UNIQUE)
                self.state = 9027
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9028
                self.column_name()
                self.state = 9033
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9029
                    self.match(PlSqlParser.COMMA)
                    self.state = 9030
                    self.column_name()
                    self.state = 9035
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9036
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1376]:
                self.state = 9038
                self.match(PlSqlParser.PRIMARY)
                self.state = 9039
                self.match(PlSqlParser.KEY)
                self.state = 9040
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9041
                self.column_name()
                self.state = 9046
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9042
                    self.match(PlSqlParser.COMMA)
                    self.state = 9043
                    self.column_name()
                    self.state = 9048
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9049
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [578]:
                self.state = 9051
                self.foreign_key_clause()
                pass
            elif token in [190]:
                self.state = 9052
                self.match(PlSqlParser.CHECK)
                self.state = 9053
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9054
                self.condition()
                self.state = 9055
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 9060
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1011,self._ctx)
            if la_ == 1:
                self.state = 9059
                self.constraint_state()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Constraint_stateContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFERRABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFERRABLE)
            else:
                return self.getToken(PlSqlParser.DEFERRABLE, i)

        def INITIALLY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INITIALLY)
            else:
                return self.getToken(PlSqlParser.INITIALLY, i)

        def using_index_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Using_index_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Using_index_clauseContext,i)


        def IMMEDIATE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IMMEDIATE)
            else:
                return self.getToken(PlSqlParser.IMMEDIATE, i)

        def DEFERRED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFERRED)
            else:
                return self.getToken(PlSqlParser.DEFERRED, i)

        def RELY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RELY)
            else:
                return self.getToken(PlSqlParser.RELY, i)

        def NORELY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NORELY)
            else:
                return self.getToken(PlSqlParser.NORELY, i)

        def ENABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENABLE)
            else:
                return self.getToken(PlSqlParser.ENABLE, i)

        def DISABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISABLE)
            else:
                return self.getToken(PlSqlParser.DISABLE, i)

        def VALIDATE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.VALIDATE)
            else:
                return self.getToken(PlSqlParser.VALIDATE, i)

        def NOVALIDATE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOVALIDATE)
            else:
                return self.getToken(PlSqlParser.NOVALIDATE, i)

        def NOT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOT)
            else:
                return self.getToken(PlSqlParser.NOT, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_constraint_state

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstraint_state" ):
                listener.enterConstraint_state(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstraint_state" ):
                listener.exitConstraint_state(self)




    def constraint_state(self):

        localctx = PlSqlParser.Constraint_stateContext(self, self._ctx, self.state)
        self.enterRule(localctx, 862, self.RULE_constraint_state)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9072 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 9072
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [372, 1138]:
                        self.state = 9063
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1138:
                            self.state = 9062
                            self.match(PlSqlParser.NOT)


                        self.state = 9065
                        self.match(PlSqlParser.DEFERRABLE)
                        pass
                    elif token in [700]:
                        self.state = 9066
                        self.match(PlSqlParser.INITIALLY)
                        self.state = 9067
                        _la = self._input.LA(1)
                        if not(_la==373 or _la==656):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [1107, 1476]:
                        self.state = 9068
                        _la = self._input.LA(1)
                        if not(_la==1107 or _la==1476):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [404, 467]:
                        self.state = 9069
                        _la = self._input.LA(1)
                        if not(_la==404 or _la==467):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [1149, 2160]:
                        self.state = 9070
                        _la = self._input.LA(1)
                        if not(_la==1149 or _la==2160):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [2153]:
                        self.state = 9071
                        self.using_index_clause()
                        pass
                    else:
                        raise NoViableAltException(self)


                else:
                    raise NoViableAltException(self)
                self.state = 9074 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1014,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmltype_view_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def XMLTYPE(self):
            return self.getToken(PlSqlParser.XMLTYPE, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def IDENTIFIER(self):
            return self.getToken(PlSqlParser.IDENTIFIER, 0)

        def ID(self):
            return self.getToken(PlSqlParser.ID, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def xml_schema_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_schema_specContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xmltype_view_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmltype_view_clause" ):
                listener.enterXmltype_view_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmltype_view_clause" ):
                listener.exitXmltype_view_clause(self)




    def xmltype_view_clause(self):

        localctx = PlSqlParser.Xmltype_view_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 864, self.RULE_xmltype_view_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9076
            self.match(PlSqlParser.OF)
            self.state = 9077
            self.match(PlSqlParser.XMLTYPE)
            self.state = 9079
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==455 or _la==2248:
                self.state = 9078
                self.xml_schema_spec()


            self.state = 9081
            self.match(PlSqlParser.WITH)
            self.state = 9082
            self.match(PlSqlParser.OBJECT)
            self.state = 9083
            _la = self._input.LA(1)
            if not(_la==645 or _la==648):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 9096
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [368]:
                self.state = 9084
                self.match(PlSqlParser.DEFAULT)
                pass
            elif token in [2347]:
                self.state = 9085
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9086
                self.expression()
                self.state = 9091
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9087
                    self.match(PlSqlParser.COMMA)
                    self.state = 9088
                    self.expression()
                    self.state = 9093
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9094
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_schema_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELEMENT(self):
            return self.getToken(PlSqlParser.ELEMENT, 0)

        def element(self):
            return self.getTypedRuleContext(PlSqlParser.ElementContext,0)


        def xml_schema_url(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Xml_schema_urlContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Xml_schema_urlContext,i)


        def HASH_OP(self):
            return self.getToken(PlSqlParser.HASH_OP, 0)

        def XMLSCHEMA(self):
            return self.getToken(PlSqlParser.XMLSCHEMA, 0)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def VARRAYS(self):
            return self.getToken(PlSqlParser.VARRAYS, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def allow_or_disallow(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allow_or_disallowContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allow_or_disallowContext,i)


        def NONSCHEMA(self):
            return self.getToken(PlSqlParser.NONSCHEMA, 0)

        def ANYSCHEMA(self):
            return self.getToken(PlSqlParser.ANYSCHEMA, 0)

        def LOBS(self):
            return self.getToken(PlSqlParser.LOBS, 0)

        def TABLES(self):
            return self.getToken(PlSqlParser.TABLES, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_schema_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_schema_spec" ):
                listener.enterXml_schema_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_schema_spec" ):
                listener.exitXml_schema_spec(self)




    def xml_schema_spec(self):

        localctx = PlSqlParser.Xml_schema_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 866, self.RULE_xml_schema_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9100
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2248:
                self.state = 9098
                self.match(PlSqlParser.XMLSCHEMA)
                self.state = 9099
                self.xml_schema_url()


            self.state = 9102
            self.match(PlSqlParser.ELEMENT)
            self.state = 9108
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1019,self._ctx)
            if la_ == 1:
                self.state = 9103
                self.element()
                pass

            elif la_ == 2:
                self.state = 9104
                self.xml_schema_url()
                self.state = 9105
                self.match(PlSqlParser.HASH_OP)
                self.state = 9106
                self.element()
                pass


            self.state = 9115
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679:
                self.state = 9110
                self.match(PlSqlParser.STORE)
                self.state = 9111
                self.match(PlSqlParser.ALL)
                self.state = 9112
                self.match(PlSqlParser.VARRAYS)
                self.state = 9113
                self.match(PlSqlParser.AS)
                self.state = 9114
                _la = self._input.LA(1)
                if not(_la==819 or _la==1997):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 9120
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1021,self._ctx)
            if la_ == 1:
                self.state = 9117
                self.allow_or_disallow()
                self.state = 9118
                self.match(PlSqlParser.NONSCHEMA)


            self.state = 9125
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==40 or _la==408:
                self.state = 9122
                self.allow_or_disallow()
                self.state = 9123
                self.match(PlSqlParser.ANYSCHEMA)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_schema_urlContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_schema_url

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_schema_url" ):
                listener.enterXml_schema_url(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_schema_url" ):
                listener.exitXml_schema_url(self)




    def xml_schema_url(self):

        localctx = PlSqlParser.Xml_schema_urlContext(self, self._ctx, self.state)
        self.enterRule(localctx, 868, self.RULE_xml_schema_url)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9127
            self.match(PlSqlParser.DELIMITED_ID)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ElementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterElement" ):
                listener.enterElement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitElement" ):
                listener.exitElement(self)




    def element(self):

        localctx = PlSqlParser.ElementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 870, self.RULE_element)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9129
            self.match(PlSqlParser.DELIMITED_ID)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_tablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def MINIMUM(self):
            return self.getToken(PlSqlParser.MINIMUM, 0)

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def SHRINK(self):
            return self.getToken(PlSqlParser.SHRINK, 0)

        def SPACE_KEYWORD(self):
            return self.getToken(PlSqlParser.SPACE_KEYWORD, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def new_tablespace_name(self):
            return self.getTypedRuleContext(PlSqlParser.New_tablespace_nameContext,0)


        def begin_or_end(self):
            return self.getTypedRuleContext(PlSqlParser.Begin_or_endContext,0)


        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def datafile_tempfile_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_clausesContext,0)


        def tablespace_logging_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_logging_clausesContext,0)


        def tablespace_group_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_group_clauseContext,0)


        def tablespace_state_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_state_clausesContext,0)


        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def flashback_mode_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_mode_clauseContext,0)


        def tablespace_retention_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_retention_clauseContext,0)


        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,0)


        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_tablespace" ):
                listener.enterAlter_tablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_tablespace" ):
                listener.exitAlter_tablespace(self)




    def alter_tablespace(self):

        localctx = PlSqlParser.Alter_tablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 872, self.RULE_alter_tablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9131
            self.match(PlSqlParser.ALTER)
            self.state = 9132
            self.match(PlSqlParser.TABLESPACE)
            self.state = 9133
            self.tablespace()
            self.state = 9166
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1026,self._ctx)
            if la_ == 1:
                self.state = 9134
                self.match(PlSqlParser.DEFAULT)
                self.state = 9136
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==246 or _la==1017:
                    self.state = 9135
                    self.table_compression()


                self.state = 9139
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1678:
                    self.state = 9138
                    self.storage_clause()


                pass

            elif la_ == 2:
                self.state = 9141
                self.match(PlSqlParser.MINIMUM)
                self.state = 9142
                self.match(PlSqlParser.EXTENT)
                self.state = 9143
                self.size_clause()
                pass

            elif la_ == 3:
                self.state = 9144
                self.match(PlSqlParser.RESIZE)
                self.state = 9145
                self.size_clause()
                pass

            elif la_ == 4:
                self.state = 9146
                self.match(PlSqlParser.COALESCE)
                pass

            elif la_ == 5:
                self.state = 9147
                self.match(PlSqlParser.SHRINK)
                self.state = 9148
                self.match(PlSqlParser.SPACE_KEYWORD)
                self.state = 9151
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==768:
                    self.state = 9149
                    self.match(PlSqlParser.KEEP)
                    self.state = 9150
                    self.size_clause()


                pass

            elif la_ == 6:
                self.state = 9153
                self.match(PlSqlParser.RENAME)
                self.state = 9154
                self.match(PlSqlParser.TO)
                self.state = 9155
                self.new_tablespace_name()
                pass

            elif la_ == 7:
                self.state = 9156
                self.begin_or_end()
                self.state = 9157
                self.match(PlSqlParser.BACKUP)
                pass

            elif la_ == 8:
                self.state = 9159
                self.datafile_tempfile_clauses()
                pass

            elif la_ == 9:
                self.state = 9160
                self.tablespace_logging_clauses()
                pass

            elif la_ == 10:
                self.state = 9161
                self.tablespace_group_clause()
                pass

            elif la_ == 11:
                self.state = 9162
                self.tablespace_state_clauses()
                pass

            elif la_ == 12:
                self.state = 9163
                self.autoextend_clause()
                pass

            elif la_ == 13:
                self.state = 9164
                self.flashback_mode_clause()
                pass

            elif la_ == 14:
                self.state = 9165
                self.tablespace_retention_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Datafile_tempfile_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def datafile_specification(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_specificationContext,0)


        def tempfile_specification(self):
            return self.getTypedRuleContext(PlSqlParser.Tempfile_specificationContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def TEMPFILE(self):
            return self.getToken(PlSqlParser.TEMPFILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def SHRINK(self):
            return self.getToken(PlSqlParser.SHRINK, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def online_or_offline(self):
            return self.getTypedRuleContext(PlSqlParser.Online_or_offlineContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_datafile_tempfile_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatafile_tempfile_clauses" ):
                listener.enterDatafile_tempfile_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatafile_tempfile_clauses" ):
                listener.exitDatafile_tempfile_clauses(self)




    def datafile_tempfile_clauses(self):

        localctx = PlSqlParser.Datafile_tempfile_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 874, self.RULE_datafile_tempfile_clauses)
        self._la = 0 # Token type
        try:
            self.state = 9214
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9168
                self.match(PlSqlParser.ADD)
                self.state = 9171
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [335]:
                    self.state = 9169
                    self.datafile_specification()
                    pass
                elif token in [2005]:
                    self.state = 9170
                    self.tempfile_specification()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9173
                self.match(PlSqlParser.DROP)
                self.state = 9174
                _la = self._input.LA(1)
                if not(_la==335 or _la==2005):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 9177
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 9175
                    self.filename()
                    pass
                elif token in [2341]:
                    self.state = 9176
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 9181
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==768:
                    self.state = 9179
                    self.match(PlSqlParser.KEEP)
                    self.state = 9180
                    self.size_clause()


                pass
            elif token in [1602]:
                self.enterOuterAlt(localctx, 3)
                self.state = 9183
                self.match(PlSqlParser.SHRINK)
                self.state = 9184
                self.match(PlSqlParser.TEMPFILE)
                self.state = 9187
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 9185
                    self.filename()
                    pass
                elif token in [2341]:
                    self.state = 9186
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 9191
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==768:
                    self.state = 9189
                    self.match(PlSqlParser.KEEP)
                    self.state = 9190
                    self.size_clause()


                pass
            elif token in [1481]:
                self.enterOuterAlt(localctx, 4)
                self.state = 9193
                self.match(PlSqlParser.RENAME)
                self.state = 9194
                self.match(PlSqlParser.DATAFILE)
                self.state = 9195
                self.filename()
                self.state = 9200
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9196
                    self.match(PlSqlParser.COMMA)
                    self.state = 9197
                    self.filename()
                    self.state = 9202
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9203
                self.match(PlSqlParser.TO)
                self.state = 9204
                self.filename()
                self.state = 9209
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9205
                    self.match(PlSqlParser.COMMA)
                    self.state = 9206
                    self.filename()
                    self.state = 9211
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [335, 2005]:
                self.enterOuterAlt(localctx, 5)
                self.state = 9212
                _la = self._input.LA(1)
                if not(_la==335 or _la==2005):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()

                self.state = 9213
                self.online_or_offline()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_logging_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_logging_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_logging_clauses" ):
                listener.enterTablespace_logging_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_logging_clauses" ):
                listener.exitTablespace_logging_clauses(self)




    def tablespace_logging_clauses(self):

        localctx = PlSqlParser.Tablespace_logging_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 876, self.RULE_tablespace_logging_clauses)
        self._la = 0 # Token type
        try:
            self.state = 9222
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [554, 832, 1057]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9216
                self.logging_clause()
                pass
            elif token in [576, 1074]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9218
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 9217
                    self.match(PlSqlParser.NO)


                self.state = 9220
                self.match(PlSqlParser.FORCE)
                self.state = 9221
                self.match(PlSqlParser.LOGGING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_group_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def tablespace_group_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_group_nameContext,0)


        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_group_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_group_clause" ):
                listener.enterTablespace_group_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_group_clause" ):
                listener.exitTablespace_group_clause(self)




    def tablespace_group_clause(self):

        localctx = PlSqlParser.Tablespace_group_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 878, self.RULE_tablespace_group_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9224
            self.match(PlSqlParser.TABLESPACE)
            self.state = 9225
            self.match(PlSqlParser.GROUP)
            self.state = 9228
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.state = 9226
                self.tablespace_group_name()
                pass
            elif token in [2343]:
                self.state = 9227
                self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_group_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_group_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_group_name" ):
                listener.enterTablespace_group_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_group_name" ):
                listener.exitTablespace_group_name(self)




    def tablespace_group_name(self):

        localctx = PlSqlParser.Tablespace_group_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 880, self.RULE_tablespace_group_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9230
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_state_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def NORMAL(self):
            return self.getToken(PlSqlParser.NORMAL, 0)

        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def PERMANENT(self):
            return self.getToken(PlSqlParser.PERMANENT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_state_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_state_clauses" ):
                listener.enterTablespace_state_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_state_clauses" ):
                listener.exitTablespace_state_clauses(self)




    def tablespace_state_clauses(self):

        localctx = PlSqlParser.Tablespace_state_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 882, self.RULE_tablespace_state_clauses)
        self._la = 0 # Token type
        try:
            self.state = 9241
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1190]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9232
                self.match(PlSqlParser.ONLINE)
                pass
            elif token in [1177]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9233
                self.match(PlSqlParser.OFFLINE)
                self.state = 9235
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==656 or _la==1115 or _la==2007:
                    self.state = 9234
                    _la = self._input.LA(1)
                    if not(_la==656 or _la==1115 or _la==2007):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            elif token in [1429]:
                self.enterOuterAlt(localctx, 3)
                self.state = 9237
                self.match(PlSqlParser.READ)
                self.state = 9238
                _la = self._input.LA(1)
                if not(_la==1192 or _la==2216):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [1314]:
                self.enterOuterAlt(localctx, 4)
                self.state = 9239
                self.match(PlSqlParser.PERMANENT)
                pass
            elif token in [2007]:
                self.enterOuterAlt(localctx, 5)
                self.state = 9240
                self.match(PlSqlParser.TEMPORARY)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Flashback_mode_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_flashback_mode_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlashback_mode_clause" ):
                listener.enterFlashback_mode_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlashback_mode_clause" ):
                listener.exitFlashback_mode_clause(self)




    def flashback_mode_clause(self):

        localctx = PlSqlParser.Flashback_mode_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 884, self.RULE_flashback_mode_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9243
            self.match(PlSqlParser.FLASHBACK)
            self.state = 9244
            _la = self._input.LA(1)
            if not(_la==1178 or _la==1193):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class New_tablespace_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_new_tablespace_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNew_tablespace_name" ):
                listener.enterNew_tablespace_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNew_tablespace_name" ):
                listener.exitNew_tablespace_name(self)




    def new_tablespace_name(self):

        localctx = PlSqlParser.New_tablespace_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 886, self.RULE_new_tablespace_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9246
            self.tablespace()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_tablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def permanent_tablespace_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Permanent_tablespace_clauseContext,0)


        def temporary_tablespace_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Temporary_tablespace_clauseContext,0)


        def undo_tablespace_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Undo_tablespace_clauseContext,0)


        def BIGFILE(self):
            return self.getToken(PlSqlParser.BIGFILE, 0)

        def SMALLFILE(self):
            return self.getToken(PlSqlParser.SMALLFILE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_tablespace" ):
                listener.enterCreate_tablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_tablespace" ):
                listener.exitCreate_tablespace(self)




    def create_tablespace(self):

        localctx = PlSqlParser.Create_tablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 888, self.RULE_create_tablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9248
            self.match(PlSqlParser.CREATE)
            self.state = 9250
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==118 or _la==1622:
                self.state = 9249
                _la = self._input.LA(1)
                if not(_la==118 or _la==1622):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 9255
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1996]:
                self.state = 9252
                self.permanent_tablespace_clause()
                pass
            elif token in [2007]:
                self.state = 9253
                self.temporary_tablespace_clause()
                pass
            elif token in [2087]:
                self.state = 9254
                self.undo_tablespace_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Permanent_tablespace_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def datafile_specification(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_specificationContext,0)


        def MINIMUM(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MINIMUM)
            else:
                return self.getToken(PlSqlParser.MINIMUM, i)

        def EXTENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EXTENT)
            else:
                return self.getToken(PlSqlParser.EXTENT, i)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def BLOCKSIZE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BLOCKSIZE)
            else:
                return self.getToken(PlSqlParser.BLOCKSIZE, i)

        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def FORCE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FORCE)
            else:
                return self.getToken(PlSqlParser.FORCE, i)

        def LOGGING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOGGING)
            else:
                return self.getToken(PlSqlParser.LOGGING, i)

        def ENCRYPTION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENCRYPTION)
            else:
                return self.getToken(PlSqlParser.ENCRYPTION, i)

        def tablespace_encryption_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tablespace_encryption_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tablespace_encryption_specContext,i)


        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def extent_management_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Extent_management_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Extent_management_clauseContext,i)


        def segment_management_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_management_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_management_clauseContext,i)


        def flashback_mode_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Flashback_mode_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Flashback_mode_clauseContext,i)


        def ONLINE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ONLINE)
            else:
                return self.getToken(PlSqlParser.ONLINE, i)

        def OFFLINE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OFFLINE)
            else:
                return self.getToken(PlSqlParser.OFFLINE, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_permanent_tablespace_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPermanent_tablespace_clause" ):
                listener.enterPermanent_tablespace_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPermanent_tablespace_clause" ):
                listener.exitPermanent_tablespace_clause(self)




    def permanent_tablespace_clause(self):

        localctx = PlSqlParser.Permanent_tablespace_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 890, self.RULE_permanent_tablespace_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9257
            self.match(PlSqlParser.TABLESPACE)
            self.state = 9258
            self.id_expression()
            self.state = 9262
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 9259
                self.match(PlSqlParser.IF)
                self.state = 9260
                self.match(PlSqlParser.NOT)
                self.state = 9261
                self.match(PlSqlParser.EXISTS)


            self.state = 9265
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==335:
                self.state = 9264
                self.datafile_specification()


            self.state = 9284
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==140 or _la==368 or _la==472 or _la==521 or ((((_la - 554)) & ~0x3f) == 0 and ((1 << (_la - 554)) & 4196353) != 0) or _la==832 or _la==900 or _la==1057 or _la==1177 or _la==1190 or _la==1567:
                self.state = 9282
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [900]:
                    self.state = 9267
                    self.match(PlSqlParser.MINIMUM)
                    self.state = 9268
                    self.match(PlSqlParser.EXTENT)
                    self.state = 9269
                    self.size_clause()
                    pass
                elif token in [140]:
                    self.state = 9270
                    self.match(PlSqlParser.BLOCKSIZE)
                    self.state = 9271
                    self.size_clause()
                    pass
                elif token in [554, 832, 1057]:
                    self.state = 9272
                    self.logging_clause()
                    pass
                elif token in [576]:
                    self.state = 9273
                    self.match(PlSqlParser.FORCE)
                    self.state = 9274
                    self.match(PlSqlParser.LOGGING)
                    pass
                elif token in [1177, 1190]:
                    self.state = 9275
                    _la = self._input.LA(1)
                    if not(_la==1177 or _la==1190):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [472]:
                    self.state = 9276
                    self.match(PlSqlParser.ENCRYPTION)
                    self.state = 9277
                    self.tablespace_encryption_spec()
                    pass
                elif token in [368]:
                    self.state = 9278
                    self.match(PlSqlParser.DEFAULT)
                    pass
                elif token in [521]:
                    self.state = 9279
                    self.extent_management_clause()
                    pass
                elif token in [1567]:
                    self.state = 9280
                    self.segment_management_clause()
                    pass
                elif token in [565]:
                    self.state = 9281
                    self.flashback_mode_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 9286
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_encryption_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.encrypt_algorithm = None # Token

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_encryption_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_encryption_spec" ):
                listener.enterTablespace_encryption_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_encryption_spec" ):
                listener.exitTablespace_encryption_spec(self)




    def tablespace_encryption_spec(self):

        localctx = PlSqlParser.Tablespace_encryption_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 892, self.RULE_tablespace_encryption_spec)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9287
            self.match(PlSqlParser.USING)
            self.state = 9288
            localctx.encrypt_algorithm = self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logging_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def NOLOGGING(self):
            return self.getToken(PlSqlParser.NOLOGGING, 0)

        def FILESYSTEM_LIKE_LOGGING(self):
            return self.getToken(PlSqlParser.FILESYSTEM_LIKE_LOGGING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_logging_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogging_clause" ):
                listener.enterLogging_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogging_clause" ):
                listener.exitLogging_clause(self)




    def logging_clause(self):

        localctx = PlSqlParser.Logging_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 894, self.RULE_logging_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9290
            _la = self._input.LA(1)
            if not(_la==554 or _la==832 or _la==1057):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Extent_management_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def MANAGEMENT(self):
            return self.getToken(PlSqlParser.MANAGEMENT, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def AUTOALLOCATE(self):
            return self.getToken(PlSqlParser.AUTOALLOCATE, 0)

        def UNIFORM(self):
            return self.getToken(PlSqlParser.UNIFORM, 0)

        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_extent_management_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExtent_management_clause" ):
                listener.enterExtent_management_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExtent_management_clause" ):
                listener.exitExtent_management_clause(self)




    def extent_management_clause(self):

        localctx = PlSqlParser.Extent_management_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 896, self.RULE_extent_management_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9292
            self.match(PlSqlParser.EXTENT)
            self.state = 9293
            self.match(PlSqlParser.MANAGEMENT)
            self.state = 9294
            self.match(PlSqlParser.LOCAL)
            self.state = 9301
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [88]:
                self.state = 9295
                self.match(PlSqlParser.AUTOALLOCATE)
                pass
            elif token in [2089]:
                self.state = 9296
                self.match(PlSqlParser.UNIFORM)
                self.state = 9299
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1617:
                    self.state = 9297
                    self.match(PlSqlParser.SIZE)
                    self.state = 9298
                    self.size_clause()


                pass
            elif token in [-1, 65, 118, 140, 185, 283, 335, 368, 404, 467, 472, 521, 554, 565, 576, 830, 832, 868, 871, 872, 873, 874, 900, 947, 1003, 1057, 1177, 1190, 1480, 1505, 1567, 1590, 1622, 1706, 1716, 2087, 2137, 2144, 2348, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Segment_management_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def SPACE_KEYWORD(self):
            return self.getToken(PlSqlParser.SPACE_KEYWORD, 0)

        def MANAGEMENT(self):
            return self.getToken(PlSqlParser.MANAGEMENT, 0)

        def AUTO(self):
            return self.getToken(PlSqlParser.AUTO, 0)

        def MANUAL(self):
            return self.getToken(PlSqlParser.MANUAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_segment_management_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSegment_management_clause" ):
                listener.enterSegment_management_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSegment_management_clause" ):
                listener.exitSegment_management_clause(self)




    def segment_management_clause(self):

        localctx = PlSqlParser.Segment_management_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 898, self.RULE_segment_management_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9303
            self.match(PlSqlParser.SEGMENT)
            self.state = 9304
            self.match(PlSqlParser.SPACE_KEYWORD)
            self.state = 9305
            self.match(PlSqlParser.MANAGEMENT)
            self.state = 9306
            _la = self._input.LA(1)
            if not(_la==89 or _la==856):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Temporary_tablespace_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tablespace_name = None # Id_expressionContext

        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def tempfile_specification(self):
            return self.getTypedRuleContext(PlSqlParser.Tempfile_specificationContext,0)


        def tablespace_group_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_group_clauseContext,0)


        def extent_management_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Extent_management_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_temporary_tablespace_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTemporary_tablespace_clause" ):
                listener.enterTemporary_tablespace_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTemporary_tablespace_clause" ):
                listener.exitTemporary_tablespace_clause(self)




    def temporary_tablespace_clause(self):

        localctx = PlSqlParser.Temporary_tablespace_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 900, self.RULE_temporary_tablespace_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9308
            self.match(PlSqlParser.TEMPORARY)
            self.state = 9309
            self.match(PlSqlParser.TABLESPACE)
            self.state = 9310
            localctx.tablespace_name = self.id_expression()
            self.state = 9314
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 9311
                self.match(PlSqlParser.IF)
                self.state = 9312
                self.match(PlSqlParser.NOT)
                self.state = 9313
                self.match(PlSqlParser.EXISTS)


            self.state = 9317
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2005:
                self.state = 9316
                self.tempfile_specification()


            self.state = 9320
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1996:
                self.state = 9319
                self.tablespace_group_clause()


            self.state = 9323
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==521:
                self.state = 9322
                self.extent_management_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Undo_tablespace_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tablespace_name = None # Id_expressionContext

        def UNDO(self):
            return self.getToken(PlSqlParser.UNDO, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def datafile_specification(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_specificationContext,0)


        def extent_management_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Extent_management_clauseContext,0)


        def tablespace_retention_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_retention_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_undo_tablespace_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUndo_tablespace_clause" ):
                listener.enterUndo_tablespace_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUndo_tablespace_clause" ):
                listener.exitUndo_tablespace_clause(self)




    def undo_tablespace_clause(self):

        localctx = PlSqlParser.Undo_tablespace_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 902, self.RULE_undo_tablespace_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9325
            self.match(PlSqlParser.UNDO)
            self.state = 9326
            self.match(PlSqlParser.TABLESPACE)
            self.state = 9327
            localctx.tablespace_name = self.id_expression()
            self.state = 9331
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 9328
                self.match(PlSqlParser.IF)
                self.state = 9329
                self.match(PlSqlParser.NOT)
                self.state = 9330
                self.match(PlSqlParser.EXISTS)


            self.state = 9334
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==335:
                self.state = 9333
                self.datafile_specification()


            self.state = 9337
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==521:
                self.state = 9336
                self.extent_management_clause()


            self.state = 9340
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1505:
                self.state = 9339
                self.tablespace_retention_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_retention_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETENTION(self):
            return self.getToken(PlSqlParser.RETENTION, 0)

        def GUARANTEE(self):
            return self.getToken(PlSqlParser.GUARANTEE, 0)

        def NOGUARANTEE(self):
            return self.getToken(PlSqlParser.NOGUARANTEE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_retention_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_retention_clause" ):
                listener.enterTablespace_retention_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_retention_clause" ):
                listener.exitTablespace_retention_clause(self)




    def tablespace_retention_clause(self):

        localctx = PlSqlParser.Tablespace_retention_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 904, self.RULE_tablespace_retention_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9342
            self.match(PlSqlParser.RETENTION)
            self.state = 9343
            _la = self._input.LA(1)
            if not(_la==615 or _la==1048):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_tablespace_setContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tss = None # Id_expressionContext
            self.ss = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def SHARDSPACE(self):
            return self.getToken(PlSqlParser.SHARDSPACE, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def TEMPLATE(self):
            return self.getToken(PlSqlParser.TEMPLATE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def file_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.File_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.File_specificationContext,i)


        def permanent_tablespace_attrs(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Permanent_tablespace_attrsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Permanent_tablespace_attrsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_tablespace_set

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_tablespace_set" ):
                listener.enterCreate_tablespace_set(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_tablespace_set" ):
                listener.exitCreate_tablespace_set(self)




    def create_tablespace_set(self):

        localctx = PlSqlParser.Create_tablespace_setContext(self, self._ctx, self.state)
        self.enterRule(localctx, 906, self.RULE_create_tablespace_set)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9345
            self.match(PlSqlParser.CREATE)
            self.state = 9346
            self.match(PlSqlParser.TABLESPACE)
            self.state = 9347
            self.match(PlSqlParser.SET)
            self.state = 9348
            localctx.tss = self.id_expression()
            self.state = 9352
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==696:
                self.state = 9349
                self.match(PlSqlParser.IN)
                self.state = 9350
                self.match(PlSqlParser.SHARDSPACE)
                self.state = 9351
                localctx.ss = self.id_expression()


            self.state = 9375
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 9354
                self.match(PlSqlParser.USING)
                self.state = 9355
                self.match(PlSqlParser.TEMPLATE)
                self.state = 9356
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9366
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==335:
                    self.state = 9357
                    self.match(PlSqlParser.DATAFILE)
                    self.state = 9358
                    self.file_specification()
                    self.state = 9363
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 9359
                        self.match(PlSqlParser.COMMA)
                        self.state = 9360
                        self.file_specification()
                        self.state = 9365
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                self.state = 9369 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 9368
                    self.permanent_tablespace_attrs()
                    self.state = 9371 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==140 or _la==368 or _la==404 or ((((_la - 467)) & ~0x3f) == 0 and ((1 << (_la - 467)) & 18014398509482017) != 0) or ((((_la - 554)) & ~0x3f) == 0 and ((1 << (_la - 554)) & 4196353) != 0) or _la==832 or _la==900 or _la==1057 or _la==1177 or _la==1190 or _la==1480 or _la==1567 or _la==1706):
                        break

                self.state = 9373
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Permanent_tablespace_attrsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MINIMUM(self):
            return self.getToken(PlSqlParser.MINIMUM, 0)

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def BLOCKSIZE(self):
            return self.getToken(PlSqlParser.BLOCKSIZE, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def K_LETTER(self):
            return self.getToken(PlSqlParser.K_LETTER, 0)

        def logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def tablespace_encryption_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_encryption_clauseContext,0)


        def default_tablespace_params(self):
            return self.getTypedRuleContext(PlSqlParser.Default_tablespace_paramsContext,0)


        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def extent_management_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Extent_management_clauseContext,0)


        def segment_management_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_management_clauseContext,0)


        def flashback_mode_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_mode_clauseContext,0)


        def lost_write_protection(self):
            return self.getTypedRuleContext(PlSqlParser.Lost_write_protectionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_permanent_tablespace_attrs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPermanent_tablespace_attrs" ):
                listener.enterPermanent_tablespace_attrs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPermanent_tablespace_attrs" ):
                listener.exitPermanent_tablespace_attrs(self)




    def permanent_tablespace_attrs(self):

        localctx = PlSqlParser.Permanent_tablespace_attrsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 908, self.RULE_permanent_tablespace_attrs)
        self._la = 0 # Token type
        try:
            self.state = 9396
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [900]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9377
                self.match(PlSqlParser.MINIMUM)
                self.state = 9378
                self.match(PlSqlParser.EXTENT)
                self.state = 9379
                self.size_clause()
                pass
            elif token in [140]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9380
                self.match(PlSqlParser.BLOCKSIZE)
                self.state = 9381
                self.numeric()
                self.state = 9383
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==766:
                    self.state = 9382
                    self.match(PlSqlParser.K_LETTER)


                pass
            elif token in [554, 832, 1057]:
                self.enterOuterAlt(localctx, 3)
                self.state = 9385
                self.logging_clause()
                pass
            elif token in [576]:
                self.enterOuterAlt(localctx, 4)
                self.state = 9386
                self.match(PlSqlParser.FORCE)
                self.state = 9387
                self.match(PlSqlParser.LOGGING)
                pass
            elif token in [472]:
                self.enterOuterAlt(localctx, 5)
                self.state = 9388
                self.tablespace_encryption_clause()
                pass
            elif token in [368]:
                self.enterOuterAlt(localctx, 6)
                self.state = 9389
                self.default_tablespace_params()
                pass
            elif token in [1190]:
                self.enterOuterAlt(localctx, 7)
                self.state = 9390
                self.match(PlSqlParser.ONLINE)
                pass
            elif token in [1177]:
                self.enterOuterAlt(localctx, 8)
                self.state = 9391
                self.match(PlSqlParser.OFFLINE)
                pass
            elif token in [521]:
                self.enterOuterAlt(localctx, 9)
                self.state = 9392
                self.extent_management_clause()
                pass
            elif token in [1567]:
                self.enterOuterAlt(localctx, 10)
                self.state = 9393
                self.segment_management_clause()
                pass
            elif token in [565]:
                self.enterOuterAlt(localctx, 11)
                self.state = 9394
                self.flashback_mode_clause()
                pass
            elif token in [404, 467, 1480, 1706]:
                self.enterOuterAlt(localctx, 12)
                self.state = 9395
                self.lost_write_protection()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_encryption_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def DECRYPT(self):
            return self.getToken(PlSqlParser.DECRYPT, 0)

        def tablespace_encryption_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_encryption_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_encryption_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_encryption_clause" ):
                listener.enterTablespace_encryption_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_encryption_clause" ):
                listener.exitTablespace_encryption_clause(self)




    def tablespace_encryption_clause(self):

        localctx = PlSqlParser.Tablespace_encryption_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 910, self.RULE_tablespace_encryption_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9398
            self.match(PlSqlParser.ENCRYPTION)
            self.state = 9404
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [471, 2153]:
                self.state = 9400
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 9399
                    self.tablespace_encryption_spec()


                self.state = 9402
                self.match(PlSqlParser.ENCRYPT)
                pass
            elif token in [366]:
                self.state = 9403
                self.match(PlSqlParser.DECRYPT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_tablespace_paramsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def default_table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Default_table_compressionContext,0)


        def default_index_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Default_index_compressionContext,0)


        def inmmemory_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Inmmemory_clauseContext,0)


        def ilm_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_clauseContext,0)


        def storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_default_tablespace_params

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_tablespace_params" ):
                listener.enterDefault_tablespace_params(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_tablespace_params" ):
                listener.exitDefault_tablespace_params(self)




    def default_tablespace_params(self):

        localctx = PlSqlParser.Default_tablespace_paramsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 912, self.RULE_default_tablespace_params)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9406
            self.match(PlSqlParser.DEFAULT)
            self.state = 9408
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1999:
                self.state = 9407
                self.default_table_compression()


            self.state = 9411
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==675:
                self.state = 9410
                self.default_index_compression()


            self.state = 9414
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==704 or _la==1074:
                self.state = 9413
                self.inmmemory_clause()


            self.state = 9417
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==655:
                self.state = 9416
                self.ilm_clause()


            self.state = 9420
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1678:
                self.state = 9419
                self.storage_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_table_compressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def COMPRESS(self):
            return self.getToken(PlSqlParser.COMPRESS, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def NOCOMPRESS(self):
            return self.getToken(PlSqlParser.NOCOMPRESS, 0)

        def OLTP(self):
            return self.getToken(PlSqlParser.OLTP, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def low_high(self):
            return self.getTypedRuleContext(PlSqlParser.Low_highContext,0)


        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_table_compression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_table_compression" ):
                listener.enterDefault_table_compression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_table_compression" ):
                listener.exitDefault_table_compression(self)




    def default_table_compression(self):

        localctx = PlSqlParser.Default_table_compressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 914, self.RULE_default_table_compression)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9422
            self.match(PlSqlParser.TABLE)
            self.state = 9433
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [246]:
                self.state = 9423
                self.match(PlSqlParser.COMPRESS)
                self.state = 9424
                self.match(PlSqlParser.FOR)
                self.state = 9430
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1187]:
                    self.state = 9425
                    self.match(PlSqlParser.OLTP)
                    pass
                elif token in [1409]:
                    self.state = 9426
                    self.match(PlSqlParser.QUERY)
                    self.state = 9427
                    self.low_high()
                    pass
                elif token in [63]:
                    self.state = 9428
                    self.match(PlSqlParser.ARCHIVE)
                    self.state = 9429
                    self.low_high()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [1017]:
                self.state = 9432
                self.match(PlSqlParser.NOCOMPRESS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Low_highContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_low_high

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLow_high" ):
                listener.enterLow_high(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLow_high" ):
                listener.exitLow_high(self)




    def low_high(self):

        localctx = PlSqlParser.Low_highContext(self, self._ctx, self.state)
        self.enterRule(localctx, 916, self.RULE_low_high)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9435
            _la = self._input.LA(1)
            if not(_la==634 or _la==845):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_index_compressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def COMPRESS(self):
            return self.getToken(PlSqlParser.COMPRESS, 0)

        def ADVANCED(self):
            return self.getToken(PlSqlParser.ADVANCED, 0)

        def low_high(self):
            return self.getTypedRuleContext(PlSqlParser.Low_highContext,0)


        def NOCOMPRESS(self):
            return self.getToken(PlSqlParser.NOCOMPRESS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_index_compression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_index_compression" ):
                listener.enterDefault_index_compression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_index_compression" ):
                listener.exitDefault_index_compression(self)




    def default_index_compression(self):

        localctx = PlSqlParser.Default_index_compressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 918, self.RULE_default_index_compression)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9437
            self.match(PlSqlParser.INDEX)
            self.state = 9442
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [246]:
                self.state = 9438
                self.match(PlSqlParser.COMPRESS)
                self.state = 9439
                self.match(PlSqlParser.ADVANCED)
                self.state = 9440
                self.low_high()
                pass
            elif token in [1017]:
                self.state = 9441
                self.match(PlSqlParser.NOCOMPRESS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmmemory_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def inmemory_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_attributesContext,0)


        def TEXT(self):
            return self.getToken(PlSqlParser.TEXT, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def USING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USING)
            else:
                return self.getToken(PlSqlParser.USING, i)

        def policy_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Policy_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Policy_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inmmemory_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmmemory_clause" ):
                listener.enterInmmemory_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmmemory_clause" ):
                listener.exitInmmemory_clause(self)




    def inmmemory_clause(self):

        localctx = PlSqlParser.Inmmemory_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 920, self.RULE_inmmemory_clause)
        self._la = 0 # Token type
        try:
            self.state = 9476
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [704]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9444
                self.match(PlSqlParser.INMEMORY)
                self.state = 9446
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==420 or _la==444 or _la==887 or _la==1074 or _la==1378:
                    self.state = 9445
                    self.inmemory_attributes()


                self.state = 9472
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2010:
                    self.state = 9448
                    self.match(PlSqlParser.TEXT)
                    self.state = 9470
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1076,self._ctx)
                    if la_ == 1:
                        self.state = 9449
                        self.column_name()
                        self.state = 9454
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 9450
                            self.match(PlSqlParser.COMMA)
                            self.state = 9451
                            self.column_name()
                            self.state = 9456
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass

                    elif la_ == 2:
                        self.state = 9457
                        self.column_name()
                        self.state = 9458
                        self.match(PlSqlParser.USING)
                        self.state = 9459
                        self.policy_name()
                        self.state = 9467
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 9460
                            self.match(PlSqlParser.COMMA)
                            self.state = 9461
                            self.column_name()
                            self.state = 9462
                            self.match(PlSqlParser.USING)
                            self.state = 9463
                            self.policy_name()
                            self.state = 9469
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass




                pass
            elif token in [1074]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9474
                self.match(PlSqlParser.NO)
                self.state = 9475
                self.match(PlSqlParser.INMEMORY)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Datafile_specificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def datafile_tempfile_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_specContext,0)


        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_datafile_specification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatafile_specification" ):
                listener.enterDatafile_specification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatafile_specification" ):
                listener.exitDatafile_specification(self)




    def datafile_specification(self):

        localctx = PlSqlParser.Datafile_specificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 922, self.RULE_datafile_specification)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9478
            self.match(PlSqlParser.DATAFILE)

            self.state = 9480
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2353:
                self.state = 9479
                self.match(PlSqlParser.COMMA)


            self.state = 9482
            self.datafile_tempfile_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tempfile_specificationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TEMPFILE(self):
            return self.getToken(PlSqlParser.TEMPFILE, 0)

        def datafile_tempfile_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_specContext,0)


        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_tempfile_specification

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTempfile_specification" ):
                listener.enterTempfile_specification(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTempfile_specification" ):
                listener.exitTempfile_specification(self)




    def tempfile_specification(self):

        localctx = PlSqlParser.Tempfile_specificationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 924, self.RULE_tempfile_specification)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9484
            self.match(PlSqlParser.TEMPFILE)

            self.state = 9486
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2353:
                self.state = 9485
                self.match(PlSqlParser.COMMA)


            self.state = 9488
            self.datafile_tempfile_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Datafile_tempfile_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_datafile_tempfile_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatafile_tempfile_spec" ):
                listener.enterDatafile_tempfile_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatafile_tempfile_spec" ):
                listener.exitDatafile_tempfile_spec(self)




    def datafile_tempfile_spec(self):

        localctx = PlSqlParser.Datafile_tempfile_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 926, self.RULE_datafile_tempfile_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9491
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2343:
                self.state = 9490
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 9495
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1617:
                self.state = 9493
                self.match(PlSqlParser.SIZE)
                self.state = 9494
                self.size_clause()


            self.state = 9498
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 9497
                self.match(PlSqlParser.REUSE)


            self.state = 9501
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==91:
                self.state = 9500
                self.autoextend_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Redo_log_file_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def BLOCKSIZE(self):
            return self.getToken(PlSqlParser.BLOCKSIZE, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_redo_log_file_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRedo_log_file_spec" ):
                listener.enterRedo_log_file_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRedo_log_file_spec" ):
                listener.exitRedo_log_file_spec(self)




    def redo_log_file_spec(self):

        localctx = PlSqlParser.Redo_log_file_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 928, self.RULE_redo_log_file_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9515
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2343]:
                self.state = 9503
                self.filename()
                pass
            elif token in [2347]:
                self.state = 9504
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9505
                self.filename()
                self.state = 9510
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9506
                    self.match(PlSqlParser.COMMA)
                    self.state = 9507
                    self.filename()
                    self.state = 9512
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9513
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 9519
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1617:
                self.state = 9517
                self.match(PlSqlParser.SIZE)
                self.state = 9518
                self.size_clause()


            self.state = 9523
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1088,self._ctx)
            if la_ == 1:
                self.state = 9521
                self.match(PlSqlParser.BLOCKSIZE)
                self.state = 9522
                self.size_clause()


            self.state = 9526
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 9525
                self.match(PlSqlParser.REUSE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Autoextend_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AUTOEXTEND(self):
            return self.getToken(PlSqlParser.AUTOEXTEND, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def NEXT(self):
            return self.getToken(PlSqlParser.NEXT, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def maxsize_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Maxsize_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_autoextend_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAutoextend_clause" ):
                listener.enterAutoextend_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAutoextend_clause" ):
                listener.exitAutoextend_clause(self)




    def autoextend_clause(self):

        localctx = PlSqlParser.Autoextend_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 930, self.RULE_autoextend_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9528
            self.match(PlSqlParser.AUTOEXTEND)
            self.state = 9538
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1178]:
                self.state = 9529
                self.match(PlSqlParser.OFF)
                pass
            elif token in [1193]:
                self.state = 9530
                self.match(PlSqlParser.ON)
                self.state = 9533
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==970:
                    self.state = 9531
                    self.match(PlSqlParser.NEXT)
                    self.state = 9532
                    self.size_clause()


                self.state = 9536
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==876:
                    self.state = 9535
                    self.maxsize_clause()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Maxsize_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MAXSIZE(self):
            return self.getToken(PlSqlParser.MAXSIZE, 0)

        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_maxsize_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMaxsize_clause" ):
                listener.enterMaxsize_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMaxsize_clause" ):
                listener.exitMaxsize_clause(self)




    def maxsize_clause(self):

        localctx = PlSqlParser.Maxsize_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 932, self.RULE_maxsize_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9540
            self.match(PlSqlParser.MAXSIZE)
            self.state = 9543
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2093]:
                self.state = 9541
                self.match(PlSqlParser.UNLIMITED)
                pass
            elif token in [2341]:
                self.state = 9542
                self.size_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Build_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BUILD(self):
            return self.getToken(PlSqlParser.BUILD, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def DEFERRED(self):
            return self.getToken(PlSqlParser.DEFERRED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_build_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBuild_clause" ):
                listener.enterBuild_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBuild_clause" ):
                listener.exitBuild_clause(self)




    def build_clause(self):

        localctx = PlSqlParser.Build_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 934, self.RULE_build_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9545
            self.match(PlSqlParser.BUILD)
            self.state = 9546
            _la = self._input.LA(1)
            if not(_la==373 or _la==656):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Parallel_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.parallel_count = None # Token

        def NOPARALLEL(self):
            return self.getToken(PlSqlParser.NOPARALLEL, 0)

        def PARALLEL(self):
            return self.getToken(PlSqlParser.PARALLEL, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_parallel_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParallel_clause" ):
                listener.enterParallel_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParallel_clause" ):
                listener.exitParallel_clause(self)




    def parallel_clause(self):

        localctx = PlSqlParser.Parallel_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 936, self.RULE_parallel_clause)
        self._la = 0 # Token type
        try:
            self.state = 9553
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1085]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9548
                self.match(PlSqlParser.NOPARALLEL)
                pass
            elif token in [1261]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9549
                self.match(PlSqlParser.PARALLEL)
                self.state = 9551
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2341:
                    self.state = 9550
                    localctx.parallel_count = self.match(PlSqlParser.UNSIGNED_INTEGER)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_materialized_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def modify_mv_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_mv_column_clauseContext,0)


        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def lob_storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_storage_clauseContext,i)


        def modify_lob_storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Modify_lob_storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Modify_lob_storage_clauseContext,i)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,0)


        def allocate_extent_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,0)


        def deallocate_unused_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,0)


        def shrink_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,0)


        def alter_iot_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_iot_clausesContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def alter_mv_option1(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_mv_option1Context,0)


        def enable_or_disable(self):
            return self.getTypedRuleContext(PlSqlParser.Enable_or_disableContext,0)


        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def REWRITE(self):
            return self.getToken(PlSqlParser.REWRITE, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def CONSIDER(self):
            return self.getToken(PlSqlParser.CONSIDER, 0)

        def FRESH(self):
            return self.getToken(PlSqlParser.FRESH, 0)

        def cache_or_nocache(self):
            return self.getTypedRuleContext(PlSqlParser.Cache_or_nocacheContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_materialized_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_materialized_view" ):
                listener.enterAlter_materialized_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_materialized_view" ):
                listener.exitAlter_materialized_view(self)




    def alter_materialized_view(self):

        localctx = PlSqlParser.Alter_materialized_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 938, self.RULE_alter_materialized_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9555
            self.match(PlSqlParser.ALTER)
            self.state = 9556
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 9557
            self.match(PlSqlParser.VIEW)
            self.state = 9558
            self.tableview_name()
            self.state = 9584
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1098,self._ctx)
            if la_ == 1:
                self.state = 9559
                self.physical_attributes_clause()

            elif la_ == 2:
                self.state = 9560
                self.modify_mv_column_clause()

            elif la_ == 3:
                self.state = 9561
                self.table_compression()

            elif la_ == 4:
                self.state = 9562
                self.lob_storage_clause()
                self.state = 9567
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9563
                    self.match(PlSqlParser.COMMA)
                    self.state = 9564
                    self.lob_storage_clause()
                    self.state = 9569
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)


            elif la_ == 5:
                self.state = 9570
                self.modify_lob_storage_clause()
                self.state = 9575
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9571
                    self.match(PlSqlParser.COMMA)
                    self.state = 9572
                    self.modify_lob_storage_clause()
                    self.state = 9577
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)


            elif la_ == 6:
                self.state = 9578
                self.parallel_clause()

            elif la_ == 7:
                self.state = 9579
                self.logging_clause()

            elif la_ == 8:
                self.state = 9580
                self.allocate_extent_clause()

            elif la_ == 9:
                self.state = 9581
                self.deallocate_unused_clause()

            elif la_ == 10:
                self.state = 9582
                self.shrink_clause()

            elif la_ == 11:
                self.state = 9583
                self.cache_or_nocache()


            self.state = 9587
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21 or _la==218 or _la==246 or _la==663 or _la==858 or _la==1017 or _la==1058 or _la==1249 or _la==1298:
                self.state = 9586
                self.alter_iot_clauses()


            self.state = 9592
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 9589
                self.match(PlSqlParser.USING)
                self.state = 9590
                self.match(PlSqlParser.INDEX)
                self.state = 9591
                self.physical_attributes_clause()


            self.state = 9595
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1453:
                self.state = 9594
                self.alter_mv_option1()


            self.state = 9604
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [404, 467]:
                self.state = 9597
                self.enable_or_disable()
                self.state = 9598
                self.match(PlSqlParser.QUERY)
                self.state = 9599
                self.match(PlSqlParser.REWRITE)
                pass
            elif token in [237]:
                self.state = 9601
                self.match(PlSqlParser.COMPILE)
                pass
            elif token in [267]:
                self.state = 9602
                self.match(PlSqlParser.CONSIDER)
                self.state = 9603
                self.match(PlSqlParser.FRESH)
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_mv_option1Context(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def alter_mv_refresh(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_mv_refreshContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_mv_option1

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_mv_option1" ):
                listener.enterAlter_mv_option1(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_mv_option1" ):
                listener.exitAlter_mv_option1(self)




    def alter_mv_option1(self):

        localctx = PlSqlParser.Alter_mv_option1Context(self, self._ctx, self.state)
        self.enterRule(localctx, 940, self.RULE_alter_mv_option1)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9606
            self.alter_mv_refresh()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_mv_refreshContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REFRESH(self):
            return self.getToken(PlSqlParser.REFRESH, 0)

        def FAST(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FAST)
            else:
                return self.getToken(PlSqlParser.FAST, i)

        def COMPLETE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMPLETE)
            else:
                return self.getToken(PlSqlParser.COMPLETE, i)

        def FORCE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FORCE)
            else:
                return self.getToken(PlSqlParser.FORCE, i)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def START(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.START)
            else:
                return self.getToken(PlSqlParser.START, i)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def NEXT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NEXT)
            else:
                return self.getToken(PlSqlParser.NEXT, i)

        def PRIMARY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIMARY)
            else:
                return self.getToken(PlSqlParser.PRIMARY, i)

        def KEY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEY)
            else:
                return self.getToken(PlSqlParser.KEY, i)

        def USING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USING)
            else:
                return self.getToken(PlSqlParser.USING, i)

        def MASTER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MASTER)
            else:
                return self.getToken(PlSqlParser.MASTER, i)

        def ROLLBACK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROLLBACK)
            else:
                return self.getToken(PlSqlParser.ROLLBACK, i)

        def SEGMENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEGMENT)
            else:
                return self.getToken(PlSqlParser.SEGMENT, i)

        def CONSTRAINTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONSTRAINTS)
            else:
                return self.getToken(PlSqlParser.CONSTRAINTS, i)

        def DEMAND(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEMAND)
            else:
                return self.getToken(PlSqlParser.DEMAND, i)

        def COMMIT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMIT)
            else:
                return self.getToken(PlSqlParser.COMMIT, i)

        def ENFORCED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENFORCED)
            else:
                return self.getToken(PlSqlParser.ENFORCED, i)

        def TRUSTED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TRUSTED)
            else:
                return self.getToken(PlSqlParser.TRUSTED, i)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def rollback_segment(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Rollback_segmentContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Rollback_segmentContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_mv_refresh

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_mv_refresh" ):
                listener.enterAlter_mv_refresh(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_mv_refresh" ):
                listener.exitAlter_mv_refresh(self)




    def alter_mv_refresh(self):

        localctx = PlSqlParser.Alter_mv_refreshContext(self, self._ctx, self.state)
        self.enterRule(localctx, 942, self.RULE_alter_mv_refresh)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9608
            self.match(PlSqlParser.REFRESH)
            self.state = 9635 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 9635
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1105,self._ctx)
                if la_ == 1:
                    self.state = 9609
                    self.match(PlSqlParser.FAST)
                    pass

                elif la_ == 2:
                    self.state = 9610
                    self.match(PlSqlParser.COMPLETE)
                    pass

                elif la_ == 3:
                    self.state = 9611
                    self.match(PlSqlParser.FORCE)
                    pass

                elif la_ == 4:
                    self.state = 9612
                    self.match(PlSqlParser.ON)
                    self.state = 9613
                    _la = self._input.LA(1)
                    if not(_la==231 or _la==383):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass

                elif la_ == 5:
                    self.state = 9614
                    self.match(PlSqlParser.START)
                    self.state = 9615
                    self.match(PlSqlParser.WITH)
                    self.state = 9616
                    self.expression()
                    pass

                elif la_ == 6:
                    self.state = 9617
                    self.match(PlSqlParser.NEXT)
                    self.state = 9618
                    self.expression()
                    pass

                elif la_ == 7:
                    self.state = 9619
                    self.match(PlSqlParser.WITH)
                    self.state = 9620
                    self.match(PlSqlParser.PRIMARY)
                    self.state = 9621
                    self.match(PlSqlParser.KEY)
                    pass

                elif la_ == 8:
                    self.state = 9622
                    self.match(PlSqlParser.USING)
                    self.state = 9624
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==368:
                        self.state = 9623
                        self.match(PlSqlParser.DEFAULT)


                    self.state = 9626
                    self.match(PlSqlParser.MASTER)
                    self.state = 9627
                    self.match(PlSqlParser.ROLLBACK)
                    self.state = 9628
                    self.match(PlSqlParser.SEGMENT)
                    self.state = 9630
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1104,self._ctx)
                    if la_ == 1:
                        self.state = 9629
                        self.rollback_segment()


                    pass

                elif la_ == 9:
                    self.state = 9632
                    self.match(PlSqlParser.USING)
                    self.state = 9633
                    _la = self._input.LA(1)
                    if not(_la==475 or _la==2071):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 9634
                    self.match(PlSqlParser.CONSTRAINTS)
                    pass


                self.state = 9637 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==238 or _la==541 or _la==576 or _la==970 or _la==1193 or _la==1654 or _la==2153 or _la==2212):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rollback_segmentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_rollback_segment

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRollback_segment" ):
                listener.enterRollback_segment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRollback_segment" ):
                listener.exitRollback_segment(self)




    def rollback_segment(self):

        localctx = PlSqlParser.Rollback_segmentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 944, self.RULE_rollback_segment)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9639
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_mv_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def encryption_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Encryption_specContext,0)


        def DECRYPT(self):
            return self.getToken(PlSqlParser.DECRYPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_mv_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_mv_column_clause" ):
                listener.enterModify_mv_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_mv_column_clause" ):
                listener.exitModify_mv_column_clause(self)




    def modify_mv_column_clause(self):

        localctx = PlSqlParser.Modify_mv_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 946, self.RULE_modify_mv_column_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9641
            self.match(PlSqlParser.MODIFY)
            self.state = 9642
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 9643
            self.column_name()
            self.state = 9647
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [471]:
                self.state = 9644
                self.match(PlSqlParser.ENCRYPT)
                self.state = 9645
                self.encryption_spec()
                pass
            elif token in [366]:
                self.state = 9646
                self.match(PlSqlParser.DECRYPT)
                pass
            elif token in [2348]:
                pass
            else:
                pass
            self.state = 9649
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_materialized_view_logContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def LOG(self):
            return self.getToken(PlSqlParser.LOG, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def physical_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,0)


        def add_mv_log_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Add_mv_log_column_clauseContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,0)


        def allocate_extent_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,0)


        def shrink_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,0)


        def move_mv_log_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Move_mv_log_clauseContext,0)


        def cache_or_nocache(self):
            return self.getTypedRuleContext(PlSqlParser.Cache_or_nocacheContext,0)


        def mv_log_augmentation(self):
            return self.getTypedRuleContext(PlSqlParser.Mv_log_augmentationContext,0)


        def mv_log_purge_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Mv_log_purge_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_materialized_view_log

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_materialized_view_log" ):
                listener.enterAlter_materialized_view_log(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_materialized_view_log" ):
                listener.exitAlter_materialized_view_log(self)




    def alter_materialized_view_log(self):

        localctx = PlSqlParser.Alter_materialized_view_logContext(self, self._ctx, self.state)
        self.enterRule(localctx, 948, self.RULE_alter_materialized_view_log)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9651
            self.match(PlSqlParser.ALTER)
            self.state = 9652
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 9653
            self.match(PlSqlParser.VIEW)
            self.state = 9654
            self.match(PlSqlParser.LOG)
            self.state = 9656
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 9655
                self.match(PlSqlParser.FORCE)


            self.state = 9658
            self.match(PlSqlParser.ON)
            self.state = 9659
            self.tableview_name()
            self.state = 9668
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1109,self._ctx)
            if la_ == 1:
                self.state = 9660
                self.physical_attributes_clause()

            elif la_ == 2:
                self.state = 9661
                self.add_mv_log_column_clause()

            elif la_ == 3:
                self.state = 9662
                self.parallel_clause()

            elif la_ == 4:
                self.state = 9663
                self.logging_clause()

            elif la_ == 5:
                self.state = 9664
                self.allocate_extent_clause()

            elif la_ == 6:
                self.state = 9665
                self.shrink_clause()

            elif la_ == 7:
                self.state = 9666
                self.move_mv_log_clause()

            elif la_ == 8:
                self.state = 9667
                self.cache_or_nocache()


            self.state = 9671
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21:
                self.state = 9670
                self.mv_log_augmentation()


            self.state = 9674
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1400:
                self.state = 9673
                self.mv_log_purge_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_mv_log_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_mv_log_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_mv_log_column_clause" ):
                listener.enterAdd_mv_log_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_mv_log_column_clause" ):
                listener.exitAdd_mv_log_column_clause(self)




    def add_mv_log_column_clause(self):

        localctx = PlSqlParser.Add_mv_log_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 950, self.RULE_add_mv_log_column_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9676
            self.match(PlSqlParser.ADD)
            self.state = 9677
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 9678
            self.column_name()
            self.state = 9679
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Move_mv_log_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def segment_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_move_mv_log_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMove_mv_log_clause" ):
                listener.enterMove_mv_log_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMove_mv_log_clause" ):
                listener.exitMove_mv_log_clause(self)




    def move_mv_log_clause(self):

        localctx = PlSqlParser.Move_mv_log_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 952, self.RULE_move_mv_log_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9681
            self.match(PlSqlParser.MOVE)
            self.state = 9682
            self.segment_attributes_clause()
            self.state = 9684
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 9683
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Mv_log_augmentationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def new_values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.New_values_clauseContext,0)


        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def ID(self):
            return self.getToken(PlSqlParser.ID, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def ROWID(self):
            return self.getToken(PlSqlParser.ROWID, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_mv_log_augmentation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMv_log_augmentation" ):
                listener.enterMv_log_augmentation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMv_log_augmentation" ):
                listener.exitMv_log_augmentation(self)




    def mv_log_augmentation(self):

        localctx = PlSqlParser.Mv_log_augmentationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 954, self.RULE_mv_log_augmentation)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9686
            self.match(PlSqlParser.ADD)
            self.state = 9719
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1172, 1376, 1523, 1575]:
                self.state = 9693
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1172]:
                    self.state = 9687
                    self.match(PlSqlParser.OBJECT)
                    self.state = 9688
                    self.match(PlSqlParser.ID)
                    pass
                elif token in [1376]:
                    self.state = 9689
                    self.match(PlSqlParser.PRIMARY)
                    self.state = 9690
                    self.match(PlSqlParser.KEY)
                    pass
                elif token in [1523]:
                    self.state = 9691
                    self.match(PlSqlParser.ROWID)
                    pass
                elif token in [1575]:
                    self.state = 9692
                    self.match(PlSqlParser.SEQUENCE)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 9706
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 9695
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 9696
                    self.column_name()
                    self.state = 9701
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 9697
                        self.match(PlSqlParser.COMMA)
                        self.state = 9698
                        self.column_name()
                        self.state = 9703
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 9704
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [2347]:
                self.state = 9708
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9709
                self.column_name()
                self.state = 9714
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 9710
                    self.match(PlSqlParser.COMMA)
                    self.state = 9711
                    self.column_name()
                    self.state = 9716
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9717
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 9722
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==503 or _la==663:
                self.state = 9721
                self.new_values_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Datetime_exprContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_datetime_expr

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatetime_expr" ):
                listener.enterDatetime_expr(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatetime_expr" ):
                listener.exitDatetime_expr(self)




    def datetime_expr(self):

        localctx = PlSqlParser.Datetime_exprContext(self, self._ctx, self.state)
        self.enterRule(localctx, 956, self.RULE_datetime_expr)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9724
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Interval_exprContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_interval_expr

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInterval_expr" ):
                listener.enterInterval_expr(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInterval_expr" ):
                listener.exitInterval_expr(self)




    def interval_expr(self):

        localctx = PlSqlParser.Interval_exprContext(self, self._ctx, self.state)
        self.enterRule(localctx, 958, self.RULE_interval_expr)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9726
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Synchronous_or_asynchronousContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SYNCHRONOUS(self):
            return self.getToken(PlSqlParser.SYNCHRONOUS, 0)

        def ASYNCHRONOUS(self):
            return self.getToken(PlSqlParser.ASYNCHRONOUS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_synchronous_or_asynchronous

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSynchronous_or_asynchronous" ):
                listener.enterSynchronous_or_asynchronous(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSynchronous_or_asynchronous" ):
                listener.exitSynchronous_or_asynchronous(self)




    def synchronous_or_asynchronous(self):

        localctx = PlSqlParser.Synchronous_or_asynchronousContext(self, self._ctx, self.state)
        self.enterRule(localctx, 960, self.RULE_synchronous_or_asynchronous)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9728
            _la = self._input.LA(1)
            if not(_la==77 or _la==1710):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Including_or_excludingContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def EXCLUDING(self):
            return self.getToken(PlSqlParser.EXCLUDING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_including_or_excluding

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIncluding_or_excluding" ):
                listener.enterIncluding_or_excluding(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIncluding_or_excluding" ):
                listener.exitIncluding_or_excluding(self)




    def including_or_excluding(self):

        localctx = PlSqlParser.Including_or_excludingContext(self, self._ctx, self.state)
        self.enterRule(localctx, 962, self.RULE_including_or_excluding)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9730
            _la = self._input.LA(1)
            if not(_la==503 or _la==663):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_materialized_view_logContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tablespace_name = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def LOG(self):
            return self.getToken(PlSqlParser.LOG, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def mv_log_purge_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Mv_log_purge_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Mv_log_purge_clauseContext,i)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CACHE)
            else:
                return self.getToken(PlSqlParser.CACHE, i)

        def NOCACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOCACHE)
            else:
                return self.getToken(PlSqlParser.NOCACHE, i)

        def OBJECT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OBJECT)
            else:
                return self.getToken(PlSqlParser.OBJECT, i)

        def ID(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ID)
            else:
                return self.getToken(PlSqlParser.ID, i)

        def PRIMARY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIMARY)
            else:
                return self.getToken(PlSqlParser.PRIMARY, i)

        def KEY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEY)
            else:
                return self.getToken(PlSqlParser.KEY, i)

        def ROWID(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROWID)
            else:
                return self.getToken(PlSqlParser.ROWID, i)

        def SEQUENCE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEQUENCE)
            else:
                return self.getToken(PlSqlParser.SEQUENCE, i)

        def COMMIT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMIT)
            else:
                return self.getToken(PlSqlParser.COMMIT, i)

        def SCN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SCN)
            else:
                return self.getToken(PlSqlParser.SCN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def regular_id(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Regular_idContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Regular_idContext,i)


        def new_values_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.New_values_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.New_values_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_materialized_view_log

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_materialized_view_log" ):
                listener.enterCreate_materialized_view_log(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_materialized_view_log" ):
                listener.exitCreate_materialized_view_log(self)




    def create_materialized_view_log(self):

        localctx = PlSqlParser.Create_materialized_view_logContext(self, self._ctx, self.state)
        self.enterRule(localctx, 964, self.RULE_create_materialized_view_log)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9732
            self.match(PlSqlParser.CREATE)
            self.state = 9733
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 9734
            self.match(PlSqlParser.VIEW)
            self.state = 9735
            self.match(PlSqlParser.LOG)
            self.state = 9736
            self.match(PlSqlParser.ON)
            self.state = 9737
            self.tableview_name()
            self.state = 9747
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==158 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1010 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                self.state = 9743 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 9743
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [247, 701, 877, 1296, 1299, 1678]:
                        self.state = 9738
                        self.physical_attributes_clause()
                        pass
                    elif token in [1996]:
                        self.state = 9739
                        self.match(PlSqlParser.TABLESPACE)
                        self.state = 9740
                        localctx.tablespace_name = self.id_expression()
                        pass
                    elif token in [554, 832, 1057]:
                        self.state = 9741
                        self.logging_clause()
                        pass
                    elif token in [158, 1010]:
                        self.state = 9742
                        _la = self._input.LA(1)
                        if not(_la==158 or _la==1010):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 9745 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==158 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1010 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996):
                        break



            self.state = 9750
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 9749
                self.parallel_clause()


            self.state = 9791
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2212:
                self.state = 9752
                self.match(PlSqlParser.WITH)
                self.state = 9768
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==231 or _la==1172 or _la==1376 or _la==1523 or _la==1575 or _la==2353:
                    self.state = 9754
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 9753
                        self.match(PlSqlParser.COMMA)


                    self.state = 9764
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1172]:
                        self.state = 9756
                        self.match(PlSqlParser.OBJECT)
                        self.state = 9757
                        self.match(PlSqlParser.ID)
                        pass
                    elif token in [1376]:
                        self.state = 9758
                        self.match(PlSqlParser.PRIMARY)
                        self.state = 9759
                        self.match(PlSqlParser.KEY)
                        pass
                    elif token in [1523]:
                        self.state = 9760
                        self.match(PlSqlParser.ROWID)
                        pass
                    elif token in [1575]:
                        self.state = 9761
                        self.match(PlSqlParser.SEQUENCE)
                        pass
                    elif token in [231]:
                        self.state = 9762
                        self.match(PlSqlParser.COMMIT)
                        self.state = 9763
                        self.match(PlSqlParser.SCN)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 9770
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 9784
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 9771
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 9776 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 9773
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==2353:
                            self.state = 9772
                            self.match(PlSqlParser.COMMA)


                        self.state = 9775
                        self.regular_id()
                        self.state = 9778 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 281511483932671) != 0) or _la==2378):
                            break

                    self.state = 9780
                    self.match(PlSqlParser.RIGHT_PAREN)
                    self.state = 9782
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==503 or _la==663:
                        self.state = 9781
                        self.new_values_clause()




                self.state = 9787
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1400:
                    self.state = 9786
                    self.mv_log_purge_clause()


                self.state = 9793
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class New_values_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def EXCLUDING(self):
            return self.getToken(PlSqlParser.EXCLUDING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_new_values_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNew_values_clause" ):
                listener.enterNew_values_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNew_values_clause" ):
                listener.exitNew_values_clause(self)




    def new_values_clause(self):

        localctx = PlSqlParser.New_values_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 966, self.RULE_new_values_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9794
            _la = self._input.LA(1)
            if not(_la==503 or _la==663):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 9795
            self.match(PlSqlParser.NEW)
            self.state = 9796
            self.match(PlSqlParser.VALUES)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Mv_log_purge_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def SYNCHRONOUS(self):
            return self.getToken(PlSqlParser.SYNCHRONOUS, 0)

        def ASYNCHRONOUS(self):
            return self.getToken(PlSqlParser.ASYNCHRONOUS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_mv_log_purge_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMv_log_purge_clause" ):
                listener.enterMv_log_purge_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMv_log_purge_clause" ):
                listener.exitMv_log_purge_clause(self)




    def mv_log_purge_clause(self):

        localctx = PlSqlParser.Mv_log_purge_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 968, self.RULE_mv_log_purge_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9798
            self.match(PlSqlParser.PURGE)

            self.state = 9799
            self.match(PlSqlParser.IMMEDIATE)
            self.state = 9801
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==77 or _la==1710:
                self.state = 9800
                _la = self._input.LA(1)
                if not(_la==77 or _la==1710):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_materialized_zonemapContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def ZONEMAP(self):
            return self.getToken(PlSqlParser.ZONEMAP, 0)

        def zonemap_name(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_nameContext,0)


        def create_zonemap_on_table(self):
            return self.getTypedRuleContext(PlSqlParser.Create_zonemap_on_tableContext,0)


        def create_zonemap_as_subquery(self):
            return self.getTypedRuleContext(PlSqlParser.Create_zonemap_as_subqueryContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def zonemap_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_attributesContext,0)


        def zonemap_refresh_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_refresh_clauseContext,0)


        def PRUNING(self):
            return self.getToken(PlSqlParser.PRUNING, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_materialized_zonemap

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_materialized_zonemap" ):
                listener.enterCreate_materialized_zonemap(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_materialized_zonemap" ):
                listener.exitCreate_materialized_zonemap(self)




    def create_materialized_zonemap(self):

        localctx = PlSqlParser.Create_materialized_zonemapContext(self, self._ctx, self.state)
        self.enterRule(localctx, 970, self.RULE_create_materialized_zonemap)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9803
            self.match(PlSqlParser.CREATE)
            self.state = 9804
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 9805
            self.match(PlSqlParser.ZONEMAP)
            self.state = 9806
            self.zonemap_name()
            self.state = 9811
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 9807
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 9808
                self.column_list()
                self.state = 9809
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 9814
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==158 or _la==1010 or _la==1296 or _la==1299 or _la==1542 or _la==1996:
                self.state = 9813
                self.zonemap_attributes()


            self.state = 9817
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1453:
                self.state = 9816
                self.zonemap_refresh_clause()


            self.state = 9821
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 9819
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 9820
                self.match(PlSqlParser.PRUNING)


            self.state = 9825
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1193]:
                self.state = 9823
                self.create_zonemap_on_table()
                pass
            elif token in [67]:
                self.state = 9824
                self.create_zonemap_as_subquery()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_materialized_zonemapContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def ZONEMAP(self):
            return self.getToken(PlSqlParser.ZONEMAP, 0)

        def zonemap_name(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_nameContext,0)


        def zonemap_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_attributesContext,0)


        def zonemap_refresh_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_refresh_clauseContext,0)


        def PRUNING(self):
            return self.getToken(PlSqlParser.PRUNING, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def REBUILD(self):
            return self.getToken(PlSqlParser.REBUILD, 0)

        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_materialized_zonemap

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_materialized_zonemap" ):
                listener.enterAlter_materialized_zonemap(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_materialized_zonemap" ):
                listener.exitAlter_materialized_zonemap(self)




    def alter_materialized_zonemap(self):

        localctx = PlSqlParser.Alter_materialized_zonemapContext(self, self._ctx, self.state)
        self.enterRule(localctx, 972, self.RULE_alter_materialized_zonemap)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9827
            self.match(PlSqlParser.ALTER)
            self.state = 9828
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 9829
            self.match(PlSqlParser.ZONEMAP)
            self.state = 9830
            self.zonemap_name()
            self.state = 9838
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [158, 1010, 1296, 1299, 1542, 1996]:
                self.state = 9831
                self.zonemap_attributes()
                pass
            elif token in [1453]:
                self.state = 9832
                self.zonemap_refresh_clause()
                pass
            elif token in [404, 467]:
                self.state = 9833
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 9834
                self.match(PlSqlParser.PRUNING)
                pass
            elif token in [237]:
                self.state = 9835
                self.match(PlSqlParser.COMPILE)
                pass
            elif token in [1434]:
                self.state = 9836
                self.match(PlSqlParser.REBUILD)
                pass
            elif token in [2110]:
                self.state = 9837
                self.match(PlSqlParser.UNUSABLE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_materialized_zonemapContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def ZONEMAP(self):
            return self.getToken(PlSqlParser.ZONEMAP, 0)

        def zonemap_name(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_materialized_zonemap

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_materialized_zonemap" ):
                listener.enterDrop_materialized_zonemap(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_materialized_zonemap" ):
                listener.exitDrop_materialized_zonemap(self)




    def drop_materialized_zonemap(self):

        localctx = PlSqlParser.Drop_materialized_zonemapContext(self, self._ctx, self.state)
        self.enterRule(localctx, 974, self.RULE_drop_materialized_zonemap)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9840
            self.match(PlSqlParser.DROP)
            self.state = 9841
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 9842
            self.match(PlSqlParser.ZONEMAP)
            self.state = 9843
            self.zonemap_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Zonemap_refresh_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REFRESH(self):
            return self.getToken(PlSqlParser.REFRESH, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def FAST(self):
            return self.getToken(PlSqlParser.FAST, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def DEMAND(self):
            return self.getToken(PlSqlParser.DEMAND, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def LOAD(self):
            return self.getToken(PlSqlParser.LOAD, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def MOVEMENT(self):
            return self.getToken(PlSqlParser.MOVEMENT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_zonemap_refresh_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterZonemap_refresh_clause" ):
                listener.enterZonemap_refresh_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitZonemap_refresh_clause" ):
                listener.exitZonemap_refresh_clause(self)




    def zonemap_refresh_clause(self):

        localctx = PlSqlParser.Zonemap_refresh_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 976, self.RULE_zonemap_refresh_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9845
            self.match(PlSqlParser.REFRESH)
            self.state = 9847
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==237 or _la==541 or _la==576:
                self.state = 9846
                _la = self._input.LA(1)
                if not(_la==237 or _la==541 or _la==576):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 9860
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1141,self._ctx)
            if la_ == 1:
                self.state = 9849
                self.match(PlSqlParser.ON)
                self.state = 9858
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1140,self._ctx)
                if la_ == 1:
                    self.state = 9850
                    self.match(PlSqlParser.DEMAND)
                    pass

                elif la_ == 2:
                    self.state = 9851
                    self.match(PlSqlParser.COMMIT)
                    pass

                elif la_ == 3:
                    self.state = 9852
                    self.match(PlSqlParser.LOAD)
                    pass

                elif la_ == 4:
                    self.state = 9853
                    self.match(PlSqlParser.DATA)
                    self.state = 9854
                    self.match(PlSqlParser.MOVEMENT)
                    pass

                elif la_ == 5:
                    self.state = 9855
                    self.match(PlSqlParser.LOAD)
                    self.state = 9856
                    self.match(PlSqlParser.DATA)
                    self.state = 9857
                    self.match(PlSqlParser.MOVEMENT)
                    pass




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Zonemap_attributesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PCTFREE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTFREE)
            else:
                return self.getToken(PlSqlParser.PCTFREE, i)

        def numeric(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.NumericContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.NumericContext,i)


        def PCTUSED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTUSED)
            else:
                return self.getToken(PlSqlParser.PCTUSED, i)

        def SCALE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SCALE)
            else:
                return self.getToken(PlSqlParser.SCALE, i)

        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CACHE)
            else:
                return self.getToken(PlSqlParser.CACHE, i)

        def NOCACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOCACHE)
            else:
                return self.getToken(PlSqlParser.NOCACHE, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_zonemap_attributes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterZonemap_attributes" ):
                listener.enterZonemap_attributes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitZonemap_attributes" ):
                listener.exitZonemap_attributes(self)




    def zonemap_attributes(self):

        localctx = PlSqlParser.Zonemap_attributesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 978, self.RULE_zonemap_attributes)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9871 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 9871
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1296]:
                    self.state = 9862
                    self.match(PlSqlParser.PCTFREE)
                    self.state = 9863
                    self.numeric()
                    pass
                elif token in [1299]:
                    self.state = 9864
                    self.match(PlSqlParser.PCTUSED)
                    self.state = 9865
                    self.numeric()
                    pass
                elif token in [1542]:
                    self.state = 9866
                    self.match(PlSqlParser.SCALE)
                    self.state = 9867
                    self.numeric()
                    pass
                elif token in [1996]:
                    self.state = 9868
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 9869
                    self.tablespace()
                    pass
                elif token in [158, 1010]:
                    self.state = 9870
                    _la = self._input.LA(1)
                    if not(_la==158 or _la==1010):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 9873 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==158 or _la==1010 or _la==1296 or _la==1299 or _la==1542 or _la==1996):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Zonemap_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_zonemap_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterZonemap_name" ):
                listener.enterZonemap_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitZonemap_name" ):
                listener.exitZonemap_name(self)




    def zonemap_name(self):

        localctx = PlSqlParser.Zonemap_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 980, self.RULE_zonemap_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9875
            self.identifier()
            self.state = 9878
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 9876
                self.match(PlSqlParser.PERIOD)
                self.state = 9877
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Operator_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_operator_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOperator_name" ):
                listener.enterOperator_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOperator_name" ):
                listener.exitOperator_name(self)




    def operator_name(self):

        localctx = PlSqlParser.Operator_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 982, self.RULE_operator_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9880
            self.identifier()
            self.state = 9883
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 9881
                self.match(PlSqlParser.PERIOD)
                self.state = 9882
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Operator_function_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_operator_function_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOperator_function_name" ):
                listener.enterOperator_function_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOperator_function_name" ):
                listener.exitOperator_function_name(self)




    def operator_function_name(self):

        localctx = PlSqlParser.Operator_function_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 984, self.RULE_operator_function_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9885
            self.identifier()
            self.state = 9890
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 9886
                self.match(PlSqlParser.PERIOD)
                self.state = 9887
                self.id_expression()
                self.state = 9892
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_zonemap_on_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_zonemap_on_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_zonemap_on_table" ):
                listener.enterCreate_zonemap_on_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_zonemap_on_table" ):
                listener.exitCreate_zonemap_on_table(self)




    def create_zonemap_on_table(self):

        localctx = PlSqlParser.Create_zonemap_on_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 986, self.RULE_create_zonemap_on_table)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9893
            self.match(PlSqlParser.ON)
            self.state = 9894
            self.tableview_name()
            self.state = 9895
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 9896
            self.column_list()
            self.state = 9897
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_zonemap_as_subqueryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_zonemap_as_subquery

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_zonemap_as_subquery" ):
                listener.enterCreate_zonemap_as_subquery(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_zonemap_as_subquery" ):
                listener.exitCreate_zonemap_as_subquery(self)




    def create_zonemap_as_subquery(self):

        localctx = PlSqlParser.Create_zonemap_as_subqueryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 988, self.RULE_create_zonemap_as_subquery)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9899
            self.match(PlSqlParser.AS)
            self.state = 9900
            self.subquery()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_operatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def OPERATOR(self):
            return self.getToken(PlSqlParser.OPERATOR, 0)

        def operator_name(self):
            return self.getTypedRuleContext(PlSqlParser.Operator_nameContext,0)


        def add_binding_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Add_binding_clauseContext,0)


        def drop_binding_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_binding_clauseContext,0)


        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_operator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_operator" ):
                listener.enterAlter_operator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_operator" ):
                listener.exitAlter_operator(self)




    def alter_operator(self):

        localctx = PlSqlParser.Alter_operatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 990, self.RULE_alter_operator)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9902
            self.match(PlSqlParser.ALTER)
            self.state = 9903
            self.match(PlSqlParser.OPERATOR)
            self.state = 9904
            self.operator_name()
            self.state = 9908
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.state = 9905
                self.add_binding_clause()
                pass
            elif token in [438]:
                self.state = 9906
                self.drop_binding_clause()
                pass
            elif token in [237]:
                self.state = 9907
                self.match(PlSqlParser.COMPILE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_operatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def OPERATOR(self):
            return self.getToken(PlSqlParser.OPERATOR, 0)

        def operator_name(self):
            return self.getTypedRuleContext(PlSqlParser.Operator_nameContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_operator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_operator" ):
                listener.enterDrop_operator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_operator" ):
                listener.exitDrop_operator(self)




    def drop_operator(self):

        localctx = PlSqlParser.Drop_operatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 992, self.RULE_drop_operator)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9910
            self.match(PlSqlParser.DROP)
            self.state = 9911
            self.match(PlSqlParser.OPERATOR)
            self.state = 9912
            self.operator_name()
            self.state = 9914
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 9913
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_operatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def OPERATOR(self):
            return self.getToken(PlSqlParser.OPERATOR, 0)

        def operator_name(self):
            return self.getTypedRuleContext(PlSqlParser.Operator_nameContext,0)


        def BINDING(self):
            return self.getToken(PlSqlParser.BINDING, 0)

        def binding_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Binding_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Binding_clauseContext,i)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_operator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_operator" ):
                listener.enterCreate_operator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_operator" ):
                listener.exitCreate_operator(self)




    def create_operator(self):

        localctx = PlSqlParser.Create_operatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 994, self.RULE_create_operator)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9916
            self.match(PlSqlParser.CREATE)
            self.state = 9919
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 9917
                self.match(PlSqlParser.OR)
                self.state = 9918
                self.match(PlSqlParser.REPLACE)


            self.state = 9921
            self.match(PlSqlParser.OPERATOR)
            self.state = 9922
            self.operator_name()
            self.state = 9923
            self.match(PlSqlParser.BINDING)
            self.state = 9924
            self.binding_clause()
            self.state = 9929
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 9925
                self.match(PlSqlParser.COMMA)
                self.state = 9926
                self.binding_clause()
                self.state = 9931
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 9935
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 9932
                self.match(PlSqlParser.SHARING)
                self.state = 9933
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 9934
                _la = self._input.LA(1)
                if not(_la==894 or _la==1071):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Binding_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def datatype(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.DatatypeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.DatatypeContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def using_function_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_function_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def implementation_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Implementation_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_binding_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBinding_clause" ):
                listener.enterBinding_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBinding_clause" ):
                listener.exitBinding_clause(self)




    def binding_clause(self):

        localctx = PlSqlParser.Binding_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 996, self.RULE_binding_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9937
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 9938
            self.datatype()
            self.state = 9943
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 9939
                self.match(PlSqlParser.COMMA)
                self.state = 9940
                self.datatype()
                self.state = 9945
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 9946
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 9947
            self.match(PlSqlParser.RETURN)
            self.state = 9949
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 9948
                self.match(PlSqlParser.LEFT_PAREN)


            self.state = 9951
            self.datatype()
            self.state = 9953
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2348:
                self.state = 9952
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 9956
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==48 or _la==2212:
                self.state = 9955
                self.implementation_clause()


            self.state = 9958
            self.using_function_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_binding_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def BINDING(self):
            return self.getToken(PlSqlParser.BINDING, 0)

        def binding_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Binding_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_binding_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_binding_clause" ):
                listener.enterAdd_binding_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_binding_clause" ):
                listener.exitAdd_binding_clause(self)




    def add_binding_clause(self):

        localctx = PlSqlParser.Add_binding_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 998, self.RULE_add_binding_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9960
            self.match(PlSqlParser.ADD)
            self.state = 9961
            self.match(PlSqlParser.BINDING)
            self.state = 9962
            self.binding_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Implementation_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ANCILLARY(self):
            return self.getToken(PlSqlParser.ANCILLARY, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def primary_operator_list(self):
            return self.getTypedRuleContext(PlSqlParser.Primary_operator_listContext,0)


        def operator_context_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Operator_context_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_implementation_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImplementation_clause" ):
                listener.enterImplementation_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImplementation_clause" ):
                listener.exitImplementation_clause(self)




    def implementation_clause(self):

        localctx = PlSqlParser.Implementation_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1000, self.RULE_implementation_clause)
        try:
            self.state = 9968
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [48]:
                self.enterOuterAlt(localctx, 1)
                self.state = 9964
                self.match(PlSqlParser.ANCILLARY)
                self.state = 9965
                self.match(PlSqlParser.TO)
                self.state = 9966
                self.primary_operator_list()
                pass
            elif token in [2212]:
                self.enterOuterAlt(localctx, 2)
                self.state = 9967
                self.operator_context_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Primary_operator_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def primary_operator_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Primary_operator_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Primary_operator_itemContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_primary_operator_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrimary_operator_list" ):
                listener.enterPrimary_operator_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrimary_operator_list" ):
                listener.exitPrimary_operator_list(self)




    def primary_operator_list(self):

        localctx = PlSqlParser.Primary_operator_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1002, self.RULE_primary_operator_list)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9970
            self.primary_operator_item()
            self.state = 9975
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 9971
                self.match(PlSqlParser.COMMA)
                self.state = 9972
                self.primary_operator_item()
                self.state = 9977
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Primary_operator_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def datatype(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.DatatypeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.DatatypeContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_primary_operator_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrimary_operator_item" ):
                listener.enterPrimary_operator_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrimary_operator_item" ):
                listener.exitPrimary_operator_item(self)




    def primary_operator_item(self):

        localctx = PlSqlParser.Primary_operator_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1004, self.RULE_primary_operator_item)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9978
            self.schema_object_name()
            self.state = 9979
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 9980
            self.datatype()
            self.state = 9985
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 9981
                self.match(PlSqlParser.COMMA)
                self.state = 9982
                self.datatype()
                self.state = 9987
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 9988
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Operator_context_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def CONTEXT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONTEXT)
            else:
                return self.getToken(PlSqlParser.CONTEXT, i)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def SCAN(self):
            return self.getToken(PlSqlParser.SCAN, 0)

        def implementation_type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Implementation_type_nameContext,0)


        def COMPUTE(self):
            return self.getToken(PlSqlParser.COMPUTE, 0)

        def ANCILLARY(self):
            return self.getToken(PlSqlParser.ANCILLARY, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_operator_context_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOperator_context_clause" ):
                listener.enterOperator_context_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOperator_context_clause" ):
                listener.exitOperator_context_clause(self)




    def operator_context_clause(self):

        localctx = PlSqlParser.Operator_context_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1006, self.RULE_operator_context_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 9990
            self.match(PlSqlParser.WITH)
            self.state = 9991
            self.match(PlSqlParser.INDEX)
            self.state = 9992
            self.match(PlSqlParser.CONTEXT)
            self.state = 9993
            self.match(PlSqlParser.COMMA)
            self.state = 9994
            self.match(PlSqlParser.SCAN)
            self.state = 9995
            self.match(PlSqlParser.CONTEXT)
            self.state = 9996
            self.implementation_type_name()
            self.state = 10000
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==247:
                self.state = 9997
                self.match(PlSqlParser.COMPUTE)
                self.state = 9998
                self.match(PlSqlParser.ANCILLARY)
                self.state = 9999
                self.match(PlSqlParser.DATA)


            self.state = 10005
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 10002
                self.match(PlSqlParser.WITH)
                self.state = 10003
                self.match(PlSqlParser.COLUMN)
                self.state = 10004
                self.match(PlSqlParser.CONTEXT)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_function_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def operator_function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Operator_function_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_using_function_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_function_clause" ):
                listener.enterUsing_function_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_function_clause" ):
                listener.exitUsing_function_clause(self)




    def using_function_clause(self):

        localctx = PlSqlParser.Using_function_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1008, self.RULE_using_function_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10007
            self.match(PlSqlParser.USING)
            self.state = 10008
            self.operator_function_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_binding_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def BINDING(self):
            return self.getToken(PlSqlParser.BINDING, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def datatype(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.DatatypeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.DatatypeContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_binding_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_binding_clause" ):
                listener.enterDrop_binding_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_binding_clause" ):
                listener.exitDrop_binding_clause(self)




    def drop_binding_clause(self):

        localctx = PlSqlParser.Drop_binding_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1010, self.RULE_drop_binding_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10010
            self.match(PlSqlParser.DROP)
            self.state = 10011
            self.match(PlSqlParser.BINDING)
            self.state = 10012
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10013
            self.datatype()
            self.state = 10018
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10014
                self.match(PlSqlParser.COMMA)
                self.state = 10015
                self.datatype()
                self.state = 10020
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 10021
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 10023
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 10022
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_materialized_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.mv_tablespace = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def select_only_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_only_statementContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def PREBUILT(self):
            return self.getToken(PlSqlParser.PREBUILT, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def create_mv_refresh(self):
            return self.getTypedRuleContext(PlSqlParser.Create_mv_refreshContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def REWRITE(self):
            return self.getToken(PlSqlParser.REWRITE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def scoped_table_ref_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Scoped_table_ref_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Scoped_table_ref_constraintContext,i)


        def mv_column_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Mv_column_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Mv_column_aliasContext,i)


        def REDUCED(self):
            return self.getToken(PlSqlParser.REDUCED, 0)

        def PRECISION(self):
            return self.getToken(PlSqlParser.PRECISION, 0)

        def physical_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_propertiesContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def build_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Build_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_materialized_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_materialized_view" ):
                listener.enterCreate_materialized_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_materialized_view" ):
                listener.exitCreate_materialized_view(self)




    def create_materialized_view(self):

        localctx = PlSqlParser.Create_materialized_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1012, self.RULE_create_materialized_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10025
            self.match(PlSqlParser.CREATE)
            self.state = 10026
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 10027
            self.match(PlSqlParser.VIEW)
            self.state = 10028
            self.tableview_name()
            self.state = 10031
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1180:
                self.state = 10029
                self.match(PlSqlParser.OF)
                self.state = 10030
                self.type_name()


            self.state = 10050
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 10033
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10036
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1164,self._ctx)
                if la_ == 1:
                    self.state = 10034
                    self.scoped_table_ref_constraint()
                    pass

                elif la_ == 2:
                    self.state = 10035
                    self.mv_column_alias()
                    pass


                self.state = 10045
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 10038
                    self.match(PlSqlParser.COMMA)
                    self.state = 10041
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1165,self._ctx)
                    if la_ == 1:
                        self.state = 10039
                        self.scoped_table_ref_constraint()
                        pass

                    elif la_ == 2:
                        self.state = 10040
                        self.mv_column_alias()
                        pass


                    self.state = 10047
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 10048
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 10072
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1193]:
                self.state = 10052
                self.match(PlSqlParser.ON)
                self.state = 10053
                self.match(PlSqlParser.PREBUILT)
                self.state = 10054
                self.match(PlSqlParser.TABLE)
                self.state = 10058
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2210 or _la==2212:
                    self.state = 10055
                    _la = self._input.LA(1)
                    if not(_la==2210 or _la==2212):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 10056
                    self.match(PlSqlParser.REDUCED)
                    self.state = 10057
                    self.match(PlSqlParser.PRECISION)


                pass
            elif token in [67, 152, 158, 210, 246, 247, 404, 467, 523, 554, 580, 701, 832, 877, 966, 1010, 1017, 1057, 1085, 1236, 1261, 1296, 1299, 1453, 1567, 1678, 1996, 2153]:
                self.state = 10061
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if ((((_la - 210)) & ~0x3f) == 0 and ((1 << (_la - 210)) & 206158430209) != 0) or _la==523 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or ((((_la - 1236)) & ~0x3f) == 0 and ((1 << (_la - 1236)) & -8070450532247928831) != 0) or _la==1567 or _la==1678 or _la==1996:
                    self.state = 10060
                    self.physical_properties()


                self.state = 10064
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==158 or _la==1010:
                    self.state = 10063
                    _la = self._input.LA(1)
                    if not(_la==158 or _la==1010):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 10067
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1085 or _la==1261:
                    self.state = 10066
                    self.parallel_clause()


                self.state = 10070
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==152:
                    self.state = 10069
                    self.build_clause()


                pass
            else:
                raise NoViableAltException(self)

            self.state = 10091
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1177,self._ctx)
            if la_ == 1:
                self.state = 10074
                self.match(PlSqlParser.USING)
                self.state = 10075
                self.match(PlSqlParser.INDEX)
                self.state = 10085
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==247 or _la==701 or _la==877 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                    self.state = 10079 
                    self._errHandler.sync(self)
                    _alt = 1
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt == 1:
                            self.state = 10079
                            self._errHandler.sync(self)
                            token = self._input.LA(1)
                            if token in [247, 701, 877, 1296, 1299, 1678]:
                                self.state = 10076
                                self.physical_attributes_clause()
                                pass
                            elif token in [1996]:
                                self.state = 10077
                                self.match(PlSqlParser.TABLESPACE)
                                self.state = 10078
                                localctx.mv_tablespace = self.id_expression()
                                pass
                            else:
                                raise NoViableAltException(self)


                        else:
                            raise NoViableAltException(self)
                        self.state = 10081 
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,1175,self._ctx)

                    self.state = 10087
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)


            elif la_ == 2:
                self.state = 10088
                self.match(PlSqlParser.USING)
                self.state = 10089
                self.match(PlSqlParser.NO)
                self.state = 10090
                self.match(PlSqlParser.INDEX)


            self.state = 10094
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==966 or _la==1453:
                self.state = 10093
                self.create_mv_refresh()


            self.state = 10098
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 10096
                self.match(PlSqlParser.FOR)
                self.state = 10097
                self.match(PlSqlParser.UPDATE)


            self.state = 10103
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 10100
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10101
                self.match(PlSqlParser.QUERY)
                self.state = 10102
                self.match(PlSqlParser.REWRITE)


            self.state = 10105
            self.match(PlSqlParser.AS)
            self.state = 10106
            self.select_only_statement()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Scoped_table_ref_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ref_column_or_attribute = None # IdentifierContext
            self.scope_table_name_or_c_alias = None # IdentifierContext

        def SCOPE(self):
            return self.getToken(PlSqlParser.SCOPE, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_scoped_table_ref_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterScoped_table_ref_constraint" ):
                listener.enterScoped_table_ref_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitScoped_table_ref_constraint" ):
                listener.exitScoped_table_ref_constraint(self)




    def scoped_table_ref_constraint(self):

        localctx = PlSqlParser.Scoped_table_ref_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1014, self.RULE_scoped_table_ref_constraint)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10108
            self.match(PlSqlParser.SCOPE)
            self.state = 10109
            self.match(PlSqlParser.FOR)
            self.state = 10110
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10111
            localctx.ref_column_or_attribute = self.identifier()
            self.state = 10112
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 10113
            self.match(PlSqlParser.IS)
            self.state = 10117
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1181,self._ctx)
            if la_ == 1:
                self.state = 10114
                self.schema_name()
                self.state = 10115
                self.match(PlSqlParser.PERIOD)


            self.state = 10119
            localctx.scope_table_name_or_c_alias = self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Mv_column_aliasContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def encryption_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Encryption_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_mv_column_alias

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMv_column_alias" ):
                listener.enterMv_column_alias(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMv_column_alias" ):
                listener.exitMv_column_alias(self)




    def mv_column_alias(self):

        localctx = PlSqlParser.Mv_column_aliasContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1016, self.RULE_mv_column_alias)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10123
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 10121
                self.identifier()
                pass
            elif token in [2336, 2343]:
                self.state = 10122
                self.quoted_string()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 10127
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==471:
                self.state = 10125
                self.match(PlSqlParser.ENCRYPT)
                self.state = 10126
                self.encryption_spec()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_mv_refreshContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.rb_segment = None # Token

        def NEVER(self):
            return self.getToken(PlSqlParser.NEVER, 0)

        def REFRESH(self):
            return self.getToken(PlSqlParser.REFRESH, 0)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def USING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USING)
            else:
                return self.getToken(PlSqlParser.USING, i)

        def CONSTRAINTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONSTRAINTS)
            else:
                return self.getToken(PlSqlParser.CONSTRAINTS, i)

        def FAST(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FAST)
            else:
                return self.getToken(PlSqlParser.FAST, i)

        def COMPLETE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMPLETE)
            else:
                return self.getToken(PlSqlParser.COMPLETE, i)

        def FORCE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FORCE)
            else:
                return self.getToken(PlSqlParser.FORCE, i)

        def DEMAND(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEMAND)
            else:
                return self.getToken(PlSqlParser.DEMAND, i)

        def COMMIT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMIT)
            else:
                return self.getToken(PlSqlParser.COMMIT, i)

        def ENFORCED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENFORCED)
            else:
                return self.getToken(PlSqlParser.ENFORCED, i)

        def TRUSTED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TRUSTED)
            else:
                return self.getToken(PlSqlParser.TRUSTED, i)

        def START(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.START)
            else:
                return self.getToken(PlSqlParser.START, i)

        def NEXT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NEXT)
            else:
                return self.getToken(PlSqlParser.NEXT, i)

        def PRIMARY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIMARY)
            else:
                return self.getToken(PlSqlParser.PRIMARY, i)

        def KEY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEY)
            else:
                return self.getToken(PlSqlParser.KEY, i)

        def ROWID(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROWID)
            else:
                return self.getToken(PlSqlParser.ROWID, i)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def ROLLBACK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROLLBACK)
            else:
                return self.getToken(PlSqlParser.ROLLBACK, i)

        def SEGMENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEGMENT)
            else:
                return self.getToken(PlSqlParser.SEGMENT, i)

        def REGULAR_ID(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REGULAR_ID)
            else:
                return self.getToken(PlSqlParser.REGULAR_ID, i)

        def MASTER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MASTER)
            else:
                return self.getToken(PlSqlParser.MASTER, i)

        def LOCAL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOCAL)
            else:
                return self.getToken(PlSqlParser.LOCAL, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_mv_refresh

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_mv_refresh" ):
                listener.enterCreate_mv_refresh(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_mv_refresh" ):
                listener.exitCreate_mv_refresh(self)




    def create_mv_refresh(self):

        localctx = PlSqlParser.Create_mv_refreshContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1018, self.RULE_create_mv_refresh)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10168
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [966]:
                self.state = 10129
                self.match(PlSqlParser.NEVER)
                self.state = 10130
                self.match(PlSqlParser.REFRESH)
                pass
            elif token in [1453]:
                self.state = 10131
                self.match(PlSqlParser.REFRESH)
                self.state = 10164 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 10164
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1189,self._ctx)
                    if la_ == 1:
                        self.state = 10132
                        _la = self._input.LA(1)
                        if not(_la==238 or _la==541 or _la==576):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass

                    elif la_ == 2:
                        self.state = 10133
                        self.match(PlSqlParser.ON)
                        self.state = 10134
                        _la = self._input.LA(1)
                        if not(_la==231 or _la==383):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass

                    elif la_ == 3:
                        self.state = 10138
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1654]:
                            self.state = 10135
                            self.match(PlSqlParser.START)
                            self.state = 10136
                            self.match(PlSqlParser.WITH)
                            pass
                        elif token in [970]:
                            self.state = 10137
                            self.match(PlSqlParser.NEXT)
                            pass
                        else:
                            raise NoViableAltException(self)

                        pass

                    elif la_ == 4:
                        self.state = 10140
                        self.match(PlSqlParser.WITH)
                        self.state = 10144
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1376]:
                            self.state = 10141
                            self.match(PlSqlParser.PRIMARY)
                            self.state = 10142
                            self.match(PlSqlParser.KEY)
                            pass
                        elif token in [1523]:
                            self.state = 10143
                            self.match(PlSqlParser.ROWID)
                            pass
                        else:
                            raise NoViableAltException(self)

                        pass

                    elif la_ == 5:
                        self.state = 10146
                        self.match(PlSqlParser.USING)
                        self.state = 10159
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [368]:
                            self.state = 10147
                            self.match(PlSqlParser.DEFAULT)
                            self.state = 10149
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==821 or _la==859:
                                self.state = 10148
                                _la = self._input.LA(1)
                                if not(_la==821 or _la==859):
                                    self._errHandler.recoverInline(self)
                                else:
                                    self._errHandler.reportMatch(self)
                                    self.consume()


                            self.state = 10151
                            self.match(PlSqlParser.ROLLBACK)
                            self.state = 10152
                            self.match(PlSqlParser.SEGMENT)
                            pass
                        elif token in [821, 859, 1518]:
                            self.state = 10154
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==821 or _la==859:
                                self.state = 10153
                                _la = self._input.LA(1)
                                if not(_la==821 or _la==859):
                                    self._errHandler.recoverInline(self)
                                else:
                                    self._errHandler.reportMatch(self)
                                    self.consume()


                            self.state = 10156
                            self.match(PlSqlParser.ROLLBACK)
                            self.state = 10157
                            self.match(PlSqlParser.SEGMENT)
                            self.state = 10158
                            localctx.rb_segment = self.match(PlSqlParser.REGULAR_ID)
                            pass
                        else:
                            raise NoViableAltException(self)

                        pass

                    elif la_ == 6:
                        self.state = 10161
                        self.match(PlSqlParser.USING)
                        self.state = 10162
                        _la = self._input.LA(1)
                        if not(_la==475 or _la==2071):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 10163
                        self.match(PlSqlParser.CONSTRAINTS)
                        pass


                    self.state = 10166 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==238 or _la==541 or _la==576 or _la==970 or _la==1193 or _la==1654 or _la==2153 or _la==2212):
                        break

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_materialized_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def PRESERVE(self):
            return self.getToken(PlSqlParser.PRESERVE, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_materialized_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_materialized_view" ):
                listener.enterDrop_materialized_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_materialized_view" ):
                listener.exitDrop_materialized_view(self)




    def drop_materialized_view(self):

        localctx = PlSqlParser.Drop_materialized_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1020, self.RULE_drop_materialized_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10170
            self.match(PlSqlParser.DROP)
            self.state = 10171
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 10172
            self.match(PlSqlParser.VIEW)
            self.state = 10173
            self.tableview_name()
            self.state = 10176
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1372:
                self.state = 10174
                self.match(PlSqlParser.PRESERVE)
                self.state = 10175
                self.match(PlSqlParser.TABLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_contextContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def oracle_namespace(self):
            return self.getTypedRuleContext(PlSqlParser.Oracle_namespaceContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def package_name(self):
            return self.getTypedRuleContext(PlSqlParser.Package_nameContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def INITIALIZED(self):
            return self.getToken(PlSqlParser.INITIALIZED, 0)

        def ACCESSED(self):
            return self.getToken(PlSqlParser.ACCESSED, 0)

        def GLOBALLY(self):
            return self.getToken(PlSqlParser.GLOBALLY, 0)

        def EXTERNALLY(self):
            return self.getToken(PlSqlParser.EXTERNALLY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_context

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_context" ):
                listener.enterCreate_context(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_context" ):
                listener.exitCreate_context(self)




    def create_context(self):

        localctx = PlSqlParser.Create_contextContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1022, self.RULE_create_context)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10178
            self.match(PlSqlParser.CREATE)
            self.state = 10181
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 10179
                self.match(PlSqlParser.OR)
                self.state = 10180
                self.match(PlSqlParser.REPLACE)


            self.state = 10183
            self.match(PlSqlParser.CONTEXT)
            self.state = 10184
            self.oracle_namespace()
            self.state = 10185
            self.match(PlSqlParser.USING)
            self.state = 10189
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1194,self._ctx)
            if la_ == 1:
                self.state = 10186
                self.schema_object_name()
                self.state = 10187
                self.match(PlSqlParser.PERIOD)


            self.state = 10191
            self.package_name()
            self.state = 10196
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [699]:
                self.state = 10192
                self.match(PlSqlParser.INITIALIZED)
                self.state = 10193
                _la = self._input.LA(1)
                if not(_la==524 or _la==603):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [5]:
                self.state = 10194
                self.match(PlSqlParser.ACCESSED)
                self.state = 10195
                self.match(PlSqlParser.GLOBALLY)
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Oracle_namespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_oracle_namespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOracle_namespace" ):
                listener.enterOracle_namespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOracle_namespace" ):
                listener.exitOracle_namespace(self)




    def oracle_namespace(self):

        localctx = PlSqlParser.Oracle_namespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1024, self.RULE_oracle_namespace)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10198
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_clusterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def datatype(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.DatatypeContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.DatatypeContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SORT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SORT)
            else:
                return self.getToken(PlSqlParser.SORT, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def SIZE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SIZE)
            else:
                return self.getToken(PlSqlParser.SIZE, i)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def INDEX(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INDEX)
            else:
                return self.getToken(PlSqlParser.INDEX, i)

        def HASHKEYS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.HASHKEYS)
            else:
                return self.getToken(PlSqlParser.HASHKEYS, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def ROWDEPENDENCIES(self):
            return self.getToken(PlSqlParser.ROWDEPENDENCIES, 0)

        def NOROWDEPENDENCIES(self):
            return self.getToken(PlSqlParser.NOROWDEPENDENCIES, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def SINGLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SINGLE)
            else:
                return self.getToken(PlSqlParser.SINGLE, i)

        def TABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLE)
            else:
                return self.getToken(PlSqlParser.TABLE, i)

        def HASH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.HASH)
            else:
                return self.getToken(PlSqlParser.HASH, i)

        def IS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IS)
            else:
                return self.getToken(PlSqlParser.IS, i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_cluster

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_cluster" ):
                listener.enterCreate_cluster(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_cluster" ):
                listener.exitCreate_cluster(self)




    def create_cluster(self):

        localctx = PlSqlParser.Create_clusterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1026, self.RULE_create_cluster)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10200
            self.match(PlSqlParser.CREATE)
            self.state = 10201
            self.match(PlSqlParser.CLUSTER)
            self.state = 10202
            self.cluster_name()
            self.state = 10203
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10204
            self.column_name()
            self.state = 10205
            self.datatype()
            self.state = 10207
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1626:
                self.state = 10206
                self.match(PlSqlParser.SORT)


            self.state = 10217
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10209
                self.match(PlSqlParser.COMMA)
                self.state = 10210
                self.column_name()
                self.state = 10211
                self.datatype()
                self.state = 10213
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1626:
                    self.state = 10212
                    self.match(PlSqlParser.SORT)


                self.state = 10219
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 10220
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 10240
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==247 or _la==620 or _la==675 or _la==701 or _la==877 or _la==1296 or _la==1299 or _la==1613 or _la==1617 or _la==1678 or _la==1996:
                self.state = 10238
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [247, 701, 877, 1296, 1299, 1678]:
                    self.state = 10221
                    self.physical_attributes_clause()
                    pass
                elif token in [1617]:
                    self.state = 10222
                    self.match(PlSqlParser.SIZE)
                    self.state = 10223
                    self.size_clause()
                    pass
                elif token in [1996]:
                    self.state = 10224
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 10225
                    self.tablespace()
                    pass
                elif token in [675]:
                    self.state = 10226
                    self.match(PlSqlParser.INDEX)
                    pass
                elif token in [620, 1613]:
                    self.state = 10229
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1613:
                        self.state = 10227
                        self.match(PlSqlParser.SINGLE)
                        self.state = 10228
                        self.match(PlSqlParser.TABLE)


                    self.state = 10231
                    self.match(PlSqlParser.HASHKEYS)
                    self.state = 10232
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    self.state = 10236
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==619:
                        self.state = 10233
                        self.match(PlSqlParser.HASH)
                        self.state = 10234
                        self.match(PlSqlParser.IS)
                        self.state = 10235
                        self.expression()


                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 10242
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 10244
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 10243
                self.parallel_clause()


            self.state = 10247
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1117 or _la==1521:
                self.state = 10246
                _la = self._input.LA(1)
                if not(_la==1117 or _la==1521):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 10250
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==158 or _la==1010:
                self.state = 10249
                _la = self._input.LA(1)
                if not(_la==158 or _la==1010):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_profileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.p = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def MANDATORY(self):
            return self.getToken(PlSqlParser.MANDATORY, 0)

        def resource_parameters(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Resource_parametersContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Resource_parametersContext,i)


        def password_parameters(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Password_parametersContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Password_parametersContext,i)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_profile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_profile" ):
                listener.enterCreate_profile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_profile" ):
                listener.exitCreate_profile(self)




    def create_profile(self):

        localctx = PlSqlParser.Create_profileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1028, self.RULE_create_profile)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10252
            self.match(PlSqlParser.CREATE)
            self.state = 10254
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==855:
                self.state = 10253
                self.match(PlSqlParser.MANDATORY)


            self.state = 10256
            self.match(PlSqlParser.PROFILE)
            self.state = 10257
            localctx.p = self.id_expression()
            self.state = 10258
            self.match(PlSqlParser.LIMIT)
            self.state = 10261 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 10261
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [244, 266, 302, 303, 649, 834, 835, 1381, 1587]:
                    self.state = 10259
                    self.resource_parameters()
                    pass
                elif token in [534, 660, 1280, 1281, 1282, 1284, 1285, 1286, 1287]:
                    self.state = 10260
                    self.password_parameters()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 10263 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (((((_la - 244)) & ~0x3f) == 0 and ((1 << (_la - 244)) & 864691128459329537) != 0) or _la==534 or _la==649 or _la==660 or _la==834 or _la==835 or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & 247) != 0) or _la==1381 or _la==1587):
                    break

            self.state = 10266
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 10265
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Resource_parametersContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SESSIONS_PER_USER(self):
            return self.getToken(PlSqlParser.SESSIONS_PER_USER, 0)

        def CPU_PER_SESSION(self):
            return self.getToken(PlSqlParser.CPU_PER_SESSION, 0)

        def CPU_PER_CALL(self):
            return self.getToken(PlSqlParser.CPU_PER_CALL, 0)

        def CONNECT_TIME(self):
            return self.getToken(PlSqlParser.CONNECT_TIME, 0)

        def IDLE_TIME(self):
            return self.getToken(PlSqlParser.IDLE_TIME, 0)

        def LOGICAL_READS_PER_SESSION(self):
            return self.getToken(PlSqlParser.LOGICAL_READS_PER_SESSION, 0)

        def LOGICAL_READS_PER_CALL(self):
            return self.getToken(PlSqlParser.LOGICAL_READS_PER_CALL, 0)

        def COMPOSITE_LIMIT(self):
            return self.getToken(PlSqlParser.COMPOSITE_LIMIT, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def PRIVATE_SGA(self):
            return self.getToken(PlSqlParser.PRIVATE_SGA, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_resource_parameters

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResource_parameters" ):
                listener.enterResource_parameters(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResource_parameters" ):
                listener.exitResource_parameters(self)




    def resource_parameters(self):

        localctx = PlSqlParser.Resource_parametersContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1030, self.RULE_resource_parameters)
        self._la = 0 # Token type
        try:
            self.state = 10276
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [244, 266, 302, 303, 649, 834, 835, 1587]:
                self.enterOuterAlt(localctx, 1)
                self.state = 10268
                _la = self._input.LA(1)
                if not(((((_la - 244)) & ~0x3f) == 0 and ((1 << (_la - 244)) & 864691128459329537) != 0) or _la==649 or _la==834 or _la==835 or _la==1587):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10269
                _la = self._input.LA(1)
                if not(_la==368 or _la==2093 or _la==2341):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [1381]:
                self.enterOuterAlt(localctx, 2)
                self.state = 10270
                self.match(PlSqlParser.PRIVATE_SGA)
                self.state = 10274
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2341]:
                    self.state = 10271
                    self.size_clause()
                    pass
                elif token in [2093]:
                    self.state = 10272
                    self.match(PlSqlParser.UNLIMITED)
                    pass
                elif token in [368]:
                    self.state = 10273
                    self.match(PlSqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Password_parametersContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FAILED_LOGIN_ATTEMPTS(self):
            return self.getToken(PlSqlParser.FAILED_LOGIN_ATTEMPTS, 0)

        def PASSWORD_LIFE_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_LIFE_TIME, 0)

        def PASSWORD_REUSE_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_REUSE_TIME, 0)

        def PASSWORD_REUSE_MAX(self):
            return self.getToken(PlSqlParser.PASSWORD_REUSE_MAX, 0)

        def PASSWORD_LOCK_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_LOCK_TIME, 0)

        def PASSWORD_GRACE_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_GRACE_TIME, 0)

        def INACTIVE_ACCOUNT_TIME(self):
            return self.getToken(PlSqlParser.INACTIVE_ACCOUNT_TIME, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def PASSWORD_VERIFY_FUNCTION(self):
            return self.getToken(PlSqlParser.PASSWORD_VERIFY_FUNCTION, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def PASSWORD_ROLLOVER_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_ROLLOVER_TIME, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_password_parameters

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPassword_parameters" ):
                listener.enterPassword_parameters(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPassword_parameters" ):
                listener.exitPassword_parameters(self)




    def password_parameters(self):

        localctx = PlSqlParser.Password_parametersContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1032, self.RULE_password_parameters)
        self._la = 0 # Token type
        try:
            self.state = 10295
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [534, 660, 1280, 1281, 1282, 1284, 1285]:
                self.enterOuterAlt(localctx, 1)
                self.state = 10278
                _la = self._input.LA(1)
                if not(_la==534 or _la==660 or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & 55) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10282
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1212,self._ctx)
                if la_ == 1:
                    self.state = 10279
                    self.expression()
                    pass

                elif la_ == 2:
                    self.state = 10280
                    self.match(PlSqlParser.UNLIMITED)
                    pass

                elif la_ == 3:
                    self.state = 10281
                    self.match(PlSqlParser.DEFAULT)
                    pass


                pass
            elif token in [1287]:
                self.enterOuterAlt(localctx, 2)
                self.state = 10284
                self.match(PlSqlParser.PASSWORD_VERIFY_FUNCTION)
                self.state = 10288
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                    self.state = 10285
                    self.function_name()
                    pass
                elif token in [1162]:
                    self.state = 10286
                    self.match(PlSqlParser.NULL_)
                    pass
                elif token in [368]:
                    self.state = 10287
                    self.match(PlSqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [1286]:
                self.enterOuterAlt(localctx, 3)
                self.state = 10290
                self.match(PlSqlParser.PASSWORD_ROLLOVER_TIME)
                self.state = 10293
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1214,self._ctx)
                if la_ == 1:
                    self.state = 10291
                    self.expression()
                    pass

                elif la_ == 2:
                    self.state = 10292
                    self.match(PlSqlParser.DEFAULT)
                    pass


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_lockdown_profileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def LOCKDOWN(self):
            return self.getToken(PlSqlParser.LOCKDOWN, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def static_base_profile(self):
            return self.getTypedRuleContext(PlSqlParser.Static_base_profileContext,0)


        def dynamic_base_profile(self):
            return self.getTypedRuleContext(PlSqlParser.Dynamic_base_profileContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_lockdown_profile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_lockdown_profile" ):
                listener.enterCreate_lockdown_profile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_lockdown_profile" ):
                listener.exitCreate_lockdown_profile(self)




    def create_lockdown_profile(self):

        localctx = PlSqlParser.Create_lockdown_profileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1034, self.RULE_create_lockdown_profile)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10297
            self.match(PlSqlParser.CREATE)
            self.state = 10298
            self.match(PlSqlParser.LOCKDOWN)
            self.state = 10299
            self.match(PlSqlParser.PROFILE)
            self.state = 10300
            self.id_expression()
            self.state = 10303
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [588]:
                self.state = 10301
                self.static_base_profile()
                pass
            elif token in [663]:
                self.state = 10302
                self.dynamic_base_profile()
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Static_base_profileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.bp = None # Id_expressionContext

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_static_base_profile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStatic_base_profile" ):
                listener.enterStatic_base_profile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStatic_base_profile" ):
                listener.exitStatic_base_profile(self)




    def static_base_profile(self):

        localctx = PlSqlParser.Static_base_profileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1036, self.RULE_static_base_profile)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10305
            self.match(PlSqlParser.FROM)
            self.state = 10306
            localctx.bp = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dynamic_base_profileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.bp = None # Id_expressionContext

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dynamic_base_profile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDynamic_base_profile" ):
                listener.enterDynamic_base_profile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDynamic_base_profile" ):
                listener.exitDynamic_base_profile(self)




    def dynamic_base_profile(self):

        localctx = PlSqlParser.Dynamic_base_profileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1038, self.RULE_dynamic_base_profile)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10308
            self.match(PlSqlParser.INCLUDING)
            self.state = 10309
            localctx.bp = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_outlineContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.o = None # Id_expressionContext
            self.so = None # Id_expressionContext
            self.c = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def OUTLINE(self):
            return self.getToken(PlSqlParser.OUTLINE, 0)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def CATEGORY(self):
            return self.getToken(PlSqlParser.CATEGORY, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def statement(self):
            return self.getTypedRuleContext(PlSqlParser.StatementContext,0)


        def PUBLIC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PUBLIC)
            else:
                return self.getToken(PlSqlParser.PUBLIC, i)

        def PRIVATE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIVATE)
            else:
                return self.getToken(PlSqlParser.PRIVATE, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_outline

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_outline" ):
                listener.enterCreate_outline(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_outline" ):
                listener.exitCreate_outline(self)




    def create_outline(self):

        localctx = PlSqlParser.Create_outlineContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1040, self.RULE_create_outline)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10311
            self.match(PlSqlParser.CREATE)
            self.state = 10314
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 10312
                self.match(PlSqlParser.OR)
                self.state = 10313
                self.match(PlSqlParser.REPLACE)


            self.state = 10317
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1380 or _la==1398:
                self.state = 10316
                _la = self._input.LA(1)
                if not(_la==1380 or _la==1398):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 10319
            self.match(PlSqlParser.OUTLINE)
            self.state = 10321
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 10320
                localctx.o = self.id_expression()


            self.state = 10328
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==588:
                self.state = 10323
                self.match(PlSqlParser.FROM)
                self.state = 10325
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1220,self._ctx)
                if la_ == 1:
                    self.state = 10324
                    _la = self._input.LA(1)
                    if not(_la==1380 or _la==1398):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 10327
                localctx.so = self.id_expression()


            self.state = 10333
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 10330
                self.match(PlSqlParser.FOR)
                self.state = 10331
                self.match(PlSqlParser.CATEGORY)
                self.state = 10332
                localctx.c = self.id_expression()


            self.state = 10337
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1193:
                self.state = 10335
                self.match(PlSqlParser.ON)
                self.state = 10336
                self.statement()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_restore_pointContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.rp = None # Id_expressionContext
            self.pdb = None # Id_expressionContext

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def RESTORE(self):
            return self.getToken(PlSqlParser.RESTORE, 0)

        def POINT(self):
            return self.getToken(PlSqlParser.POINT, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def CLEAN(self):
            return self.getToken(PlSqlParser.CLEAN, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def DATABASE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DATABASE)
            else:
                return self.getToken(PlSqlParser.DATABASE, i)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def PRESERVE(self):
            return self.getToken(PlSqlParser.PRESERVE, 0)

        def GUARANTEE(self):
            return self.getToken(PlSqlParser.GUARANTEE, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def SCN(self):
            return self.getToken(PlSqlParser.SCN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_restore_point

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_restore_point" ):
                listener.enterCreate_restore_point(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_restore_point" ):
                listener.exitCreate_restore_point(self)




    def create_restore_point(self):

        localctx = PlSqlParser.Create_restore_pointContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1042, self.RULE_create_restore_point)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10339
            self.match(PlSqlParser.CREATE)
            self.state = 10341
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==200:
                self.state = 10340
                self.match(PlSqlParser.CLEAN)


            self.state = 10343
            self.match(PlSqlParser.RESTORE)
            self.state = 10344
            self.match(PlSqlParser.POINT)
            self.state = 10345
            localctx.rp = self.id_expression()
            self.state = 10350
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 10346
                self.match(PlSqlParser.FOR)
                self.state = 10347
                self.match(PlSqlParser.PLUGGABLE)
                self.state = 10348
                self.match(PlSqlParser.DATABASE)
                self.state = 10349
                localctx.pdb = self.id_expression()


            self.state = 10356
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 10352
                self.match(PlSqlParser.AS)
                self.state = 10353
                self.match(PlSqlParser.OF)
                self.state = 10354
                _la = self._input.LA(1)
                if not(_la==1549 or _la==2020):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10355
                self.expression()


            self.state = 10362
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1372]:
                self.state = 10358
                self.match(PlSqlParser.PRESERVE)
                pass
            elif token in [615]:
                self.state = 10359
                self.match(PlSqlParser.GUARANTEE)
                self.state = 10360
                self.match(PlSqlParser.FLASHBACK)
                self.state = 10361
                self.match(PlSqlParser.DATABASE)
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_roleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def role_name(self):
            return self.getTypedRuleContext(PlSqlParser.Role_nameContext,0)


        def role_identified_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Role_identified_clauseContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_role

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_role" ):
                listener.enterCreate_role(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_role" ):
                listener.exitCreate_role(self)




    def create_role(self):

        localctx = PlSqlParser.Create_roleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1044, self.RULE_create_role)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10364
            self.match(PlSqlParser.CREATE)
            self.state = 10365
            self.match(PlSqlParser.ROLE)
            self.state = 10366
            self.role_name()
            self.state = 10368
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644 or _la==1138:
                self.state = 10367
                self.role_identified_clause()


            self.state = 10371
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 10370
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def table_name(self):
            return self.getTypedRuleContext(PlSqlParser.Table_nameContext,0)


        def relational_table(self):
            return self.getTypedRuleContext(PlSqlParser.Relational_tableContext,0)


        def xmltype_table(self):
            return self.getTypedRuleContext(PlSqlParser.Xmltype_tableContext,0)


        def object_table(self):
            return self.getTypedRuleContext(PlSqlParser.Object_tableContext,0)


        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def SHARDED(self):
            return self.getToken(PlSqlParser.SHARDED, 0)

        def DUPLICATED(self):
            return self.getToken(PlSqlParser.DUPLICATED, 0)

        def BLOCKCHAIN(self):
            return self.getToken(PlSqlParser.BLOCKCHAIN, 0)

        def IMMUTABLE(self):
            return self.getToken(PlSqlParser.IMMUTABLE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def memoptimize_read_write_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Memoptimize_read_write_clauseContext,0)


        def PARENT(self):
            return self.getToken(PlSqlParser.PARENT, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def USAGE(self):
            return self.getToken(PlSqlParser.USAGE, 0)

        def QUEUE(self):
            return self.getToken(PlSqlParser.QUEUE, 0)

        def GLOBAL(self):
            return self.getToken(PlSqlParser.GLOBAL, 0)

        def PRIVATE(self):
            return self.getToken(PlSqlParser.PRIVATE, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def EXTENDED(self):
            return self.getToken(PlSqlParser.EXTENDED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_table" ):
                listener.enterCreate_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_table" ):
                listener.exitCreate_table(self)




    def create_table(self):

        localctx = PlSqlParser.Create_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1046, self.RULE_create_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10373
            self.match(PlSqlParser.CREATE)
            self.state = 10383
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1231,self._ctx)
            if la_ == 1:
                self.state = 10374
                _la = self._input.LA(1)
                if not(_la==602 or _la==1380):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10375
                self.match(PlSqlParser.TEMPORARY)

            elif la_ == 2:
                self.state = 10376
                self.match(PlSqlParser.SHARDED)

            elif la_ == 3:
                self.state = 10377
                self.match(PlSqlParser.DUPLICATED)

            elif la_ == 4:
                self.state = 10379
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2279:
                    self.state = 10378
                    self.match(PlSqlParser.IMMUTABLE)


                self.state = 10381
                self.match(PlSqlParser.BLOCKCHAIN)

            elif la_ == 5:
                self.state = 10382
                self.match(PlSqlParser.IMMUTABLE)


            self.state = 10385
            self.match(PlSqlParser.TABLE)
            self.state = 10389
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1232,self._ctx)
            if la_ == 1:
                self.state = 10386
                self.schema_name()
                self.state = 10387
                self.match(PlSqlParser.PERIOD)


            self.state = 10391
            self.table_name()
            self.state = 10395
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 10392
                self.match(PlSqlParser.IF)
                self.state = 10393
                self.match(PlSqlParser.NOT)
                self.state = 10394
                self.match(PlSqlParser.EXISTS)


            self.state = 10407
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1599:
                self.state = 10397
                self.match(PlSqlParser.SHARING)
                self.state = 10398
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 10405
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [894]:
                    self.state = 10399
                    self.match(PlSqlParser.METADATA)
                    pass
                elif token in [334, 2276]:
                    self.state = 10401
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2276:
                        self.state = 10400
                        self.match(PlSqlParser.EXTENDED)


                    self.state = 10403
                    self.match(PlSqlParser.DATA)
                    pass
                elif token in [1071]:
                    self.state = 10404
                    self.match(PlSqlParser.NONE)
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 10412
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1237,self._ctx)
            if la_ == 1:
                self.state = 10409
                self.relational_table()
                pass

            elif la_ == 2:
                self.state = 10410
                self.xmltype_table()
                pass

            elif la_ == 3:
                self.state = 10411
                self.object_table()
                pass


            self.state = 10415
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1074 or _la==2308:
                self.state = 10414
                self.memoptimize_read_write_clause()


            self.state = 10419
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1265:
                self.state = 10417
                self.match(PlSqlParser.PARENT)
                self.state = 10418
                self.tableview_name()


            self.state = 10423
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2123:
                self.state = 10421
                self.match(PlSqlParser.USAGE)
                self.state = 10422
                self.match(PlSqlParser.QUEUE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmltype_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def XMLTYPE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.XMLTYPE)
            else:
                return self.getToken(PlSqlParser.XMLTYPE, i)

        def table_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Table_propertiesContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def object_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Object_propertiesContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def xmltype_storage(self):
            return self.getTypedRuleContext(PlSqlParser.Xmltype_storageContext,0)


        def xmlschema_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlschema_specContext,0)


        def xmltype_virtual_columns(self):
            return self.getTypedRuleContext(PlSqlParser.Xmltype_virtual_columnsContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def oid_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Oid_clauseContext,0)


        def oid_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Oid_index_clauseContext,0)


        def physical_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_propertiesContext,0)


        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def PRESERVE(self):
            return self.getToken(PlSqlParser.PRESERVE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xmltype_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmltype_table" ):
                listener.enterXmltype_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmltype_table" ):
                listener.exitXmltype_table(self)




    def xmltype_table(self):

        localctx = PlSqlParser.Xmltype_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1048, self.RULE_xmltype_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10425
            self.match(PlSqlParser.OF)
            self.state = 10426
            self.match(PlSqlParser.XMLTYPE)
            self.state = 10431
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 10427
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10428
                self.object_properties()
                self.state = 10429
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 10435
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1242,self._ctx)
            if la_ == 1:
                self.state = 10433
                self.match(PlSqlParser.XMLTYPE)
                self.state = 10434
                self.xmltype_storage()


            self.state = 10438
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==455 or _la==2248:
                self.state = 10437
                self.xmlschema_spec()


            self.state = 10441
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2192:
                self.state = 10440
                self.xmltype_virtual_columns()


            self.state = 10447
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1193:
                self.state = 10443
                self.match(PlSqlParser.ON)
                self.state = 10444
                self.match(PlSqlParser.COMMIT)
                self.state = 10445
                _la = self._input.LA(1)
                if not(_la==381 or _la==1372):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10446
                self.match(PlSqlParser.ROWS)


            self.state = 10450
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1172:
                self.state = 10449
                self.oid_clause()


            self.state = 10453
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1181:
                self.state = 10452
                self.oid_index_clause()


            self.state = 10456
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1248,self._ctx)
            if la_ == 1:
                self.state = 10455
                self.physical_properties()


            self.state = 10458
            self.table_properties()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmltype_virtual_columnsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VIRTUAL(self):
            return self.getToken(PlSqlParser.VIRTUAL, 0)

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xmltype_virtual_columns

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmltype_virtual_columns" ):
                listener.enterXmltype_virtual_columns(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmltype_virtual_columns" ):
                listener.exitXmltype_virtual_columns(self)




    def xmltype_virtual_columns(self):

        localctx = PlSqlParser.Xmltype_virtual_columnsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1050, self.RULE_xmltype_virtual_columns)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10460
            self.match(PlSqlParser.VIRTUAL)
            self.state = 10461
            self.match(PlSqlParser.COLUMNS)
            self.state = 10462
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10463
            self.column_name()
            self.state = 10464
            self.match(PlSqlParser.AS)
            self.state = 10465
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10466
            self.expression()
            self.state = 10467
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 10477
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10468
                self.match(PlSqlParser.COMMA)
                self.state = 10469
                self.column_name()
                self.state = 10470
                self.match(PlSqlParser.AS)
                self.state = 10471
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10472
                self.expression()
                self.state = 10473
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 10479
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 10480
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmltype_column_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XMLTYPE(self):
            return self.getToken(PlSqlParser.XMLTYPE, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def xmltype_storage(self):
            return self.getTypedRuleContext(PlSqlParser.Xmltype_storageContext,0)


        def xmlschema_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlschema_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmltype_column_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmltype_column_properties" ):
                listener.enterXmltype_column_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmltype_column_properties" ):
                listener.exitXmltype_column_properties(self)




    def xmltype_column_properties(self):

        localctx = PlSqlParser.Xmltype_column_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1052, self.RULE_xmltype_column_properties)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10482
            self.match(PlSqlParser.XMLTYPE)
            self.state = 10484
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1250,self._ctx)
            if la_ == 1:
                self.state = 10483
                self.match(PlSqlParser.COLUMN)


            self.state = 10486
            self.column_name()
            self.state = 10488
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679:
                self.state = 10487
                self.xmltype_storage()


            self.state = 10491
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==455 or _la==2248:
                self.state = 10490
                self.xmlschema_spec()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmltype_storageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def RELATIONAL(self):
            return self.getToken(PlSqlParser.RELATIONAL, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def BINARY(self):
            return self.getToken(PlSqlParser.BINARY, 0)

        def XML(self):
            return self.getToken(PlSqlParser.XML, 0)

        def lob_segname(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_segnameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def lob_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SECUREFILE(self):
            return self.getToken(PlSqlParser.SECUREFILE, 0)

        def BASICFILE(self):
            return self.getToken(PlSqlParser.BASICFILE, 0)

        def VARRAYS(self):
            return self.getToken(PlSqlParser.VARRAYS, 0)

        def LOBS(self):
            return self.getToken(PlSqlParser.LOBS, 0)

        def TABLES(self):
            return self.getToken(PlSqlParser.TABLES, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xmltype_storage

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmltype_storage" ):
                listener.enterXmltype_storage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmltype_storage" ):
                listener.exitXmltype_storage(self)




    def xmltype_storage(self):

        localctx = PlSqlParser.Xmltype_storageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1054, self.RULE_xmltype_storage)
        self._la = 0 # Token type
        try:
            self.state = 10524
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1258,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 10493
                self.match(PlSqlParser.STORE)
                self.state = 10494
                self.match(PlSqlParser.AS)
                self.state = 10518
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1172]:
                    self.state = 10495
                    self.match(PlSqlParser.OBJECT)
                    self.state = 10496
                    self.match(PlSqlParser.RELATIONAL)
                    pass
                elif token in [104, 119, 205, 1562]:
                    self.state = 10498
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==104 or _la==1562:
                        self.state = 10497
                        _la = self._input.LA(1)
                        if not(_la==104 or _la==1562):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 10503
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [205]:
                        self.state = 10500
                        self.match(PlSqlParser.CLOB)
                        pass
                    elif token in [119]:
                        self.state = 10501
                        self.match(PlSqlParser.BINARY)
                        self.state = 10502
                        self.match(PlSqlParser.XML)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 10516
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1256,self._ctx)
                    if la_ == 1:
                        self.state = 10505
                        self.lob_segname()
                        self.state = 10510
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1255,self._ctx)
                        if la_ == 1:
                            self.state = 10506
                            self.match(PlSqlParser.LEFT_PAREN)
                            self.state = 10507
                            self.lob_parameters()
                            self.state = 10508
                            self.match(PlSqlParser.RIGHT_PAREN)



                    elif la_ == 2:
                        self.state = 10512
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 10513
                        self.lob_parameters()
                        self.state = 10514
                        self.match(PlSqlParser.RIGHT_PAREN)


                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 10520
                self.match(PlSqlParser.STORE)
                self.state = 10521
                self.match(PlSqlParser.VARRAYS)
                self.state = 10522
                self.match(PlSqlParser.AS)
                self.state = 10523
                _la = self._input.LA(1)
                if not(_la==819 or _la==1997):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlschema_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELEMENT(self):
            return self.getToken(PlSqlParser.ELEMENT, 0)

        def DELIMITED_ID(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DELIMITED_ID)
            else:
                return self.getToken(PlSqlParser.DELIMITED_ID, i)

        def XMLSCHEMA(self):
            return self.getToken(PlSqlParser.XMLSCHEMA, 0)

        def allow_or_disallow(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allow_or_disallowContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allow_or_disallowContext,i)


        def NONSCHEMA(self):
            return self.getToken(PlSqlParser.NONSCHEMA, 0)

        def ANYSCHEMA(self):
            return self.getToken(PlSqlParser.ANYSCHEMA, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlschema_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlschema_spec" ):
                listener.enterXmlschema_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlschema_spec" ):
                listener.exitXmlschema_spec(self)




    def xmlschema_spec(self):

        localctx = PlSqlParser.Xmlschema_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1056, self.RULE_xmlschema_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10528
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2248:
                self.state = 10526
                self.match(PlSqlParser.XMLSCHEMA)
                self.state = 10527
                self.match(PlSqlParser.DELIMITED_ID)


            self.state = 10530
            self.match(PlSqlParser.ELEMENT)
            self.state = 10531
            self.match(PlSqlParser.DELIMITED_ID)
            self.state = 10535
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1260,self._ctx)
            if la_ == 1:
                self.state = 10532
                self.allow_or_disallow()
                self.state = 10533
                self.match(PlSqlParser.NONSCHEMA)


            self.state = 10540
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==40 or _la==408:
                self.state = 10537
                self.allow_or_disallow()
                self.state = 10538
                self.match(PlSqlParser.ANYSCHEMA)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def object_type(self):
            return self.getTypedRuleContext(PlSqlParser.Object_typeContext,0)


        def table_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Table_propertiesContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def object_table_substitution(self):
            return self.getTypedRuleContext(PlSqlParser.Object_table_substitutionContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def object_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_propertiesContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def oid_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Oid_clauseContext,0)


        def oid_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Oid_index_clauseContext,0)


        def physical_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_propertiesContext,0)


        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def PRESERVE(self):
            return self.getToken(PlSqlParser.PRESERVE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_object_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_table" ):
                listener.enterObject_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_table" ):
                listener.exitObject_table(self)




    def object_table(self):

        localctx = PlSqlParser.Object_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1058, self.RULE_object_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10542
            self.match(PlSqlParser.OF)
            self.state = 10546
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1262,self._ctx)
            if la_ == 1:
                self.state = 10543
                self.schema_name()
                self.state = 10544
                self.match(PlSqlParser.PERIOD)


            self.state = 10548
            self.object_type()
            self.state = 10550
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138 or _la==1696:
                self.state = 10549
                self.object_table_substitution()


            self.state = 10563
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 10552
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10553
                self.object_properties()
                self.state = 10558
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 10554
                    self.match(PlSqlParser.COMMA)
                    self.state = 10555
                    self.object_properties()
                    self.state = 10560
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 10561
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 10569
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1193:
                self.state = 10565
                self.match(PlSqlParser.ON)
                self.state = 10566
                self.match(PlSqlParser.COMMIT)
                self.state = 10567
                _la = self._input.LA(1)
                if not(_la==381 or _la==1372):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10568
                self.match(PlSqlParser.ROWS)


            self.state = 10572
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1172:
                self.state = 10571
                self.oid_clause()


            self.state = 10575
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1181:
                self.state = 10574
                self.oid_index_clause()


            self.state = 10578
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1269,self._ctx)
            if la_ == 1:
                self.state = 10577
                self.physical_properties()


            self.state = 10580
            self.table_properties()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_type" ):
                listener.enterObject_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_type" ):
                listener.exitObject_type(self)




    def object_type(self):

        localctx = PlSqlParser.Object_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1060, self.RULE_object_type)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10582
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Oid_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OIDINDEX(self):
            return self.getToken(PlSqlParser.OIDINDEX, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_oid_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOid_index_clause" ):
                listener.enterOid_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOid_index_clause" ):
                listener.exitOid_index_clause(self)




    def oid_index_clause(self):

        localctx = PlSqlParser.Oid_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1062, self.RULE_oid_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10584
            self.match(PlSqlParser.OIDINDEX)
            self.state = 10586
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 10585
                self.index_name()


            self.state = 10588
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10592 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 10592
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [247, 701, 877, 1296, 1299, 1678]:
                    self.state = 10589
                    self.physical_attributes_clause()
                    pass
                elif token in [1996]:
                    self.state = 10590
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 10591
                    self.tablespace()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 10594 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==247 or _la==701 or _la==877 or _la==1296 or _la==1299 or _la==1678 or _la==1996):
                    break

            self.state = 10596
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Oid_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def IDENTIFIER(self):
            return self.getToken(PlSqlParser.IDENTIFIER, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def GENERATED(self):
            return self.getToken(PlSqlParser.GENERATED, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_oid_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOid_clause" ):
                listener.enterOid_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOid_clause" ):
                listener.exitOid_clause(self)




    def oid_clause(self):

        localctx = PlSqlParser.Oid_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1064, self.RULE_oid_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10598
            self.match(PlSqlParser.OBJECT)
            self.state = 10599
            self.match(PlSqlParser.IDENTIFIER)
            self.state = 10600
            self.match(PlSqlParser.IS)
            self.state = 10605
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1865]:
                self.state = 10601
                self.match(PlSqlParser.SYSTEM)
                self.state = 10602
                self.match(PlSqlParser.GENERATED)
                pass
            elif token in [1376]:
                self.state = 10603
                self.match(PlSqlParser.PRIMARY)
                self.state = 10604
                self.match(PlSqlParser.KEY)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def attribute_name(self):
            return self.getTypedRuleContext(PlSqlParser.Attribute_nameContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def inline_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inline_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inline_constraintContext,i)


        def inline_ref_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Inline_ref_constraintContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def out_of_line_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Out_of_line_constraintContext,0)


        def out_of_line_ref_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Out_of_line_ref_constraintContext,0)


        def supplemental_logging_props(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_logging_propsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_properties" ):
                listener.enterObject_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_properties" ):
                listener.exitObject_properties(self)




    def object_properties(self):

        localctx = PlSqlParser.Object_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1066, self.RULE_object_properties)
        self._la = 0 # Token type
        try:
            self.state = 10629
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1278,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 10609
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1274,self._ctx)
                if la_ == 1:
                    self.state = 10607
                    self.column_name()
                    pass

                elif la_ == 2:
                    self.state = 10608
                    self.attribute_name()
                    pass


                self.state = 10613
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 10611
                    self.match(PlSqlParser.DEFAULT)
                    self.state = 10612
                    self.expression()


                self.state = 10624
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1277,self._ctx)
                if la_ == 1:
                    self.state = 10615
                    self.inline_constraint()
                    self.state = 10620
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,1276,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 10616
                            self.match(PlSqlParser.COMMA)
                            self.state = 10617
                            self.inline_constraint() 
                        self.state = 10622
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,1276,self._ctx)


                elif la_ == 2:
                    self.state = 10623
                    self.inline_ref_constraint()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 10626
                self.out_of_line_constraint()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 10627
                self.out_of_line_ref_constraint()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 10628
                self.supplemental_logging_props()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_table_substitutionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBSTITUTABLE(self):
            return self.getToken(PlSqlParser.SUBSTITUTABLE, 0)

        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_object_table_substitution

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_table_substitution" ):
                listener.enterObject_table_substitution(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_table_substitution" ):
                listener.exitObject_table_substitution(self)




    def object_table_substitution(self):

        localctx = PlSqlParser.Object_table_substitutionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1068, self.RULE_object_table_substitution)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10632
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 10631
                self.match(PlSqlParser.NOT)


            self.state = 10634
            self.match(PlSqlParser.SUBSTITUTABLE)
            self.state = 10635
            self.match(PlSqlParser.AT)
            self.state = 10636
            self.match(PlSqlParser.ALL)
            self.state = 10637
            self.match(PlSqlParser.LEVELS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Relational_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def immutable_table_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Immutable_table_clausesContext,0)


        def table_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Table_propertiesContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def relational_property(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Relational_propertyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Relational_propertyContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def blockchain_table_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Blockchain_table_clausesContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def COLLATION(self):
            return self.getToken(PlSqlParser.COLLATION, 0)

        def collation_name(self):
            return self.getTypedRuleContext(PlSqlParser.Collation_nameContext,0)


        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def COMMIT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMIT)
            else:
                return self.getToken(PlSqlParser.COMMIT, i)

        def DEFINITION(self):
            return self.getToken(PlSqlParser.DEFINITION, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def physical_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_propertiesContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def PRESERVE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRESERVE)
            else:
                return self.getToken(PlSqlParser.PRESERVE, i)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_relational_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRelational_table" ):
                listener.enterRelational_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRelational_table" ):
                listener.exitRelational_table(self)




    def relational_table(self):

        localctx = PlSqlParser.Relational_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1070, self.RULE_relational_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10650
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 10639
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10640
                self.relational_property()
                self.state = 10645
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 10641
                    self.match(PlSqlParser.COMMA)
                    self.state = 10642
                    self.relational_property()
                    self.state = 10647
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 10648
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 10652
            self.immutable_table_clauses()
            self.state = 10654
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1282,self._ctx)
            if la_ == 1:
                self.state = 10653
                self.blockchain_table_clauses()


            self.state = 10659
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 10656
                self.match(PlSqlParser.DEFAULT)
                self.state = 10657
                self.match(PlSqlParser.COLLATION)
                self.state = 10658
                self.collation_name()


            self.state = 10665
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1284,self._ctx)
            if la_ == 1:
                self.state = 10661
                self.match(PlSqlParser.ON)
                self.state = 10662
                self.match(PlSqlParser.COMMIT)
                self.state = 10663
                _la = self._input.LA(1)
                if not(_la==438 or _la==1372):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10664
                self.match(PlSqlParser.DEFINITION)


            self.state = 10671
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1193:
                self.state = 10667
                self.match(PlSqlParser.ON)
                self.state = 10668
                self.match(PlSqlParser.COMMIT)
                self.state = 10669
                _la = self._input.LA(1)
                if not(_la==381 or _la==1372):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 10670
                self.match(PlSqlParser.ROWS)


            self.state = 10674
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1286,self._ctx)
            if la_ == 1:
                self.state = 10673
                self.physical_properties()


            self.state = 10676
            self.table_properties()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Immutable_table_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def immutable_table_no_drop_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Immutable_table_no_drop_clauseContext,0)


        def immutable_table_no_delete_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Immutable_table_no_delete_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_immutable_table_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImmutable_table_clauses" ):
                listener.enterImmutable_table_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImmutable_table_clauses" ):
                listener.exitImmutable_table_clauses(self)




    def immutable_table_clauses(self):

        localctx = PlSqlParser.Immutable_table_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1072, self.RULE_immutable_table_clauses)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10679
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1287,self._ctx)
            if la_ == 1:
                self.state = 10678
                self.immutable_table_no_drop_clause()


            self.state = 10682
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1288,self._ctx)
            if la_ == 1:
                self.state = 10681
                self.immutable_table_no_delete_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Immutable_table_no_drop_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def IDLE(self):
            return self.getToken(PlSqlParser.IDLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_immutable_table_no_drop_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImmutable_table_no_drop_clause" ):
                listener.enterImmutable_table_no_drop_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImmutable_table_no_drop_clause" ):
                listener.exitImmutable_table_no_drop_clause(self)




    def immutable_table_no_drop_clause(self):

        localctx = PlSqlParser.Immutable_table_no_drop_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1074, self.RULE_immutable_table_no_drop_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10684
            self.match(PlSqlParser.NO)
            self.state = 10685
            self.match(PlSqlParser.DROP)
            self.state = 10691
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2109:
                self.state = 10686
                self.match(PlSqlParser.UNTIL)
                self.state = 10687
                self.numeric()
                self.state = 10688
                self.match(PlSqlParser.DAYS)
                self.state = 10689
                self.match(PlSqlParser.IDLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Immutable_table_no_delete_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def LOCKED(self):
            return self.getToken(PlSqlParser.LOCKED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_immutable_table_no_delete_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImmutable_table_no_delete_clause" ):
                listener.enterImmutable_table_no_delete_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImmutable_table_no_delete_clause" ):
                listener.exitImmutable_table_no_delete_clause(self)




    def immutable_table_no_delete_clause(self):

        localctx = PlSqlParser.Immutable_table_no_delete_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1076, self.RULE_immutable_table_no_delete_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10693
            self.match(PlSqlParser.NO)
            self.state = 10694
            self.match(PlSqlParser.DELETE)
            self.state = 10706
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [-1, 67, 158, 210, 214, 226, 246, 247, 368, 404, 467, 523, 554, 565, 580, 676, 701, 817, 827, 832, 877, 929, 959, 1010, 1017, 1057, 1065, 1074, 1085, 1117, 1193, 1236, 1261, 1265, 1275, 1296, 1299, 1429, 1501, 1521, 1528, 1567, 1678, 1996, 2123, 2171, 2253, 2308, 2354, 2367]:
                self.state = 10696
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==827:
                    self.state = 10695
                    self.match(PlSqlParser.LOCKED)


                pass
            elif token in [2109]:
                self.state = 10698
                self.match(PlSqlParser.UNTIL)
                self.state = 10699
                self.numeric()
                self.state = 10700
                self.match(PlSqlParser.DAYS)
                self.state = 10701
                self.match(PlSqlParser.AFTER)
                self.state = 10702
                self.match(PlSqlParser.INSERT)
                self.state = 10704
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==827:
                    self.state = 10703
                    self.match(PlSqlParser.LOCKED)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Blockchain_table_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def blockchain_drop_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Blockchain_drop_table_clauseContext,0)


        def blockchain_row_retention_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Blockchain_row_retention_clauseContext,0)


        def blockchain_hash_and_data_format_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Blockchain_hash_and_data_format_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_blockchain_table_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBlockchain_table_clauses" ):
                listener.enterBlockchain_table_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBlockchain_table_clauses" ):
                listener.exitBlockchain_table_clauses(self)




    def blockchain_table_clauses(self):

        localctx = PlSqlParser.Blockchain_table_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1078, self.RULE_blockchain_table_clauses)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10708
            self.blockchain_drop_table_clause()
            self.state = 10709
            self.blockchain_row_retention_clause()
            self.state = 10710
            self.blockchain_hash_and_data_format_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Blockchain_drop_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def IDLE(self):
            return self.getToken(PlSqlParser.IDLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_blockchain_drop_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBlockchain_drop_table_clause" ):
                listener.enterBlockchain_drop_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBlockchain_drop_table_clause" ):
                listener.exitBlockchain_drop_table_clause(self)




    def blockchain_drop_table_clause(self):

        localctx = PlSqlParser.Blockchain_drop_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1080, self.RULE_blockchain_drop_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10712
            self.match(PlSqlParser.NO)
            self.state = 10713
            self.match(PlSqlParser.DROP)
            self.state = 10719
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2109:
                self.state = 10714
                self.match(PlSqlParser.UNTIL)
                self.state = 10715
                self.numeric()
                self.state = 10716
                self.match(PlSqlParser.DAYS)
                self.state = 10717
                self.match(PlSqlParser.IDLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Blockchain_row_retention_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def LOCKED(self):
            return self.getToken(PlSqlParser.LOCKED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_blockchain_row_retention_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBlockchain_row_retention_clause" ):
                listener.enterBlockchain_row_retention_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBlockchain_row_retention_clause" ):
                listener.exitBlockchain_row_retention_clause(self)




    def blockchain_row_retention_clause(self):

        localctx = PlSqlParser.Blockchain_row_retention_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1082, self.RULE_blockchain_row_retention_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10721
            self.match(PlSqlParser.NO)
            self.state = 10722
            self.match(PlSqlParser.DELETE)
            self.state = 10734
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [827, 2277]:
                self.state = 10724
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==827:
                    self.state = 10723
                    self.match(PlSqlParser.LOCKED)


                pass
            elif token in [2109]:
                self.state = 10726
                self.match(PlSqlParser.UNTIL)
                self.state = 10727
                self.numeric()
                self.state = 10728
                self.match(PlSqlParser.DAYS)
                self.state = 10729
                self.match(PlSqlParser.AFTER)
                self.state = 10730
                self.match(PlSqlParser.INSERT)
                self.state = 10732
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==827:
                    self.state = 10731
                    self.match(PlSqlParser.LOCKED)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Blockchain_hash_and_data_format_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HASHING(self):
            return self.getToken(PlSqlParser.HASHING, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def SHA2_512_Q(self):
            return self.getToken(PlSqlParser.SHA2_512_Q, 0)

        def VERSION(self):
            return self.getToken(PlSqlParser.VERSION, 0)

        def V1_Q(self):
            return self.getToken(PlSqlParser.V1_Q, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_blockchain_hash_and_data_format_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBlockchain_hash_and_data_format_clause" ):
                listener.enterBlockchain_hash_and_data_format_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBlockchain_hash_and_data_format_clause" ):
                listener.exitBlockchain_hash_and_data_format_clause(self)




    def blockchain_hash_and_data_format_clause(self):

        localctx = PlSqlParser.Blockchain_hash_and_data_format_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1084, self.RULE_blockchain_hash_and_data_format_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10736
            self.match(PlSqlParser.HASHING)
            self.state = 10737
            self.match(PlSqlParser.USING)
            self.state = 10738
            self.match(PlSqlParser.SHA2_512_Q)
            self.state = 10739
            self.match(PlSqlParser.VERSION)
            self.state = 10740
            self.match(PlSqlParser.V1_Q)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Collation_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_collation_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollation_name" ):
                listener.enterCollation_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollation_name" ):
                listener.exitCollation_name(self)




    def collation_name(self):

        localctx = PlSqlParser.Collation_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1086, self.RULE_collation_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10742
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Column_propertiesContext,0)


        def read_only_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Read_only_clauseContext,0)


        def indexing_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Indexing_clauseContext,0)


        def table_partitioning_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Table_partitioning_clausesContext,0)


        def attribute_clustering_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Attribute_clustering_clauseContext,0)


        def result_cache_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Result_cache_clauseContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def monitoring_nomonitoring(self):
            return self.getTypedRuleContext(PlSqlParser.Monitoring_nomonitoringContext,0)


        def enable_disable_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Enable_disable_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Enable_disable_clauseContext,i)


        def row_movement_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Row_movement_clauseContext,0)


        def logical_replication_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Logical_replication_clauseContext,0)


        def flashback_archive_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_archive_clauseContext,0)


        def physical_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Physical_propertiesContext,0)


        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def ARCHIVAL(self):
            return self.getToken(PlSqlParser.ARCHIVAL, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def select_only_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_only_statementContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def EXCHANGE(self):
            return self.getToken(PlSqlParser.EXCHANGE, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def table_name(self):
            return self.getTypedRuleContext(PlSqlParser.Table_nameContext,0)


        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def ROWDEPENDENCIES(self):
            return self.getToken(PlSqlParser.ROWDEPENDENCIES, 0)

        def NOROWDEPENDENCIES(self):
            return self.getToken(PlSqlParser.NOROWDEPENDENCIES, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_table_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_properties" ):
                listener.enterTable_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_properties" ):
                listener.exitTable_properties(self)




    def table_properties(self):

        localctx = PlSqlParser.Table_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1088, self.RULE_table_properties)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10745
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==226 or _la==817 or _la==959 or _la==2171 or _la==2253:
                self.state = 10744
                self.column_properties()


            self.state = 10748
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1429:
                self.state = 10747
                self.read_only_clause()


            self.state = 10751
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==676:
                self.state = 10750
                self.indexing_clause()


            self.state = 10754
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1275:
                self.state = 10753
                self.table_partitioning_clauses()


            self.state = 10757
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==214:
                self.state = 10756
                self.attribute_clustering_clause()


            self.state = 10760
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==158 or _la==1010:
                self.state = 10759
                _la = self._input.LA(1)
                if not(_la==158 or _la==1010):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 10763
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1501:
                self.state = 10762
                self.result_cache_clause()


            self.state = 10766
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 10765
                self.parallel_clause()


            self.state = 10769
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==929 or _la==1065:
                self.state = 10768
                self.monitoring_nomonitoring()


            self.state = 10772
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1117 or _la==1521:
                self.state = 10771
                _la = self._input.LA(1)
                if not(_la==1117 or _la==1521):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 10777
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1307,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 10774
                    self.enable_disable_clause() 
                self.state = 10779
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1307,self._ctx)

            self.state = 10781
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1308,self._ctx)
            if la_ == 1:
                self.state = 10780
                self.row_movement_clause()


            self.state = 10784
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 10783
                self.logical_replication_clause()


            self.state = 10787
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1310,self._ctx)
            if la_ == 1:
                self.state = 10786
                self.flashback_archive_clause()


            self.state = 10790
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if ((((_la - 210)) & ~0x3f) == 0 and ((1 << (_la - 210)) & 206158430209) != 0) or _la==523 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or ((((_la - 1236)) & ~0x3f) == 0 and ((1 << (_la - 1236)) & -8070450532247928831) != 0) or _la==1567 or _la==1678 or _la==1996:
                self.state = 10789
                self.physical_properties()


            self.state = 10794
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1528:
                self.state = 10792
                self.match(PlSqlParser.ROW)
                self.state = 10793
                self.match(PlSqlParser.ARCHIVAL)


            self.state = 10808
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [67]:
                self.state = 10796
                self.match(PlSqlParser.AS)
                self.state = 10797
                self.select_only_statement()
                pass
            elif token in [580]:
                self.state = 10798
                self.match(PlSqlParser.FOR)
                self.state = 10799
                self.match(PlSqlParser.EXCHANGE)
                self.state = 10800
                self.match(PlSqlParser.WITH)
                self.state = 10801
                self.match(PlSqlParser.TABLE)
                self.state = 10805
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1313,self._ctx)
                if la_ == 1:
                    self.state = 10802
                    self.schema_name()
                    self.state = 10803
                    self.match(PlSqlParser.PERIOD)


                self.state = 10807
                self.table_name()
                pass
            elif token in [-1, 1074, 1265, 2123, 2308, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Read_only_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_read_only_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRead_only_clause" ):
                listener.enterRead_only_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRead_only_clause" ):
                listener.exitRead_only_clause(self)




    def read_only_clause(self):

        localctx = PlSqlParser.Read_only_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1090, self.RULE_read_only_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10810
            self.match(PlSqlParser.READ)
            self.state = 10811
            _la = self._input.LA(1)
            if not(_la==1192 or _la==2216):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Indexing_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INDEXING(self):
            return self.getToken(PlSqlParser.INDEXING, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_indexing_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndexing_clause" ):
                listener.enterIndexing_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndexing_clause" ):
                listener.exitIndexing_clause(self)




    def indexing_clause(self):

        localctx = PlSqlParser.Indexing_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1092, self.RULE_indexing_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10813
            self.match(PlSqlParser.INDEXING)
            self.state = 10814
            _la = self._input.LA(1)
            if not(_la==1178 or _la==1193):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Attribute_clustering_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CLUSTERING(self):
            return self.getToken(PlSqlParser.CLUSTERING, 0)

        def cluster_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_clauseContext,0)


        def clustering_join(self):
            return self.getTypedRuleContext(PlSqlParser.Clustering_joinContext,0)


        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def LOAD(self):
            return self.getToken(PlSqlParser.LOAD, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def MOVEMENT(self):
            return self.getToken(PlSqlParser.MOVEMENT, 0)

        def zonemap_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_clauseContext,0)


        def yes_no(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Yes_noContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Yes_noContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_attribute_clustering_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAttribute_clustering_clause" ):
                listener.enterAttribute_clustering_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAttribute_clustering_clause" ):
                listener.exitAttribute_clustering_clause(self)




    def attribute_clustering_clause(self):

        localctx = PlSqlParser.Attribute_clustering_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1094, self.RULE_attribute_clustering_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10816
            self.match(PlSqlParser.CLUSTERING)
            self.state = 10818
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 10817
                self.clustering_join()


            self.state = 10820
            self.cluster_clause()
            self.state = 10826
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1317,self._ctx)
            if la_ == 1:
                self.state = 10822
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074 or _la==2261:
                    self.state = 10821
                    self.yes_no()


                self.state = 10824
                self.match(PlSqlParser.ON)
                self.state = 10825
                self.match(PlSqlParser.LOAD)


            self.state = 10834
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1319,self._ctx)
            if la_ == 1:
                self.state = 10829
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074 or _la==2261:
                    self.state = 10828
                    self.yes_no()


                self.state = 10831
                self.match(PlSqlParser.ON)
                self.state = 10832
                self.match(PlSqlParser.DATA)
                self.state = 10833
                self.match(PlSqlParser.MOVEMENT)


            self.state = 10837
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2210 or _la==2212:
                self.state = 10836
                self.zonemap_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Clustering_joinContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_name(self):
            return self.getTypedRuleContext(PlSqlParser.Table_nameContext,0)


        def clustering_join_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Clustering_join_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Clustering_join_itemContext,i)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_clustering_join

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClustering_join" ):
                listener.enterClustering_join(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClustering_join" ):
                listener.exitClustering_join(self)




    def clustering_join(self):

        localctx = PlSqlParser.Clustering_joinContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1096, self.RULE_clustering_join)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10842
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1321,self._ctx)
            if la_ == 1:
                self.state = 10839
                self.schema_name()
                self.state = 10840
                self.match(PlSqlParser.PERIOD)


            self.state = 10844
            self.table_name()
            self.state = 10845
            self.clustering_join_item()
            self.state = 10850
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10846
                self.match(PlSqlParser.COMMA)
                self.state = 10847
                self.clustering_join_item()
                self.state = 10852
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Clustering_join_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def table_name(self):
            return self.getTypedRuleContext(PlSqlParser.Table_nameContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def equijoin_condition(self):
            return self.getTypedRuleContext(PlSqlParser.Equijoin_conditionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_clustering_join_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClustering_join_item" ):
                listener.enterClustering_join_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClustering_join_item" ):
                listener.exitClustering_join_item(self)




    def clustering_join_item(self):

        localctx = PlSqlParser.Clustering_join_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1098, self.RULE_clustering_join_item)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10853
            self.match(PlSqlParser.JOIN)
            self.state = 10857
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1323,self._ctx)
            if la_ == 1:
                self.state = 10854
                self.schema_name()
                self.state = 10855
                self.match(PlSqlParser.PERIOD)


            self.state = 10859
            self.table_name()
            self.state = 10860
            self.match(PlSqlParser.ON)
            self.state = 10861
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10862
            self.equijoin_condition()
            self.state = 10863
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Equijoin_conditionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_equijoin_condition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEquijoin_condition" ):
                listener.enterEquijoin_condition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEquijoin_condition" ):
                listener.exitEquijoin_condition(self)




    def equijoin_condition(self):

        localctx = PlSqlParser.Equijoin_conditionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1100, self.RULE_equijoin_condition)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10865
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cluster_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def clustering_columns(self):
            return self.getTypedRuleContext(PlSqlParser.Clustering_columnsContext,0)


        def LINEAR(self):
            return self.getToken(PlSqlParser.LINEAR, 0)

        def INTERLEAVED(self):
            return self.getToken(PlSqlParser.INTERLEAVED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cluster_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCluster_clause" ):
                listener.enterCluster_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCluster_clause" ):
                listener.exitCluster_clause(self)




    def cluster_clause(self):

        localctx = PlSqlParser.Cluster_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1102, self.RULE_cluster_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10867
            self.match(PlSqlParser.BY)
            self.state = 10869
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==727 or _la==811:
                self.state = 10868
                _la = self._input.LA(1)
                if not(_la==727 or _la==811):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 10871
            self.match(PlSqlParser.ORDER)
            self.state = 10872
            self.clustering_columns()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Clustering_columnsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def clustering_column_group(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Clustering_column_groupContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Clustering_column_groupContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_clustering_columns

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClustering_columns" ):
                listener.enterClustering_columns(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClustering_columns" ):
                listener.exitClustering_columns(self)




    def clustering_columns(self):

        localctx = PlSqlParser.Clustering_columnsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1104, self.RULE_clustering_columns)
        self._la = 0 # Token type
        try:
            self.state = 10886
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1326,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 10874
                self.clustering_column_group()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 10875
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10876
                self.clustering_column_group()
                self.state = 10881
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 10877
                    self.match(PlSqlParser.COMMA)
                    self.state = 10878
                    self.clustering_column_group()
                    self.state = 10883
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 10884
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Clustering_column_groupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_clustering_column_group

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClustering_column_group" ):
                listener.enterClustering_column_group(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClustering_column_group" ):
                listener.exitClustering_column_group(self)




    def clustering_column_group(self):

        localctx = PlSqlParser.Clustering_column_groupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1106, self.RULE_clustering_column_group)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10888
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10889
            self.column_name()
            self.state = 10894
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10890
                self.match(PlSqlParser.COMMA)
                self.state = 10891
                self.column_name()
                self.state = 10896
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 10897
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Yes_noContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def YES(self):
            return self.getToken(PlSqlParser.YES, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_yes_no

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterYes_no" ):
                listener.enterYes_no(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitYes_no" ):
                listener.exitYes_no(self)




    def yes_no(self):

        localctx = PlSqlParser.Yes_noContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1108, self.RULE_yes_no)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10899
            _la = self._input.LA(1)
            if not(_la==1074 or _la==2261):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Zonemap_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def ZONEMAP(self):
            return self.getToken(PlSqlParser.ZONEMAP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def zonemap_name(self):
            return self.getTypedRuleContext(PlSqlParser.Zonemap_nameContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_zonemap_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterZonemap_clause" ):
                listener.enterZonemap_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitZonemap_clause" ):
                listener.exitZonemap_clause(self)




    def zonemap_clause(self):

        localctx = PlSqlParser.Zonemap_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1110, self.RULE_zonemap_clause)
        self._la = 0 # Token type
        try:
            self.state = 10913
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2212]:
                self.enterOuterAlt(localctx, 1)
                self.state = 10901
                self.match(PlSqlParser.WITH)
                self.state = 10902
                self.match(PlSqlParser.MATERIALIZED)
                self.state = 10903
                self.match(PlSqlParser.ZONEMAP)
                self.state = 10908
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 10904
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 10905
                    self.zonemap_name()
                    self.state = 10906
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [2210]:
                self.enterOuterAlt(localctx, 2)
                self.state = 10910
                self.match(PlSqlParser.WITHOUT)
                self.state = 10911
                self.match(PlSqlParser.MATERIALIZED)
                self.state = 10912
                self.match(PlSqlParser.ZONEMAP)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logical_replication_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def REPLICATION(self):
            return self.getToken(PlSqlParser.REPLICATION, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def ALLOW(self):
            return self.getToken(PlSqlParser.ALLOW, 0)

        def NOVALIDATE(self):
            return self.getToken(PlSqlParser.NOVALIDATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_logical_replication_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogical_replication_clause" ):
                listener.enterLogical_replication_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogical_replication_clause" ):
                listener.exitLogical_replication_clause(self)




    def logical_replication_clause(self):

        localctx = PlSqlParser.Logical_replication_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1112, self.RULE_logical_replication_clause)
        self._la = 0 # Token type
        try:
            self.state = 10929
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [404]:
                self.enterOuterAlt(localctx, 1)
                self.state = 10915
                self.match(PlSqlParser.DISABLE)
                self.state = 10916
                self.match(PlSqlParser.LOGICAL)
                self.state = 10917
                self.match(PlSqlParser.REPLICATION)
                pass
            elif token in [467]:
                self.enterOuterAlt(localctx, 2)
                self.state = 10918
                self.match(PlSqlParser.ENABLE)
                self.state = 10919
                self.match(PlSqlParser.LOGICAL)
                self.state = 10920
                self.match(PlSqlParser.REPLICATION)
                self.state = 10927
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==38 or _la==40:
                    self.state = 10924
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [38]:
                        self.state = 10921
                        self.match(PlSqlParser.ALL)
                        pass
                    elif token in [40]:
                        self.state = 10922
                        self.match(PlSqlParser.ALLOW)
                        self.state = 10923
                        self.match(PlSqlParser.NOVALIDATE)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 10926
                    self.match(PlSqlParser.KEYS)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_name" ):
                listener.enterTable_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_name" ):
                listener.exitTable_name(self)




    def table_name(self):

        localctx = PlSqlParser.Table_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1114, self.RULE_table_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10931
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Relational_propertyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_definition(self):
            return self.getTypedRuleContext(PlSqlParser.Column_definitionContext,0)


        def virtual_column_definition(self):
            return self.getTypedRuleContext(PlSqlParser.Virtual_column_definitionContext,0)


        def period_definition(self):
            return self.getTypedRuleContext(PlSqlParser.Period_definitionContext,0)


        def out_of_line_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Out_of_line_constraintContext,0)


        def out_of_line_ref_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Out_of_line_ref_constraintContext,0)


        def supplemental_logging_props(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_logging_propsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_relational_property

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRelational_property" ):
                listener.enterRelational_property(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRelational_property" ):
                listener.exitRelational_property(self)




    def relational_property(self):

        localctx = PlSqlParser.Relational_propertyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1116, self.RULE_relational_property)
        try:
            self.state = 10939
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1333,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 10933
                self.column_definition()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 10934
                self.virtual_column_definition()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 10935
                self.period_definition()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 10936
                self.out_of_line_constraint()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 10937
                self.out_of_line_ref_constraint()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 10938
                self.supplemental_logging_props()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_partitioning_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def range_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Range_partitionsContext,0)


        def list_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.List_partitionsContext,0)


        def hash_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_partitionsContext,0)


        def composite_range_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Composite_range_partitionsContext,0)


        def composite_list_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Composite_list_partitionsContext,0)


        def composite_hash_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Composite_hash_partitionsContext,0)


        def reference_partitioning(self):
            return self.getTypedRuleContext(PlSqlParser.Reference_partitioningContext,0)


        def system_partitioning(self):
            return self.getTypedRuleContext(PlSqlParser.System_partitioningContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_partitioning_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_partitioning_clauses" ):
                listener.enterTable_partitioning_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_partitioning_clauses" ):
                listener.exitTable_partitioning_clauses(self)




    def table_partitioning_clauses(self):

        localctx = PlSqlParser.Table_partitioning_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1118, self.RULE_table_partitioning_clauses)
        try:
            self.state = 10949
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1334,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 10941
                self.range_partitions()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 10942
                self.list_partitions()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 10943
                self.hash_partitions()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 10944
                self.composite_range_partitions()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 10945
                self.composite_list_partitions()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 10946
                self.composite_hash_partitions()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 10947
                self.reference_partitioning()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 10948
                self.system_partitioning()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Range_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def range_values_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Range_values_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Range_values_clauseContext,i)


        def table_partition_description(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_partition_descriptionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_partition_descriptionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def INTERVAL(self):
            return self.getToken(PlSqlParser.INTERVAL, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_range_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRange_partitions" ):
                listener.enterRange_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRange_partitions" ):
                listener.exitRange_partitions(self)




    def range_partitions(self):

        localctx = PlSqlParser.Range_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1120, self.RULE_range_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 10951
            self.match(PlSqlParser.PARTITION)
            self.state = 10952
            self.match(PlSqlParser.BY)
            self.state = 10953
            self.match(PlSqlParser.RANGE)
            self.state = 10954
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10955
            self.column_name()
            self.state = 10960
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10956
                self.match(PlSqlParser.COMMA)
                self.state = 10957
                self.column_name()
                self.state = 10962
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 10963
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 10983
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==733:
                self.state = 10964
                self.match(PlSqlParser.INTERVAL)
                self.state = 10965
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 10966
                self.expression()
                self.state = 10967
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 10981
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1679:
                    self.state = 10968
                    self.match(PlSqlParser.STORE)
                    self.state = 10969
                    self.match(PlSqlParser.IN)
                    self.state = 10970
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 10971
                    self.tablespace()
                    self.state = 10976
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 10972
                        self.match(PlSqlParser.COMMA)
                        self.state = 10973
                        self.tablespace()
                        self.state = 10978
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 10979
                    self.match(PlSqlParser.RIGHT_PAREN)




            self.state = 10985
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 10986
            self.match(PlSqlParser.PARTITION)
            self.state = 10988
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 10987
                self.partition_name()


            self.state = 10990
            self.range_values_clause()
            self.state = 10991
            self.table_partition_description()
            self.state = 11002
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 10992
                self.match(PlSqlParser.COMMA)
                self.state = 10993
                self.match(PlSqlParser.PARTITION)
                self.state = 10995
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                    self.state = 10994
                    self.partition_name()


                self.state = 10997
                self.range_values_clause()
                self.state = 10998
                self.table_partition_description()
                self.state = 11004
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11005
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class List_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def LIST(self):
            return self.getToken(PlSqlParser.LIST, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def list_values_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.List_values_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.List_values_clauseContext,i)


        def table_partition_description(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_partition_descriptionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_partition_descriptionContext,i)


        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_list_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterList_partitions" ):
                listener.enterList_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitList_partitions" ):
                listener.exitList_partitions(self)




    def list_partitions(self):

        localctx = PlSqlParser.List_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1122, self.RULE_list_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11007
            self.match(PlSqlParser.PARTITION)
            self.state = 11008
            self.match(PlSqlParser.BY)
            self.state = 11009
            self.match(PlSqlParser.LIST)
            self.state = 11010
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11011
            self.column_name()
            self.state = 11012
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11013
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11014
            self.match(PlSqlParser.PARTITION)
            self.state = 11016
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 11015
                self.partition_name()


            self.state = 11018
            self.list_values_clause()
            self.state = 11019
            self.table_partition_description()
            self.state = 11030
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11020
                self.match(PlSqlParser.COMMA)
                self.state = 11021
                self.match(PlSqlParser.PARTITION)
                self.state = 11023
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                    self.state = 11022
                    self.partition_name()


                self.state = 11025
                self.list_values_clause()
                self.state = 11026
                self.table_partition_description()
                self.state = 11032
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11033
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hash_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def HASH(self):
            return self.getToken(PlSqlParser.HASH, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def individual_hash_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Individual_hash_partitionsContext,0)


        def hash_partitions_by_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_partitions_by_quantityContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hash_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHash_partitions" ):
                listener.enterHash_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHash_partitions" ):
                listener.exitHash_partitions(self)




    def hash_partitions(self):

        localctx = PlSqlParser.Hash_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1124, self.RULE_hash_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11035
            self.match(PlSqlParser.PARTITION)
            self.state = 11036
            self.match(PlSqlParser.BY)
            self.state = 11037
            self.match(PlSqlParser.HASH)
            self.state = 11038
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11039
            self.column_name()
            self.state = 11044
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11040
                self.match(PlSqlParser.COMMA)
                self.state = 11041
                self.column_name()
                self.state = 11046
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11047
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11050
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 11048
                self.individual_hash_partitions()
                pass
            elif token in [1277]:
                self.state = 11049
                self.hash_partitions_by_quantity()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Individual_hash_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def partitioning_storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partitioning_storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partitioning_storage_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_individual_hash_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndividual_hash_partitions" ):
                listener.enterIndividual_hash_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndividual_hash_partitions" ):
                listener.exitIndividual_hash_partitions(self)




    def individual_hash_partitions(self):

        localctx = PlSqlParser.Individual_hash_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1126, self.RULE_individual_hash_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11052
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11053
            self.match(PlSqlParser.PARTITION)
            self.state = 11055
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1347,self._ctx)
            if la_ == 1:
                self.state = 11054
                self.partition_name()


            self.state = 11058
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==817 or _la==1017 or _la==1249 or _la==1996 or _la==2171:
                self.state = 11057
                self.partitioning_storage_clause()


            self.state = 11070
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11060
                self.match(PlSqlParser.COMMA)
                self.state = 11061
                self.match(PlSqlParser.PARTITION)
                self.state = 11063
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1349,self._ctx)
                if la_ == 1:
                    self.state = 11062
                    self.partition_name()


                self.state = 11066
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==246 or _la==817 or _la==1017 or _la==1249 or _la==1996 or _la==2171:
                    self.state = 11065
                    self.partitioning_storage_clause()


                self.state = 11072
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11073
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hash_partitions_by_quantityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITIONS(self):
            return self.getToken(PlSqlParser.PARTITIONS, 0)

        def hash_partition_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_partition_quantityContext,0)


        def STORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.STORE)
            else:
                return self.getToken(PlSqlParser.STORE, i)

        def IN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IN)
            else:
                return self.getToken(PlSqlParser.IN, i)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hash_partitions_by_quantity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHash_partitions_by_quantity" ):
                listener.enterHash_partitions_by_quantity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHash_partitions_by_quantity" ):
                listener.exitHash_partitions_by_quantity(self)




    def hash_partitions_by_quantity(self):

        localctx = PlSqlParser.Hash_partitions_by_quantityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1128, self.RULE_hash_partitions_by_quantity)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11075
            self.match(PlSqlParser.PARTITIONS)
            self.state = 11076
            self.hash_partition_quantity()
            self.state = 11090
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679:
                self.state = 11077
                self.match(PlSqlParser.STORE)
                self.state = 11078
                self.match(PlSqlParser.IN)
                self.state = 11079
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11080
                self.tablespace()
                self.state = 11085
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11081
                    self.match(PlSqlParser.COMMA)
                    self.state = 11082
                    self.tablespace()
                    self.state = 11087
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 11088
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 11094
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1354,self._ctx)
            if la_ == 1:
                self.state = 11092
                self.table_compression()

            elif la_ == 2:
                self.state = 11093
                self.key_compression()


            self.state = 11110
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1249:
                self.state = 11096
                self.match(PlSqlParser.OVERFLOW)
                self.state = 11097
                self.match(PlSqlParser.STORE)
                self.state = 11098
                self.match(PlSqlParser.IN)
                self.state = 11099
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11100
                self.tablespace()
                self.state = 11105
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11101
                    self.match(PlSqlParser.COMMA)
                    self.state = 11102
                    self.tablespace()
                    self.state = 11107
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 11108
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hash_partition_quantityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hash_partition_quantity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHash_partition_quantity" ):
                listener.enterHash_partition_quantity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHash_partition_quantity" ):
                listener.exitHash_partition_quantity(self)




    def hash_partition_quantity(self):

        localctx = PlSqlParser.Hash_partition_quantityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1130, self.RULE_hash_partition_quantity)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11112
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Composite_range_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def range_partition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Range_partition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Range_partition_descContext,i)


        def subpartition_by_range(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_rangeContext,0)


        def subpartition_by_list(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_listContext,0)


        def subpartition_by_hash(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_hashContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def INTERVAL(self):
            return self.getToken(PlSqlParser.INTERVAL, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_composite_range_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComposite_range_partitions" ):
                listener.enterComposite_range_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComposite_range_partitions" ):
                listener.exitComposite_range_partitions(self)




    def composite_range_partitions(self):

        localctx = PlSqlParser.Composite_range_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1132, self.RULE_composite_range_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11114
            self.match(PlSqlParser.PARTITION)
            self.state = 11115
            self.match(PlSqlParser.BY)
            self.state = 11116
            self.match(PlSqlParser.RANGE)
            self.state = 11117
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11118
            self.column_name()
            self.state = 11123
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11119
                self.match(PlSqlParser.COMMA)
                self.state = 11120
                self.column_name()
                self.state = 11125
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11126
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11146
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==733:
                self.state = 11127
                self.match(PlSqlParser.INTERVAL)
                self.state = 11128
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11129
                self.expression()
                self.state = 11130
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 11144
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1679:
                    self.state = 11131
                    self.match(PlSqlParser.STORE)
                    self.state = 11132
                    self.match(PlSqlParser.IN)
                    self.state = 11133
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 11134
                    self.tablespace()
                    self.state = 11139
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 11135
                        self.match(PlSqlParser.COMMA)
                        self.state = 11136
                        self.tablespace()
                        self.state = 11141
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 11142
                    self.match(PlSqlParser.RIGHT_PAREN)




            self.state = 11151
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1361,self._ctx)
            if la_ == 1:
                self.state = 11148
                self.subpartition_by_range()
                pass

            elif la_ == 2:
                self.state = 11149
                self.subpartition_by_list()
                pass

            elif la_ == 3:
                self.state = 11150
                self.subpartition_by_hash()
                pass


            self.state = 11153
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11154
            self.range_partition_desc()
            self.state = 11159
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11155
                self.match(PlSqlParser.COMMA)
                self.state = 11156
                self.range_partition_desc()
                self.state = 11161
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11162
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Composite_list_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def LIST(self):
            return self.getToken(PlSqlParser.LIST, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def list_partition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.List_partition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.List_partition_descContext,i)


        def subpartition_by_range(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_rangeContext,0)


        def subpartition_by_list(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_listContext,0)


        def subpartition_by_hash(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_hashContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_composite_list_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComposite_list_partitions" ):
                listener.enterComposite_list_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComposite_list_partitions" ):
                listener.exitComposite_list_partitions(self)




    def composite_list_partitions(self):

        localctx = PlSqlParser.Composite_list_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1134, self.RULE_composite_list_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11164
            self.match(PlSqlParser.PARTITION)
            self.state = 11165
            self.match(PlSqlParser.BY)
            self.state = 11166
            self.match(PlSqlParser.LIST)
            self.state = 11167
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11168
            self.column_name()
            self.state = 11169
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11173
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1363,self._ctx)
            if la_ == 1:
                self.state = 11170
                self.subpartition_by_range()
                pass

            elif la_ == 2:
                self.state = 11171
                self.subpartition_by_list()
                pass

            elif la_ == 3:
                self.state = 11172
                self.subpartition_by_hash()
                pass


            self.state = 11175
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11176
            self.list_partition_desc()
            self.state = 11181
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11177
                self.match(PlSqlParser.COMMA)
                self.state = 11178
                self.list_partition_desc()
                self.state = 11183
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11184
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Composite_hash_partitionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def HASH(self):
            return self.getToken(PlSqlParser.HASH, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def subpartition_by_range(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_rangeContext,0)


        def subpartition_by_list(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_listContext,0)


        def subpartition_by_hash(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_by_hashContext,0)


        def individual_hash_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Individual_hash_partitionsContext,0)


        def hash_partitions_by_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_partitions_by_quantityContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_composite_hash_partitions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComposite_hash_partitions" ):
                listener.enterComposite_hash_partitions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComposite_hash_partitions" ):
                listener.exitComposite_hash_partitions(self)




    def composite_hash_partitions(self):

        localctx = PlSqlParser.Composite_hash_partitionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1136, self.RULE_composite_hash_partitions)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11186
            self.match(PlSqlParser.PARTITION)
            self.state = 11187
            self.match(PlSqlParser.BY)
            self.state = 11188
            self.match(PlSqlParser.HASH)
            self.state = 11189
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11192 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 11190
                self.match(PlSqlParser.COMMA)
                self.state = 11191
                self.column_name()
                self.state = 11194 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==2353):
                    break

            self.state = 11196
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11200
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1366,self._ctx)
            if la_ == 1:
                self.state = 11197
                self.subpartition_by_range()
                pass

            elif la_ == 2:
                self.state = 11198
                self.subpartition_by_list()
                pass

            elif la_ == 3:
                self.state = 11199
                self.subpartition_by_hash()
                pass


            self.state = 11204
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 11202
                self.individual_hash_partitions()
                pass
            elif token in [1277]:
                self.state = 11203
                self.hash_partitions_by_quantity()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Reference_partitioningContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def REFERENCE(self):
            return self.getToken(PlSqlParser.REFERENCE, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def reference_partition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Reference_partition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Reference_partition_descContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_reference_partitioning

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReference_partitioning" ):
                listener.enterReference_partitioning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReference_partitioning" ):
                listener.exitReference_partitioning(self)




    def reference_partitioning(self):

        localctx = PlSqlParser.Reference_partitioningContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1138, self.RULE_reference_partitioning)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11206
            self.match(PlSqlParser.PARTITION)
            self.state = 11207
            self.match(PlSqlParser.BY)
            self.state = 11208
            self.match(PlSqlParser.REFERENCE)
            self.state = 11209
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11210
            self.regular_id()
            self.state = 11211
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11223
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 11212
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11213
                self.reference_partition_desc()
                self.state = 11218
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11214
                    self.match(PlSqlParser.COMMA)
                    self.state = 11215
                    self.reference_partition_desc()
                    self.state = 11220
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 11221
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Reference_partition_descContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def table_partition_description(self):
            return self.getTypedRuleContext(PlSqlParser.Table_partition_descriptionContext,0)


        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_reference_partition_desc

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReference_partition_desc" ):
                listener.enterReference_partition_desc(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReference_partition_desc" ):
                listener.exitReference_partition_desc(self)




    def reference_partition_desc(self):

        localctx = PlSqlParser.Reference_partition_descContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1140, self.RULE_reference_partition_desc)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11225
            self.match(PlSqlParser.PARTITION)
            self.state = 11227
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1370,self._ctx)
            if la_ == 1:
                self.state = 11226
                self.partition_name()


            self.state = 11229
            self.table_partition_description()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class System_partitioningContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def PARTITIONS(self):
            return self.getToken(PlSqlParser.PARTITIONS, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def reference_partition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Reference_partition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Reference_partition_descContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_system_partitioning

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSystem_partitioning" ):
                listener.enterSystem_partitioning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSystem_partitioning" ):
                listener.exitSystem_partitioning(self)




    def system_partitioning(self):

        localctx = PlSqlParser.System_partitioningContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1142, self.RULE_system_partitioning)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11231
            self.match(PlSqlParser.PARTITION)
            self.state = 11232
            self.match(PlSqlParser.BY)
            self.state = 11233
            self.match(PlSqlParser.SYSTEM)
            self.state = 11244
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1277]:
                self.state = 11234
                self.match(PlSqlParser.PARTITIONS)
                self.state = 11235
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [1275]:
                self.state = 11236
                self.reference_partition_desc()
                self.state = 11241
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11237
                    self.match(PlSqlParser.COMMA)
                    self.state = 11238
                    self.reference_partition_desc()
                    self.state = 11243
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [-1, 67, 158, 210, 214, 246, 247, 404, 467, 523, 554, 565, 580, 701, 832, 877, 929, 1010, 1017, 1057, 1065, 1074, 1085, 1117, 1236, 1261, 1265, 1296, 1299, 1501, 1521, 1528, 1567, 1678, 1996, 2123, 2308, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Range_partition_descContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def table_partition_description(self):
            return self.getTypedRuleContext(PlSqlParser.Table_partition_descriptionContext,0)


        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def range_values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Range_values_clauseContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def hash_subparts_by_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_subparts_by_quantityContext,0)


        def range_subpartition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Range_subpartition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Range_subpartition_descContext,i)


        def list_subpartition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.List_subpartition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.List_subpartition_descContext,i)


        def individual_hash_subparts(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Individual_hash_subpartsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Individual_hash_subpartsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_range_partition_desc

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRange_partition_desc" ):
                listener.enterRange_partition_desc(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRange_partition_desc" ):
                listener.exitRange_partition_desc(self)




    def range_partition_desc(self):

        localctx = PlSqlParser.Range_partition_descContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1144, self.RULE_range_partition_desc)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11246
            self.match(PlSqlParser.PARTITION)
            self.state = 11248
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1373,self._ctx)
            if la_ == 1:
                self.state = 11247
                self.partition_name()


            self.state = 11251
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2164:
                self.state = 11250
                self.range_values_clause()


            self.state = 11253
            self.table_partition_description()
            self.state = 11286
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1690 or _la==2347:
                self.state = 11284
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2347]:
                    self.state = 11254
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 11279
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1378,self._ctx)
                    if la_ == 1:
                        self.state = 11255
                        self.range_subpartition_desc()
                        self.state = 11260
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 11256
                            self.match(PlSqlParser.COMMA)
                            self.state = 11257
                            self.range_subpartition_desc()
                            self.state = 11262
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass

                    elif la_ == 2:
                        self.state = 11263
                        self.list_subpartition_desc()
                        self.state = 11268
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 11264
                            self.match(PlSqlParser.COMMA)
                            self.state = 11265
                            self.list_subpartition_desc()
                            self.state = 11270
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass

                    elif la_ == 3:
                        self.state = 11271
                        self.individual_hash_subparts()
                        self.state = 11276
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 11272
                            self.match(PlSqlParser.COMMA)
                            self.state = 11273
                            self.individual_hash_subparts()
                            self.state = 11278
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass


                    self.state = 11281
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                elif token in [1690]:
                    self.state = 11283
                    self.hash_subparts_by_quantity()
                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class List_partition_descContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def table_partition_description(self):
            return self.getTypedRuleContext(PlSqlParser.Table_partition_descriptionContext,0)


        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def list_values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.List_values_clauseContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def hash_subparts_by_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_subparts_by_quantityContext,0)


        def range_subpartition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Range_subpartition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Range_subpartition_descContext,i)


        def list_subpartition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.List_subpartition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.List_subpartition_descContext,i)


        def individual_hash_subparts(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Individual_hash_subpartsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Individual_hash_subpartsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_list_partition_desc

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterList_partition_desc" ):
                listener.enterList_partition_desc(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitList_partition_desc" ):
                listener.exitList_partition_desc(self)




    def list_partition_desc(self):

        localctx = PlSqlParser.List_partition_descContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1146, self.RULE_list_partition_desc)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11288
            self.match(PlSqlParser.PARTITION)
            self.state = 11290
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1381,self._ctx)
            if la_ == 1:
                self.state = 11289
                self.partition_name()


            self.state = 11293
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2164:
                self.state = 11292
                self.list_values_clause()


            self.state = 11295
            self.table_partition_description()
            self.state = 11328
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1690 or _la==2347:
                self.state = 11326
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2347]:
                    self.state = 11296
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 11321
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1386,self._ctx)
                    if la_ == 1:
                        self.state = 11297
                        self.range_subpartition_desc()
                        self.state = 11302
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 11298
                            self.match(PlSqlParser.COMMA)
                            self.state = 11299
                            self.range_subpartition_desc()
                            self.state = 11304
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass

                    elif la_ == 2:
                        self.state = 11305
                        self.list_subpartition_desc()
                        self.state = 11310
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 11306
                            self.match(PlSqlParser.COMMA)
                            self.state = 11307
                            self.list_subpartition_desc()
                            self.state = 11312
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass

                    elif la_ == 3:
                        self.state = 11313
                        self.individual_hash_subparts()
                        self.state = 11318
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        while _la==2353:
                            self.state = 11314
                            self.match(PlSqlParser.COMMA)
                            self.state = 11315
                            self.individual_hash_subparts()
                            self.state = 11320
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)

                        pass


                    self.state = 11323
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                elif token in [1690]:
                    self.state = 11325
                    self.hash_subparts_by_quantity()
                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_templateContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def TEMPLATE(self):
            return self.getToken(PlSqlParser.TEMPLATE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def hash_subpartition_quantity(self):
            return self.getTypedRuleContext(PlSqlParser.Hash_subpartition_quantityContext,0)


        def range_subpartition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Range_subpartition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Range_subpartition_descContext,i)


        def list_subpartition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.List_subpartition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.List_subpartition_descContext,i)


        def individual_hash_subparts(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Individual_hash_subpartsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Individual_hash_subpartsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_template

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_template" ):
                listener.enterSubpartition_template(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_template" ):
                listener.exitSubpartition_template(self)




    def subpartition_template(self):

        localctx = PlSqlParser.Subpartition_templateContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1148, self.RULE_subpartition_template)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11330
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11331
            self.match(PlSqlParser.TEMPLATE)

            self.state = 11362
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 11332
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11357
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1392,self._ctx)
                if la_ == 1:
                    self.state = 11333
                    self.range_subpartition_desc()
                    self.state = 11338
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 11334
                        self.match(PlSqlParser.COMMA)
                        self.state = 11335
                        self.range_subpartition_desc()
                        self.state = 11340
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass

                elif la_ == 2:
                    self.state = 11341
                    self.list_subpartition_desc()
                    self.state = 11346
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 11342
                        self.match(PlSqlParser.COMMA)
                        self.state = 11343
                        self.list_subpartition_desc()
                        self.state = 11348
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass

                elif la_ == 3:
                    self.state = 11349
                    self.individual_hash_subparts()
                    self.state = 11354
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 11350
                        self.match(PlSqlParser.COMMA)
                        self.state = 11351
                        self.individual_hash_subparts()
                        self.state = 11356
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass


                self.state = 11359
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2341]:
                self.state = 11361
                self.hash_subpartition_quantity()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hash_subpartition_quantityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hash_subpartition_quantity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHash_subpartition_quantity" ):
                listener.enterHash_subpartition_quantity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHash_subpartition_quantity" ):
                listener.exitHash_subpartition_quantity(self)




    def hash_subpartition_quantity(self):

        localctx = PlSqlParser.Hash_subpartition_quantityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1150, self.RULE_hash_subpartition_quantity)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11364
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_by_rangeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def subpartition_template(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_templateContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_by_range

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_by_range" ):
                listener.enterSubpartition_by_range(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_by_range" ):
                listener.exitSubpartition_by_range(self)




    def subpartition_by_range(self):

        localctx = PlSqlParser.Subpartition_by_rangeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1152, self.RULE_subpartition_by_range)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11366
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11367
            self.match(PlSqlParser.BY)
            self.state = 11368
            self.match(PlSqlParser.RANGE)
            self.state = 11369
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11370
            self.column_name()
            self.state = 11375
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11371
                self.match(PlSqlParser.COMMA)
                self.state = 11372
                self.column_name()
                self.state = 11377
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11378
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11380
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1691:
                self.state = 11379
                self.subpartition_template()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_by_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def LIST(self):
            return self.getToken(PlSqlParser.LIST, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def subpartition_template(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_templateContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_by_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_by_list" ):
                listener.enterSubpartition_by_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_by_list" ):
                listener.exitSubpartition_by_list(self)




    def subpartition_by_list(self):

        localctx = PlSqlParser.Subpartition_by_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1154, self.RULE_subpartition_by_list)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11382
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11383
            self.match(PlSqlParser.BY)
            self.state = 11384
            self.match(PlSqlParser.LIST)
            self.state = 11385
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11386
            self.column_name()
            self.state = 11387
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11389
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1691:
                self.state = 11388
                self.subpartition_template()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_by_hashContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def HASH(self):
            return self.getToken(PlSqlParser.HASH, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def SUBPARTITIONS(self):
            return self.getToken(PlSqlParser.SUBPARTITIONS, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def subpartition_template(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_templateContext,0)


        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_by_hash

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_by_hash" ):
                listener.enterSubpartition_by_hash(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_by_hash" ):
                listener.exitSubpartition_by_hash(self)




    def subpartition_by_hash(self):

        localctx = PlSqlParser.Subpartition_by_hashContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1156, self.RULE_subpartition_by_hash)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11391
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11392
            self.match(PlSqlParser.BY)
            self.state = 11393
            self.match(PlSqlParser.HASH)
            self.state = 11394
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11395
            self.column_name()
            self.state = 11400
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 11396
                self.match(PlSqlParser.COMMA)
                self.state = 11397
                self.column_name()
                self.state = 11402
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 11403
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11422
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1690]:
                self.state = 11404
                self.match(PlSqlParser.SUBPARTITIONS)
                self.state = 11405
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                self.state = 11419
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1679:
                    self.state = 11406
                    self.match(PlSqlParser.STORE)
                    self.state = 11407
                    self.match(PlSqlParser.IN)
                    self.state = 11408
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 11409
                    self.tablespace()
                    self.state = 11414
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 11410
                        self.match(PlSqlParser.COMMA)
                        self.state = 11411
                        self.tablespace()
                        self.state = 11416
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 11417
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [1691]:
                self.state = 11421
                self.subpartition_template()
                pass
            elif token in [1277, 2347]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_name" ):
                listener.enterSubpartition_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_name" ):
                listener.exitSubpartition_name(self)




    def subpartition_name(self):

        localctx = PlSqlParser.Subpartition_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1158, self.RULE_subpartition_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11424
            self.partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Range_subpartition_descContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def range_values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Range_values_clauseContext,0)


        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def partitioning_storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partitioning_storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_range_subpartition_desc

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRange_subpartition_desc" ):
                listener.enterRange_subpartition_desc(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRange_subpartition_desc" ):
                listener.exitRange_subpartition_desc(self)




    def range_subpartition_desc(self):

        localctx = PlSqlParser.Range_subpartition_descContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1160, self.RULE_range_subpartition_desc)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11426
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11428
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 11427
                self.subpartition_name()


            self.state = 11430
            self.range_values_clause()
            self.state = 11432
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==817 or _la==1017 or _la==1249 or _la==1996 or _la==2171:
                self.state = 11431
                self.partitioning_storage_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class List_subpartition_descContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def list_values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.List_values_clauseContext,0)


        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def partitioning_storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partitioning_storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_list_subpartition_desc

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterList_subpartition_desc" ):
                listener.enterList_subpartition_desc(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitList_subpartition_desc" ):
                listener.exitList_subpartition_desc(self)




    def list_subpartition_desc(self):

        localctx = PlSqlParser.List_subpartition_descContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1162, self.RULE_list_subpartition_desc)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11434
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11436
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 11435
                self.subpartition_name()


            self.state = 11438
            self.list_values_clause()
            self.state = 11440
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==817 or _la==1017 or _la==1249 or _la==1996 or _la==2171:
                self.state = 11439
                self.partitioning_storage_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Individual_hash_subpartsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def partitioning_storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partitioning_storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_individual_hash_subparts

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndividual_hash_subparts" ):
                listener.enterIndividual_hash_subparts(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndividual_hash_subparts" ):
                listener.exitIndividual_hash_subparts(self)




    def individual_hash_subparts(self):

        localctx = PlSqlParser.Individual_hash_subpartsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1164, self.RULE_individual_hash_subparts)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11442
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 11444
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1405,self._ctx)
            if la_ == 1:
                self.state = 11443
                self.subpartition_name()


            self.state = 11447
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==817 or _la==1017 or _la==1249 or _la==1996 or _la==2171:
                self.state = 11446
                self.partitioning_storage_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hash_subparts_by_quantityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITIONS(self):
            return self.getToken(PlSqlParser.SUBPARTITIONS, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hash_subparts_by_quantity

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHash_subparts_by_quantity" ):
                listener.enterHash_subparts_by_quantity(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHash_subparts_by_quantity" ):
                listener.exitHash_subparts_by_quantity(self)




    def hash_subparts_by_quantity(self):

        localctx = PlSqlParser.Hash_subparts_by_quantityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1166, self.RULE_hash_subparts_by_quantity)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11449
            self.match(PlSqlParser.SUBPARTITIONS)
            self.state = 11450
            self.match(PlSqlParser.UNSIGNED_INTEGER)
            self.state = 11464
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679:
                self.state = 11451
                self.match(PlSqlParser.STORE)
                self.state = 11452
                self.match(PlSqlParser.IN)
                self.state = 11453
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11454
                self.tablespace()
                self.state = 11459
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11455
                    self.match(PlSqlParser.COMMA)
                    self.state = 11456
                    self.tablespace()
                    self.state = 11461
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 11462
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Range_values_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def LESS(self):
            return self.getToken(PlSqlParser.LESS, 0)

        def THAN(self):
            return self.getToken(PlSqlParser.THAN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def range_values_list(self):
            return self.getTypedRuleContext(PlSqlParser.Range_values_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_range_values_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRange_values_clause" ):
                listener.enterRange_values_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRange_values_clause" ):
                listener.exitRange_values_clause(self)




    def range_values_clause(self):

        localctx = PlSqlParser.Range_values_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1168, self.RULE_range_values_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11466
            self.match(PlSqlParser.VALUES)
            self.state = 11467
            self.match(PlSqlParser.LESS)
            self.state = 11468
            self.match(PlSqlParser.THAN)
            self.state = 11469
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11470
            self.range_values_list()
            self.state = 11471
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Range_values_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.LiteralContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.LiteralContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def TIMESTAMP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TIMESTAMP)
            else:
                return self.getToken(PlSqlParser.TIMESTAMP, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_range_values_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRange_values_list" ):
                listener.enterRange_values_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRange_values_list" ):
                listener.exitRange_values_list(self)




    def range_values_list(self):

        localctx = PlSqlParser.Range_values_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1170, self.RULE_range_values_list)
        self._la = 0 # Token type
        try:
            self.state = 11491
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [194, 878, 2301, 2311, 2316, 2317, 2318, 2325, 2341, 2342, 2343]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11473
                self.literal()
                self.state = 11478
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11474
                    self.match(PlSqlParser.COMMA)
                    self.state = 11475
                    self.literal()
                    self.state = 11480
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2020]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11481
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 11482
                self.literal()
                self.state = 11488
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11483
                    self.match(PlSqlParser.COMMA)
                    self.state = 11484
                    self.match(PlSqlParser.TIMESTAMP)
                    self.state = 11485
                    self.literal()
                    self.state = 11490
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class List_values_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.LiteralContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.LiteralContext,i)


        def TIMESTAMP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TIMESTAMP)
            else:
                return self.getToken(PlSqlParser.TIMESTAMP, i)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_list_values_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterList_values_clause" ):
                listener.enterList_values_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitList_values_clause" ):
                listener.exitList_values_clause(self)




    def list_values_clause(self):

        localctx = PlSqlParser.List_values_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1172, self.RULE_list_values_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11493
            self.match(PlSqlParser.VALUES)
            self.state = 11494
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11514
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [194, 878, 2301, 2311, 2316, 2317, 2318, 2325, 2341, 2342, 2343]:
                self.state = 11495
                self.literal()
                self.state = 11500
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11496
                    self.match(PlSqlParser.COMMA)
                    self.state = 11497
                    self.literal()
                    self.state = 11502
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2020]:
                self.state = 11503
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 11504
                self.literal()
                self.state = 11510
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11505
                    self.match(PlSqlParser.COMMA)
                    self.state = 11506
                    self.match(PlSqlParser.TIMESTAMP)
                    self.state = 11507
                    self.literal()
                    self.state = 11512
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [368]:
                self.state = 11513
                self.match(PlSqlParser.DEFAULT)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 11516
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_partition_descriptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def deferred_segment_creation(self):
            return self.getTypedRuleContext(PlSqlParser.Deferred_segment_creationContext,0)


        def segment_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,i)


        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def lob_storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_storage_clauseContext,i)


        def varray_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Varray_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Varray_col_propertiesContext,i)


        def nested_table_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Nested_table_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Nested_table_col_propertiesContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_partition_description

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_partition_description" ):
                listener.enterTable_partition_description(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_partition_description" ):
                listener.exitTable_partition_description(self)




    def table_partition_description(self):

        localctx = PlSqlParser.Table_partition_descriptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1174, self.RULE_table_partition_description)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11519
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1415,self._ctx)
            if la_ == 1:
                self.state = 11518
                self.deferred_segment_creation()


            self.state = 11522
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1416,self._ctx)
            if la_ == 1:
                self.state = 11521
                self.segment_attributes_clause()


            self.state = 11526
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1417,self._ctx)
            if la_ == 1:
                self.state = 11524
                self.table_compression()

            elif la_ == 2:
                self.state = 11525
                self.key_compression()


            self.state = 11532
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1249:
                self.state = 11528
                self.match(PlSqlParser.OVERFLOW)
                self.state = 11530
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1418,self._ctx)
                if la_ == 1:
                    self.state = 11529
                    self.segment_attributes_clause()




            self.state = 11539
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==817 or _la==959 or _la==2171:
                self.state = 11537
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [817]:
                    self.state = 11534
                    self.lob_storage_clause()
                    pass
                elif token in [2171]:
                    self.state = 11535
                    self.varray_col_properties()
                    pass
                elif token in [959]:
                    self.state = 11536
                    self.nested_table_col_properties()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 11541
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partitioning_storage_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def OVERFLOW(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OVERFLOW)
            else:
                return self.getToken(PlSqlParser.OVERFLOW, i)

        def table_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,i)


        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def lob_partitioning_storage(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_partitioning_storageContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_partitioning_storageContext,i)


        def VARRAY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.VARRAY)
            else:
                return self.getToken(PlSqlParser.VARRAY, i)

        def varray_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Varray_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Varray_itemContext,i)


        def STORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.STORE)
            else:
                return self.getToken(PlSqlParser.STORE, i)

        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def LOB(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOB)
            else:
                return self.getToken(PlSqlParser.LOB, i)

        def lob_segname(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_segnameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_segnameContext,i)


        def BASICFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BASICFILE)
            else:
                return self.getToken(PlSqlParser.BASICFILE, i)

        def SECUREFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SECUREFILE)
            else:
                return self.getToken(PlSqlParser.SECUREFILE, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_partitioning_storage_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartitioning_storage_clause" ):
                listener.enterPartitioning_storage_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartitioning_storage_clause" ):
                listener.exitPartitioning_storage_clause(self)




    def partitioning_storage_clause(self):

        localctx = PlSqlParser.Partitioning_storage_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1176, self.RULE_partitioning_storage_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11562 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 11562
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1424,self._ctx)
                if la_ == 1:
                    self.state = 11542
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 11543
                    self.tablespace()
                    pass

                elif la_ == 2:
                    self.state = 11544
                    self.match(PlSqlParser.OVERFLOW)
                    self.state = 11547
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1422,self._ctx)
                    if la_ == 1:
                        self.state = 11545
                        self.match(PlSqlParser.TABLESPACE)
                        self.state = 11546
                        self.tablespace()


                    pass

                elif la_ == 3:
                    self.state = 11549
                    self.table_compression()
                    pass

                elif la_ == 4:
                    self.state = 11550
                    self.key_compression()
                    pass

                elif la_ == 5:
                    self.state = 11551
                    self.lob_partitioning_storage()
                    pass

                elif la_ == 6:
                    self.state = 11552
                    self.match(PlSqlParser.VARRAY)
                    self.state = 11553
                    self.varray_item()
                    self.state = 11554
                    self.match(PlSqlParser.STORE)
                    self.state = 11555
                    self.match(PlSqlParser.AS)
                    self.state = 11557
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==104 or _la==1562:
                        self.state = 11556
                        _la = self._input.LA(1)
                        if not(_la==104 or _la==1562):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 11559
                    self.match(PlSqlParser.LOB)
                    self.state = 11560
                    self.lob_segname()
                    pass


                self.state = 11564 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==246 or _la==817 or _la==1017 or _la==1249 or _la==1996 or _la==2171):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_partitioning_storageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOB(self):
            return self.getToken(PlSqlParser.LOB, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def lob_item(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_itemContext,0)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def lob_segname(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_segnameContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def BASICFILE(self):
            return self.getToken(PlSqlParser.BASICFILE, 0)

        def SECUREFILE(self):
            return self.getToken(PlSqlParser.SECUREFILE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_partitioning_storage

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_partitioning_storage" ):
                listener.enterLob_partitioning_storage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_partitioning_storage" ):
                listener.exitLob_partitioning_storage(self)




    def lob_partitioning_storage(self):

        localctx = PlSqlParser.Lob_partitioning_storageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1178, self.RULE_lob_partitioning_storage)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11566
            self.match(PlSqlParser.LOB)
            self.state = 11567
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11568
            self.lob_item()
            self.state = 11569
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11570
            self.match(PlSqlParser.STORE)
            self.state = 11571
            self.match(PlSqlParser.AS)
            self.state = 11573
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1426,self._ctx)
            if la_ == 1:
                self.state = 11572
                _la = self._input.LA(1)
                if not(_la==104 or _la==1562):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 11588
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.state = 11575
                self.lob_segname()
                self.state = 11581
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 11576
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 11577
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 11578
                    self.tablespace()
                    self.state = 11579
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [2347]:
                self.state = 11583
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11584
                self.match(PlSqlParser.TABLESPACE)
                self.state = 11585
                self.tablespace()
                self.state = 11586
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Datatype_null_enableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def datatype(self):
            return self.getTypedRuleContext(PlSqlParser.DatatypeContext,0)


        def SORT(self):
            return self.getToken(PlSqlParser.SORT, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def REGULAR_ID(self):
            return self.getToken(PlSqlParser.REGULAR_ID, 0)

        def SALT(self):
            return self.getToken(PlSqlParser.SALT, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_datatype_null_enable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatatype_null_enable" ):
                listener.enterDatatype_null_enable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatatype_null_enable" ):
                listener.exitDatatype_null_enable(self)




    def datatype_null_enable(self):

        localctx = PlSqlParser.Datatype_null_enableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1180, self.RULE_datatype_null_enable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11590
            self.column_name()
            self.state = 11591
            self.datatype()
            self.state = 11593
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1626:
                self.state = 11592
                self.match(PlSqlParser.SORT)


            self.state = 11597
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 11595
                self.match(PlSqlParser.DEFAULT)
                self.state = 11596
                self.expression()


            self.state = 11618
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==471:
                self.state = 11599
                self.match(PlSqlParser.ENCRYPT)
                self.state = 11602
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 11600
                    self.match(PlSqlParser.USING)
                    self.state = 11601
                    self.match(PlSqlParser.CHAR_STRING)


                self.state = 11607
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==644:
                    self.state = 11604
                    self.match(PlSqlParser.IDENTIFIED)
                    self.state = 11605
                    self.match(PlSqlParser.BY)
                    self.state = 11606
                    self.match(PlSqlParser.REGULAR_ID)


                self.state = 11610
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2343:
                    self.state = 11609
                    self.match(PlSqlParser.CHAR_STRING)


                self.state = 11616
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074 or _la==1535:
                    self.state = 11613
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1074:
                        self.state = 11612
                        self.match(PlSqlParser.NO)


                    self.state = 11615
                    self.match(PlSqlParser.SALT)




            self.state = 11622
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 11620
                self.match(PlSqlParser.NOT)
                self.state = 11621
                self.match(PlSqlParser.NULL_)


            self.state = 11625
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 11624
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Size_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def K_LETTER(self):
            return self.getToken(PlSqlParser.K_LETTER, 0)

        def M_LETTER(self):
            return self.getToken(PlSqlParser.M_LETTER, 0)

        def G_LETTER(self):
            return self.getToken(PlSqlParser.G_LETTER, 0)

        def T_LETTER(self):
            return self.getToken(PlSqlParser.T_LETTER, 0)

        def P_LETTER(self):
            return self.getToken(PlSqlParser.P_LETTER, 0)

        def E_LETTER(self):
            return self.getToken(PlSqlParser.E_LETTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_size_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSize_clause" ):
                listener.enterSize_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSize_clause" ):
                listener.exitSize_clause(self)




    def size_clause(self):

        localctx = PlSqlParser.Size_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1182, self.RULE_size_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11627
            self.match(PlSqlParser.UNSIGNED_INTEGER)
            self.state = 11629
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==449 or _la==595 or _la==766 or _la==848 or _la==1256 or _la==1993:
                self.state = 11628
                _la = self._input.LA(1)
                if not(_la==449 or _la==595 or _la==766 or _la==848 or _la==1256 or _la==1993):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_compressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMPRESS(self):
            return self.getToken(PlSqlParser.COMPRESS, 0)

        def BASIC(self):
            return self.getToken(PlSqlParser.BASIC, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def OLTP(self):
            return self.getToken(PlSqlParser.OLTP, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def NOCOMPRESS(self):
            return self.getToken(PlSqlParser.NOCOMPRESS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_table_compression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_compression" ):
                listener.enterTable_compression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_compression" ):
                listener.exitTable_compression(self)




    def table_compression(self):

        localctx = PlSqlParser.Table_compressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1184, self.RULE_table_compression)
        self._la = 0 # Token type
        try:
            self.state = 11644
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [246]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11631
                self.match(PlSqlParser.COMPRESS)
                self.state = 11641
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1442,self._ctx)
                if la_ == 1:
                    self.state = 11632
                    self.match(PlSqlParser.BASIC)

                elif la_ == 2:
                    self.state = 11633
                    self.match(PlSqlParser.FOR)
                    self.state = 11639
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1187]:
                        self.state = 11634
                        self.match(PlSqlParser.OLTP)
                        pass
                    elif token in [63, 1409]:
                        self.state = 11635
                        _la = self._input.LA(1)
                        if not(_la==63 or _la==1409):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 11637
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==634 or _la==845:
                            self.state = 11636
                            _la = self._input.LA(1)
                            if not(_la==634 or _la==845):
                                self._errHandler.recoverInline(self)
                            else:
                                self._errHandler.reportMatch(self)
                                self.consume()


                        pass
                    else:
                        raise NoViableAltException(self)



                pass
            elif token in [1017]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11643
                self.match(PlSqlParser.NOCOMPRESS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def inmemory_column_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inmemory_column_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inmemory_column_clauseContext,i)


        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def inmemory_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_attributesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_table_clause" ):
                listener.enterInmemory_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_table_clause" ):
                listener.exitInmemory_table_clause(self)




    def inmemory_table_clause(self):

        localctx = PlSqlParser.Inmemory_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1186, self.RULE_inmemory_table_clause)
        try:
            self.state = 11665
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1448,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 11647 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 11646
                        self.inmemory_column_clause()

                    else:
                        raise NoViableAltException(self)
                    self.state = 11649 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,1444,self._ctx)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 11657
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [704]:
                    self.state = 11651
                    self.match(PlSqlParser.INMEMORY)
                    self.state = 11653
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1445,self._ctx)
                    if la_ == 1:
                        self.state = 11652
                        self.inmemory_attributes()


                    pass
                elif token in [1074]:
                    self.state = 11655
                    self.match(PlSqlParser.NO)
                    self.state = 11656
                    self.match(PlSqlParser.INMEMORY)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 11662
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1447,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 11659
                        self.inmemory_column_clause() 
                    self.state = 11664
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,1447,self._ctx)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_attributesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def inmemory_memcompress(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_memcompressContext,0)


        def inmemory_priority(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_priorityContext,0)


        def inmemory_distribute(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_distributeContext,0)


        def inmemory_duplicate(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_duplicateContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_attributes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_attributes" ):
                listener.enterInmemory_attributes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_attributes" ):
                listener.exitInmemory_attributes(self)




    def inmemory_attributes(self):

        localctx = PlSqlParser.Inmemory_attributesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1188, self.RULE_inmemory_attributes)
        self._la = 0 # Token type
        try:
            self.state = 11689
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1455,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 11667
                self.inmemory_memcompress()
                self.state = 11669
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1378:
                    self.state = 11668
                    self.inmemory_priority()


                self.state = 11672
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==420:
                    self.state = 11671
                    self.inmemory_distribute()


                self.state = 11675
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1451,self._ctx)
                if la_ == 1:
                    self.state = 11674
                    self.inmemory_duplicate()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 11677
                self.inmemory_priority()
                self.state = 11679
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==420:
                    self.state = 11678
                    self.inmemory_distribute()


                self.state = 11682
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1453,self._ctx)
                if la_ == 1:
                    self.state = 11681
                    self.inmemory_duplicate()


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 11684
                self.inmemory_distribute()
                self.state = 11686
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1454,self._ctx)
                if la_ == 1:
                    self.state = 11685
                    self.inmemory_duplicate()


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 11688
                self.inmemory_duplicate()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_memcompressContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMCOMPRESS(self):
            return self.getToken(PlSqlParser.MEMCOMPRESS, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def DML(self):
            return self.getToken(PlSqlParser.DML, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def CAPACITY(self):
            return self.getToken(PlSqlParser.CAPACITY, 0)

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_memcompress

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_memcompress" ):
                listener.enterInmemory_memcompress(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_memcompress" ):
                listener.exitInmemory_memcompress(self)




    def inmemory_memcompress(self):

        localctx = PlSqlParser.Inmemory_memcompressContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1190, self.RULE_inmemory_memcompress)
        self._la = 0 # Token type
        try:
            self.state = 11702
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [887]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11691
                self.match(PlSqlParser.MEMCOMPRESS)
                self.state = 11692
                self.match(PlSqlParser.FOR)
                self.state = 11698
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [421]:
                    self.state = 11693
                    self.match(PlSqlParser.DML)
                    pass
                elif token in [168, 1409]:
                    self.state = 11694
                    _la = self._input.LA(1)
                    if not(_la==168 or _la==1409):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 11696
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==634 or _la==845:
                        self.state = 11695
                        _la = self._input.LA(1)
                        if not(_la==634 or _la==845):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [1074]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11700
                self.match(PlSqlParser.NO)
                self.state = 11701
                self.match(PlSqlParser.MEMCOMPRESS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_priorityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PRIORITY(self):
            return self.getToken(PlSqlParser.PRIORITY, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def MEDIUM(self):
            return self.getToken(PlSqlParser.MEDIUM, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def CRITICAL(self):
            return self.getToken(PlSqlParser.CRITICAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_priority

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_priority" ):
                listener.enterInmemory_priority(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_priority" ):
                listener.exitInmemory_priority(self)




    def inmemory_priority(self):

        localctx = PlSqlParser.Inmemory_priorityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1192, self.RULE_inmemory_priority)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11704
            self.match(PlSqlParser.PRIORITY)
            self.state = 11705
            _la = self._input.LA(1)
            if not(_la==310 or _la==634 or _la==845 or _la==881 or _la==1071):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_distributeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DISTRIBUTE(self):
            return self.getToken(PlSqlParser.DISTRIBUTE, 0)

        def AUTO(self):
            return self.getToken(PlSqlParser.AUTO, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def SERVICE(self):
            return self.getToken(PlSqlParser.SERVICE, 0)

        def ROWID(self):
            return self.getToken(PlSqlParser.ROWID, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_distribute

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_distribute" ):
                listener.enterInmemory_distribute(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_distribute" ):
                listener.exitInmemory_distribute(self)




    def inmemory_distribute(self):

        localctx = PlSqlParser.Inmemory_distributeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1194, self.RULE_inmemory_distribute)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11707
            self.match(PlSqlParser.DISTRIBUTE)
            self.state = 11716
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [89]:
                self.state = 11708
                self.match(PlSqlParser.AUTO)
                pass
            elif token in [154]:
                self.state = 11709
                self.match(PlSqlParser.BY)
                self.state = 11714
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1523]:
                    self.state = 11710
                    self.match(PlSqlParser.ROWID)
                    self.state = 11711
                    self.match(PlSqlParser.RANGE)
                    pass
                elif token in [1275]:
                    self.state = 11712
                    self.match(PlSqlParser.PARTITION)
                    pass
                elif token in [1691]:
                    self.state = 11713
                    self.match(PlSqlParser.SUBPARTITION)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [-1, 21, 33, 39, 67, 140, 152, 158, 210, 214, 218, 226, 246, 247, 356, 368, 404, 438, 444, 467, 472, 521, 523, 554, 565, 576, 580, 655, 663, 676, 701, 704, 817, 832, 858, 877, 899, 900, 929, 959, 966, 1010, 1017, 1057, 1058, 1061, 1065, 1074, 1085, 1117, 1177, 1190, 1193, 1236, 1249, 1261, 1265, 1275, 1296, 1298, 1299, 1429, 1436, 1453, 1471, 1480, 1501, 1521, 1528, 1567, 1678, 1706, 1996, 2010, 2118, 2123, 2153, 2171, 2253, 2308, 2347, 2348, 2354, 2367]:
                pass
            else:
                pass
            self.state = 11726
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1462,self._ctx)
            if la_ == 1:
                self.state = 11718
                self.match(PlSqlParser.FOR)
                self.state = 11719
                self.match(PlSqlParser.SERVICE)
                self.state = 11724
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1461,self._ctx)
                if la_ == 1:
                    self.state = 11720
                    self.match(PlSqlParser.DEFAULT)
                    pass

                elif la_ == 2:
                    self.state = 11721
                    self.match(PlSqlParser.ALL)
                    pass

                elif la_ == 3:
                    self.state = 11722
                    self.identifier()
                    pass

                elif la_ == 4:
                    self.state = 11723
                    self.match(PlSqlParser.NONE)
                    pass




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_duplicateContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DUPLICATE(self):
            return self.getToken(PlSqlParser.DUPLICATE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_duplicate

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_duplicate" ):
                listener.enterInmemory_duplicate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_duplicate" ):
                listener.exitInmemory_duplicate(self)




    def inmemory_duplicate(self):

        localctx = PlSqlParser.Inmemory_duplicateContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1196, self.RULE_inmemory_duplicate)
        self._la = 0 # Token type
        try:
            self.state = 11734
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [444]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11728
                self.match(PlSqlParser.DUPLICATE)
                self.state = 11730
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==38:
                    self.state = 11729
                    self.match(PlSqlParser.ALL)


                pass
            elif token in [1074]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11732
                self.match(PlSqlParser.NO)
                self.state = 11733
                self.match(PlSqlParser.DUPLICATE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inmemory_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def inmemory_memcompress(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_memcompressContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_inmemory_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInmemory_column_clause" ):
                listener.enterInmemory_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInmemory_column_clause" ):
                listener.exitInmemory_column_clause(self)




    def inmemory_column_clause(self):

        localctx = PlSqlParser.Inmemory_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1198, self.RULE_inmemory_column_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11742
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [704]:
                self.state = 11736
                self.match(PlSqlParser.INMEMORY)
                self.state = 11738
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==887 or _la==1074:
                    self.state = 11737
                    self.inmemory_memcompress()


                pass
            elif token in [1074]:
                self.state = 11740
                self.match(PlSqlParser.NO)
                self.state = 11741
                self.match(PlSqlParser.INMEMORY)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 11744
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11745
            self.column_list()
            self.state = 11746
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Physical_attributes_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.pctfree = None # Token
            self.pctused = None # Token
            self.inittrans = None # Token
            self.maxtrans = None # Token

        def PCTFREE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTFREE)
            else:
                return self.getToken(PlSqlParser.PCTFREE, i)

        def PCTUSED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTUSED)
            else:
                return self.getToken(PlSqlParser.PCTUSED, i)

        def INITRANS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INITRANS)
            else:
                return self.getToken(PlSqlParser.INITRANS, i)

        def MAXTRANS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MAXTRANS)
            else:
                return self.getToken(PlSqlParser.MAXTRANS, i)

        def COMPUTE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMPUTE)
            else:
                return self.getToken(PlSqlParser.COMPUTE, i)

        def STATISTICS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.STATISTICS)
            else:
                return self.getToken(PlSqlParser.STATISTICS, i)

        def storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,i)


        def compute_clauses(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Compute_clausesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Compute_clausesContext,i)


        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_physical_attributes_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPhysical_attributes_clause" ):
                listener.enterPhysical_attributes_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPhysical_attributes_clause" ):
                listener.exitPhysical_attributes_clause(self)




    def physical_attributes_clause(self):

        localctx = PlSqlParser.Physical_attributes_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1200, self.RULE_physical_attributes_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11760 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 11760
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1467,self._ctx)
                    if la_ == 1:
                        self.state = 11748
                        self.match(PlSqlParser.PCTFREE)
                        self.state = 11749
                        localctx.pctfree = self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass

                    elif la_ == 2:
                        self.state = 11750
                        self.match(PlSqlParser.PCTUSED)
                        self.state = 11751
                        localctx.pctused = self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass

                    elif la_ == 3:
                        self.state = 11752
                        self.match(PlSqlParser.INITRANS)
                        self.state = 11753
                        localctx.inittrans = self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass

                    elif la_ == 4:
                        self.state = 11754
                        self.match(PlSqlParser.MAXTRANS)
                        self.state = 11755
                        localctx.maxtrans = self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass

                    elif la_ == 5:
                        self.state = 11756
                        self.match(PlSqlParser.COMPUTE)
                        self.state = 11757
                        self.match(PlSqlParser.STATISTICS)
                        pass

                    elif la_ == 6:
                        self.state = 11758
                        self.storage_clause()
                        pass

                    elif la_ == 7:
                        self.state = 11759
                        self.compute_clauses()
                        pass



                else:
                    raise NoViableAltException(self)
                self.state = 11762 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1468,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Storage_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.initial_size = None # Size_clauseContext
            self.next_size = None # Size_clauseContext
            self.minextents = None # Token
            self.pctincrease = None # Token
            self.freelists = None # Token
            self.freelist_groups = None # Token

        def STORAGE(self):
            return self.getToken(PlSqlParser.STORAGE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def INITIAL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INITIAL)
            else:
                return self.getToken(PlSqlParser.INITIAL, i)

        def NEXT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NEXT)
            else:
                return self.getToken(PlSqlParser.NEXT, i)

        def MINEXTENTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MINEXTENTS)
            else:
                return self.getToken(PlSqlParser.MINEXTENTS, i)

        def MAXEXTENTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MAXEXTENTS)
            else:
                return self.getToken(PlSqlParser.MAXEXTENTS, i)

        def PCTINCREASE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTINCREASE)
            else:
                return self.getToken(PlSqlParser.PCTINCREASE, i)

        def FREELISTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FREELISTS)
            else:
                return self.getToken(PlSqlParser.FREELISTS, i)

        def FREELIST(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FREELIST)
            else:
                return self.getToken(PlSqlParser.FREELIST, i)

        def GROUPS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GROUPS)
            else:
                return self.getToken(PlSqlParser.GROUPS, i)

        def OPTIMAL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OPTIMAL)
            else:
                return self.getToken(PlSqlParser.OPTIMAL, i)

        def BUFFER_POOL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BUFFER_POOL)
            else:
                return self.getToken(PlSqlParser.BUFFER_POOL, i)

        def FLASH_CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FLASH_CACHE)
            else:
                return self.getToken(PlSqlParser.FLASH_CACHE, i)

        def CELL_FLASH_CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CELL_FLASH_CACHE)
            else:
                return self.getToken(PlSqlParser.CELL_FLASH_CACHE, i)

        def ENCRYPT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENCRYPT)
            else:
                return self.getToken(PlSqlParser.ENCRYPT, i)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def KEEP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEEP)
            else:
                return self.getToken(PlSqlParser.KEEP, i)

        def RECYCLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RECYCLE)
            else:
                return self.getToken(PlSqlParser.RECYCLE, i)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def NONE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NONE)
            else:
                return self.getToken(PlSqlParser.NONE, i)

        def UNLIMITED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNLIMITED)
            else:
                return self.getToken(PlSqlParser.UNLIMITED, i)

        def NULL_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULL_)
            else:
                return self.getToken(PlSqlParser.NULL_, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_storage_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStorage_clause" ):
                listener.enterStorage_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStorage_clause" ):
                listener.exitStorage_clause(self)




    def storage_clause(self):

        localctx = PlSqlParser.Storage_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1202, self.RULE_storage_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11764
            self.match(PlSqlParser.STORAGE)
            self.state = 11765
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11793 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 11793
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [698]:
                    self.state = 11766
                    self.match(PlSqlParser.INITIAL)
                    self.state = 11767
                    localctx.initial_size = self.size_clause()
                    pass
                elif token in [970]:
                    self.state = 11768
                    self.match(PlSqlParser.NEXT)
                    self.state = 11769
                    localctx.next_size = self.size_clause()
                    pass
                elif token in [898]:
                    self.state = 11770
                    self.match(PlSqlParser.MINEXTENTS)
                    self.state = 11771
                    localctx.minextents = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==2093 or _la==2341):
                        localctx.minextents = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [869]:
                    self.state = 11772
                    self.match(PlSqlParser.MAXEXTENTS)
                    self.state = 11773
                    localctx.minextents = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==2093 or _la==2341):
                        localctx.minextents = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [1297]:
                    self.state = 11774
                    self.match(PlSqlParser.PCTINCREASE)
                    self.state = 11775
                    localctx.pctincrease = self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                elif token in [585]:
                    self.state = 11776
                    self.match(PlSqlParser.FREELISTS)
                    self.state = 11777
                    localctx.freelists = self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                elif token in [584]:
                    self.state = 11778
                    self.match(PlSqlParser.FREELIST)
                    self.state = 11779
                    self.match(PlSqlParser.GROUPS)
                    self.state = 11780
                    localctx.freelist_groups = self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                elif token in [1202]:
                    self.state = 11781
                    self.match(PlSqlParser.OPTIMAL)
                    self.state = 11784
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2341]:
                        self.state = 11782
                        self.size_clause()
                        pass
                    elif token in [1162]:
                        self.state = 11783
                        self.match(PlSqlParser.NULL_)
                        pass
                    else:
                        raise NoViableAltException(self)

                    pass
                elif token in [151]:
                    self.state = 11786
                    self.match(PlSqlParser.BUFFER_POOL)
                    self.state = 11787
                    _la = self._input.LA(1)
                    if not(_la==368 or _la==768 or _la==1441):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [566]:
                    self.state = 11788
                    self.match(PlSqlParser.FLASH_CACHE)
                    self.state = 11789
                    _la = self._input.LA(1)
                    if not(_la==368 or _la==768 or _la==1071):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [178]:
                    self.state = 11790
                    self.match(PlSqlParser.CELL_FLASH_CACHE)
                    self.state = 11791
                    _la = self._input.LA(1)
                    if not(_la==368 or _la==768 or _la==1071):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [471]:
                    self.state = 11792
                    self.match(PlSqlParser.ENCRYPT)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 11795 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==151 or _la==178 or _la==471 or ((((_la - 566)) & ~0x3f) == 0 and ((1 << (_la - 566)) & 786433) != 0) or _la==698 or _la==869 or _la==898 or _la==970 or _la==1202 or _la==1297):
                    break

            self.state = 11797
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Deferred_segment_creationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def CREATION(self):
            return self.getToken(PlSqlParser.CREATION, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def DEFERRED(self):
            return self.getToken(PlSqlParser.DEFERRED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_deferred_segment_creation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeferred_segment_creation" ):
                listener.enterDeferred_segment_creation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeferred_segment_creation" ):
                listener.exitDeferred_segment_creation(self)




    def deferred_segment_creation(self):

        localctx = PlSqlParser.Deferred_segment_creationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1204, self.RULE_deferred_segment_creation)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11799
            self.match(PlSqlParser.SEGMENT)
            self.state = 11800
            self.match(PlSqlParser.CREATION)
            self.state = 11801
            _la = self._input.LA(1)
            if not(_la==373 or _la==656):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Segment_attributes_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tablespace_name = None # Id_expressionContext

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def table_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,i)


        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def SET(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SET)
            else:
                return self.getToken(PlSqlParser.SET, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_segment_attributes_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSegment_attributes_clause" ):
                listener.enterSegment_attributes_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSegment_attributes_clause" ):
                listener.exitSegment_attributes_clause(self)




    def segment_attributes_clause(self):

        localctx = PlSqlParser.Segment_attributes_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1206, self.RULE_segment_attributes_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11814 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 11814
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [247, 701, 877, 1296, 1299, 1678]:
                        self.state = 11803
                        self.physical_attributes_clause()
                        pass
                    elif token in [1996]:
                        self.state = 11804
                        self.match(PlSqlParser.TABLESPACE)
                        self.state = 11810
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1473,self._ctx)
                        if la_ == 1:
                            self.state = 11805
                            localctx.tablespace_name = self.id_expression()
                            pass

                        elif la_ == 2:
                            self.state = 11807
                            self._errHandler.sync(self)
                            la_ = self._interp.adaptivePredict(self._input,1472,self._ctx)
                            if la_ == 1:
                                self.state = 11806
                                self.match(PlSqlParser.SET)


                            self.state = 11809
                            self.identifier()
                            pass


                        pass
                    elif token in [246, 1017]:
                        self.state = 11812
                        self.table_compression()
                        pass
                    elif token in [554, 832, 1057]:
                        self.state = 11813
                        self.logging_clause()
                        pass
                    else:
                        raise NoViableAltException(self)


                else:
                    raise NoViableAltException(self)
                self.state = 11816 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1475,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Physical_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def segment_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,0)


        def deferred_segment_creation(self):
            return self.getTypedRuleContext(PlSqlParser.Deferred_segment_creationContext,0)


        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def inmemory_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_table_clauseContext,0)


        def ilm_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_clauseContext,0)


        def ORGANIZATION(self):
            return self.getToken(PlSqlParser.ORGANIZATION, 0)

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def external_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.External_table_clauseContext,0)


        def HEAP(self):
            return self.getToken(PlSqlParser.HEAP, 0)

        def heap_org_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Heap_org_table_clauseContext,0)


        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def index_org_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Index_org_table_clauseContext,0)


        def REJECT(self):
            return self.getToken(PlSqlParser.REJECT, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_physical_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPhysical_properties" ):
                listener.enterPhysical_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPhysical_properties" ):
                listener.exitPhysical_properties(self)




    def physical_properties(self):

        localctx = PlSqlParser.Physical_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1208, self.RULE_physical_properties)
        self._la = 0 # Token type
        try:
            self.state = 11872
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1487,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 11819
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1567:
                    self.state = 11818
                    self.deferred_segment_creation()


                self.state = 11821
                self.segment_attributes_clause()
                self.state = 11823
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1477,self._ctx)
                if la_ == 1:
                    self.state = 11822
                    self.table_compression()


                self.state = 11826
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1478,self._ctx)
                if la_ == 1:
                    self.state = 11825
                    self.inmemory_table_clause()


                self.state = 11829
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==655:
                    self.state = 11828
                    self.ilm_clause()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 11832
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1567:
                    self.state = 11831
                    self.deferred_segment_creation()


                self.state = 11857
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1236]:
                    self.state = 11834
                    self.match(PlSqlParser.ORGANIZATION)
                    self.state = 11847
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [624]:
                        self.state = 11835
                        self.match(PlSqlParser.HEAP)
                        self.state = 11837
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1481,self._ctx)
                        if la_ == 1:
                            self.state = 11836
                            self.segment_attributes_clause()


                        self.state = 11839
                        self.heap_org_table_clause()
                        pass
                    elif token in [675]:
                        self.state = 11840
                        self.match(PlSqlParser.INDEX)
                        self.state = 11842
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1482,self._ctx)
                        if la_ == 1:
                            self.state = 11841
                            self.segment_attributes_clause()


                        self.state = 11844
                        self.index_org_table_clause()
                        pass
                    elif token in [523]:
                        self.state = 11845
                        self.match(PlSqlParser.EXTERNAL)
                        self.state = 11846
                        self.external_table_clause()
                        pass
                    else:
                        raise NoViableAltException(self)

                    pass
                elif token in [523]:
                    self.state = 11849
                    self.match(PlSqlParser.EXTERNAL)
                    self.state = 11850
                    self.match(PlSqlParser.PARTITION)
                    self.state = 11851
                    self.match(PlSqlParser.ATTRIBUTES)
                    self.state = 11852
                    self.external_table_clause()
                    self.state = 11855
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1471:
                        self.state = 11853
                        self.match(PlSqlParser.REJECT)
                        self.state = 11854
                        self.match(PlSqlParser.LIMIT)


                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 11859
                self.match(PlSqlParser.CLUSTER)
                self.state = 11860
                self.cluster_name()
                self.state = 11861
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 11862
                self.column_name()
                self.state = 11867
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 11863
                    self.match(PlSqlParser.COMMA)
                    self.state = 11864
                    self.column_name()
                    self.state = 11869
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 11870
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ILM(self):
            return self.getToken(PlSqlParser.ILM, 0)

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def ilm_policy_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_policy_clauseContext,0)


        def DELETE_ALL(self):
            return self.getToken(PlSqlParser.DELETE_ALL, 0)

        def ENABLE_ALL(self):
            return self.getToken(PlSqlParser.ENABLE_ALL, 0)

        def DISABLE_ALL(self):
            return self.getToken(PlSqlParser.DISABLE_ALL, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_clause" ):
                listener.enterIlm_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_clause" ):
                listener.exitIlm_clause(self)




    def ilm_clause(self):

        localctx = PlSqlParser.Ilm_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1210, self.RULE_ilm_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11874
            self.match(PlSqlParser.ILM)
            self.state = 11884
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.state = 11875
                self.match(PlSqlParser.ADD)
                self.state = 11876
                self.match(PlSqlParser.POLICY)
                self.state = 11877
                self.ilm_policy_clause()
                pass
            elif token in [381, 404, 467]:
                self.state = 11878
                _la = self._input.LA(1)
                if not(_la==381 or _la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 11879
                self.match(PlSqlParser.POLICY)
                self.state = 11880
                self.ilm_policy_clause()
                pass
            elif token in [380]:
                self.state = 11881
                self.match(PlSqlParser.DELETE_ALL)
                pass
            elif token in [466]:
                self.state = 11882
                self.match(PlSqlParser.ENABLE_ALL)
                pass
            elif token in [403]:
                self.state = 11883
                self.match(PlSqlParser.DISABLE_ALL)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_policy_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ilm_compression_policy(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_compression_policyContext,0)


        def ilm_tiering_policy(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_tiering_policyContext,0)


        def ilm_inmemory_policy(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_inmemory_policyContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_policy_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_policy_clause" ):
                listener.enterIlm_policy_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_policy_clause" ):
                listener.exitIlm_policy_clause(self)




    def ilm_policy_clause(self):

        localctx = PlSqlParser.Ilm_policy_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1212, self.RULE_ilm_policy_clause)
        try:
            self.state = 11889
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [226, 246, 1017, 1528]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11886
                self.ilm_compression_policy()
                pass
            elif token in [2016]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11887
                self.ilm_tiering_policy()
                pass
            elif token in [926, 1074, 1590]:
                self.enterOuterAlt(localctx, 3)
                self.state = 11888
                self.ilm_inmemory_policy()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_compression_policyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def segment_group(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_groupContext,0)


        def ilm_after_on(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_after_onContext,0)


        def ROW(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROW)
            else:
                return self.getToken(PlSqlParser.ROW, i)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def ilm_time_period(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_time_periodContext,0)


        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def MODIFICATION(self):
            return self.getToken(PlSqlParser.MODIFICATION, 0)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def COMPRESS(self):
            return self.getToken(PlSqlParser.COMPRESS, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def ADVANCED(self):
            return self.getToken(PlSqlParser.ADVANCED, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_compression_policy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_compression_policy" ):
                listener.enterIlm_compression_policy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_compression_policy" ):
                listener.exitIlm_compression_policy(self)




    def ilm_compression_policy(self):

        localctx = PlSqlParser.Ilm_compression_policyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1214, self.RULE_ilm_compression_policy)
        self._la = 0 # Token type
        try:
            self.state = 11910
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [246, 1017]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11891
                self.table_compression()
                self.state = 11892
                self.segment_group()
                self.state = 11893
                self.ilm_after_on()
                pass
            elif token in [226, 1528]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11895
                _la = self._input.LA(1)
                if not(_la==226 or _la==1528):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 11896
                self.match(PlSqlParser.STORE)
                self.state = 11897
                self.match(PlSqlParser.COMPRESS)
                self.state = 11901
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [29]:
                    self.state = 11898
                    self.match(PlSqlParser.ADVANCED)
                    pass
                elif token in [580]:
                    self.state = 11899
                    self.match(PlSqlParser.FOR)
                    self.state = 11900
                    self.match(PlSqlParser.QUERY)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 11903
                self.match(PlSqlParser.ROW)
                self.state = 11904
                self.match(PlSqlParser.AFTER)
                self.state = 11905
                self.ilm_time_period()
                self.state = 11906
                self.match(PlSqlParser.OF)
                self.state = 11907
                self.match(PlSqlParser.NO)
                self.state = 11908
                self.match(PlSqlParser.MODIFICATION)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_tiering_policyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TIER(self):
            return self.getToken(PlSqlParser.TIER, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def ilm_after_on(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_after_onContext,0)


        def segment_group(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_groupContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_tiering_policy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_tiering_policy" ):
                listener.enterIlm_tiering_policy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_tiering_policy" ):
                listener.exitIlm_tiering_policy(self)




    def ilm_tiering_policy(self):

        localctx = PlSqlParser.Ilm_tiering_policyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1216, self.RULE_ilm_tiering_policy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11912
            self.match(PlSqlParser.TIER)
            self.state = 11913
            self.match(PlSqlParser.TO)
            self.state = 11914
            self.tablespace()
            self.state = 11928
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1495,self._ctx)
            if la_ == 1:
                self.state = 11916
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1492,self._ctx)
                if la_ == 1:
                    self.state = 11915
                    self.segment_group()


                self.state = 11920
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1193:
                    self.state = 11918
                    self.match(PlSqlParser.ON)
                    self.state = 11919
                    self.function_name()


                pass

            elif la_ == 2:
                self.state = 11922
                self.match(PlSqlParser.READ)
                self.state = 11923
                self.match(PlSqlParser.ONLY)
                self.state = 11925
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==609 or _la==1567:
                    self.state = 11924
                    self.segment_group()


                self.state = 11927
                self.ilm_after_on()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_after_onContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def ilm_time_period(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_time_periodContext,0)


        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def CREATION(self):
            return self.getToken(PlSqlParser.CREATION, 0)

        def ACCESS(self):
            return self.getToken(PlSqlParser.ACCESS, 0)

        def MODIFICATION(self):
            return self.getToken(PlSqlParser.MODIFICATION, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Function_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_after_on

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_after_on" ):
                listener.enterIlm_after_on(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_after_on" ):
                listener.exitIlm_after_on(self)




    def ilm_after_on(self):

        localctx = PlSqlParser.Ilm_after_onContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1218, self.RULE_ilm_after_on)
        self._la = 0 # Token type
        try:
            self.state = 11940
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [33]:
                self.enterOuterAlt(localctx, 1)
                self.state = 11930
                self.match(PlSqlParser.AFTER)
                self.state = 11931
                self.ilm_time_period()
                self.state = 11932
                self.match(PlSqlParser.OF)
                self.state = 11936
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1074]:
                    self.state = 11933
                    self.match(PlSqlParser.NO)
                    self.state = 11934
                    _la = self._input.LA(1)
                    if not(_la==4 or _la==924):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [308]:
                    self.state = 11935
                    self.match(PlSqlParser.CREATION)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [1193]:
                self.enterOuterAlt(localctx, 2)
                self.state = 11938
                self.match(PlSqlParser.ON)
                self.state = 11939
                self.function_name()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Segment_groupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_segment_group

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSegment_group" ):
                listener.enterSegment_group(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSegment_group" ):
                listener.exitSegment_group(self)




    def segment_group(self):

        localctx = PlSqlParser.Segment_groupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1220, self.RULE_segment_group)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11942
            _la = self._input.LA(1)
            if not(_la==609 or _la==1567):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_inmemory_policyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ilm_after_on(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_after_onContext,0)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def inmemory_memcompress(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_memcompressContext,0)


        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def inmemory_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_attributesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_inmemory_policy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_inmemory_policy" ):
                listener.enterIlm_inmemory_policy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_inmemory_policy" ):
                listener.exitIlm_inmemory_policy(self)




    def ilm_inmemory_policy(self):

        localctx = PlSqlParser.Ilm_inmemory_policyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1222, self.RULE_ilm_inmemory_policy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11954
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1590]:
                self.state = 11944
                self.match(PlSqlParser.SET)
                self.state = 11945
                self.match(PlSqlParser.INMEMORY)
                self.state = 11947
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==420 or _la==444 or _la==887 or _la==1074 or _la==1378:
                    self.state = 11946
                    self.inmemory_attributes()


                pass
            elif token in [926]:
                self.state = 11949
                self.match(PlSqlParser.MODIFY)
                self.state = 11950
                self.match(PlSqlParser.INMEMORY)
                self.state = 11951
                self.inmemory_memcompress()
                pass
            elif token in [1074]:
                self.state = 11952
                self.match(PlSqlParser.NO)
                self.state = 11953
                self.match(PlSqlParser.INMEMORY)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 11957
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1567:
                self.state = 11956
                self.match(PlSqlParser.SEGMENT)


            self.state = 11959
            self.ilm_after_on()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ilm_time_periodContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def DAY(self):
            return self.getToken(PlSqlParser.DAY, 0)

        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def MONTHS(self):
            return self.getToken(PlSqlParser.MONTHS, 0)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def YEARS(self):
            return self.getToken(PlSqlParser.YEARS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_ilm_time_period

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIlm_time_period" ):
                listener.enterIlm_time_period(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIlm_time_period" ):
                listener.exitIlm_time_period(self)




    def ilm_time_period(self):

        localctx = PlSqlParser.Ilm_time_periodContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1224, self.RULE_ilm_time_period)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11961
            self.numeric()
            self.state = 11962
            _la = self._input.LA(1)
            if not(_la==346 or _la==347 or _la==931 or _la==933 or _la==2259 or _la==2260):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Heap_org_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def inmemory_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_table_clauseContext,0)


        def ilm_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Ilm_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_heap_org_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHeap_org_table_clause" ):
                listener.enterHeap_org_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHeap_org_table_clause" ):
                listener.exitHeap_org_table_clause(self)




    def heap_org_table_clause(self):

        localctx = PlSqlParser.Heap_org_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1226, self.RULE_heap_org_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11965
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1501,self._ctx)
            if la_ == 1:
                self.state = 11964
                self.table_compression()


            self.state = 11968
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1502,self._ctx)
            if la_ == 1:
                self.state = 11967
                self.inmemory_table_clause()


            self.state = 11971
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==655:
                self.state = 11970
                self.ilm_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class External_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def external_table_data_props(self):
            return self.getTypedRuleContext(PlSqlParser.External_table_data_propsContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def access_driver_type(self):
            return self.getTypedRuleContext(PlSqlParser.Access_driver_typeContext,0)


        def REJECT(self):
            return self.getToken(PlSqlParser.REJECT, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def inmemory_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Inmemory_table_clauseContext,0)


        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_external_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExternal_table_clause" ):
                listener.enterExternal_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExternal_table_clause" ):
                listener.exitExternal_table_clause(self)




    def external_table_clause(self):

        localctx = PlSqlParser.External_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1228, self.RULE_external_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11973
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 11976
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2076:
                self.state = 11974
                self.match(PlSqlParser.TYPE)
                self.state = 11975
                self.access_driver_type()


            self.state = 11978
            self.external_table_data_props()
            self.state = 11979
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 11986
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1506,self._ctx)
            if la_ == 1:
                self.state = 11980
                self.match(PlSqlParser.REJECT)
                self.state = 11981
                self.match(PlSqlParser.LIMIT)
                self.state = 11984
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2341, 2342]:
                    self.state = 11982
                    self.numeric()
                    pass
                elif token in [2093]:
                    self.state = 11983
                    self.match(PlSqlParser.UNLIMITED)
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 11989
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1507,self._ctx)
            if la_ == 1:
                self.state = 11988
                self.inmemory_table_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Access_driver_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ORACLE_LOADER(self):
            return self.getToken(PlSqlParser.ORACLE_LOADER, 0)

        def ORACLE_DATAPUMP(self):
            return self.getToken(PlSqlParser.ORACLE_DATAPUMP, 0)

        def ORACLE_HDFS(self):
            return self.getToken(PlSqlParser.ORACLE_HDFS, 0)

        def ORACLE_HIVE(self):
            return self.getToken(PlSqlParser.ORACLE_HIVE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_access_driver_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAccess_driver_type" ):
                listener.enterAccess_driver_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAccess_driver_type" ):
                listener.exitAccess_driver_type(self)




    def access_driver_type(self):

        localctx = PlSqlParser.Access_driver_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1230, self.RULE_access_driver_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11991
            _la = self._input.LA(1)
            if not(((((_la - 2280)) & ~0x3f) == 0 and ((1 << (_la - 2280)) & 15) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class External_table_data_propsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def directory_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Directory_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Directory_nameContext,i)


        def ACCESS(self):
            return self.getToken(PlSqlParser.ACCESS, 0)

        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def LOCATION(self):
            return self.getToken(PlSqlParser.LOCATION, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def COLON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COLON)
            else:
                return self.getToken(PlSqlParser.COLON, i)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def opaque_format_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Opaque_format_specContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def select_only_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_only_statementContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_external_table_data_props

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExternal_table_data_props" ):
                listener.enterExternal_table_data_props(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExternal_table_data_props" ):
                listener.exitExternal_table_data_props(self)




    def external_table_data_props(self):

        localctx = PlSqlParser.External_table_data_propsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1232, self.RULE_external_table_data_props)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 11996
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 11993
                self.match(PlSqlParser.DEFAULT)
                self.state = 11994
                self.match(PlSqlParser.DIRECTORY)
                self.state = 11995
                self.directory_name()


            self.state = 12012
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==4:
                self.state = 11998
                self.match(PlSqlParser.ACCESS)
                self.state = 11999
                self.match(PlSqlParser.PARAMETERS)
                self.state = 12010
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1509,self._ctx)
                if la_ == 1:
                    self.state = 12000
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 12001
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 12002
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass

                elif la_ == 2:
                    self.state = 12003
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 12004
                    self.opaque_format_spec()
                    self.state = 12005
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass

                elif la_ == 3:
                    self.state = 12007
                    self.match(PlSqlParser.USING)
                    self.state = 12008
                    self.match(PlSqlParser.CLOB)
                    self.state = 12009
                    self.select_only_statement()
                    pass




            self.state = 12031
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==824:
                self.state = 12014
                self.match(PlSqlParser.LOCATION)
                self.state = 12015
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 12016
                self.directory_name()
                self.state = 12017
                self.match(PlSqlParser.COLON)
                self.state = 12018
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 12026
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12019
                    self.match(PlSqlParser.COMMA)
                    self.state = 12020
                    self.directory_name()
                    self.state = 12021
                    self.match(PlSqlParser.COLON)
                    self.state = 12022
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 12028
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 12029
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Opaque_format_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return PlSqlParser.RULE_opaque_format_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOpaque_format_spec" ):
                listener.enterOpaque_format_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOpaque_format_spec" ):
                listener.exitOpaque_format_spec(self)




    def opaque_format_spec(self):

        localctx = PlSqlParser.Opaque_format_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1234, self.RULE_opaque_format_spec)
        try:
            self.enterOuterAlt(localctx, 1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Row_movement_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def MOVEMENT(self):
            return self.getToken(PlSqlParser.MOVEMENT, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_row_movement_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRow_movement_clause" ):
                listener.enterRow_movement_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRow_movement_clause" ):
                listener.exitRow_movement_clause(self)




    def row_movement_clause(self):

        localctx = PlSqlParser.Row_movement_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1236, self.RULE_row_movement_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12036
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 12035
                _la = self._input.LA(1)
                if not(_la==404 or _la==467):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 12038
            self.match(PlSqlParser.ROW)
            self.state = 12039
            self.match(PlSqlParser.MOVEMENT)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Flashback_archive_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fa = None # Id_expressionContext

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_flashback_archive_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlashback_archive_clause" ):
                listener.enterFlashback_archive_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlashback_archive_clause" ):
                listener.exitFlashback_archive_clause(self)




    def flashback_archive_clause(self):

        localctx = PlSqlParser.Flashback_archive_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1238, self.RULE_flashback_archive_clause)
        try:
            self.state = 12049
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [565]:
                self.enterOuterAlt(localctx, 1)
                self.state = 12041
                self.match(PlSqlParser.FLASHBACK)
                self.state = 12042
                self.match(PlSqlParser.ARCHIVE)
                self.state = 12044
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1514,self._ctx)
                if la_ == 1:
                    self.state = 12043
                    localctx.fa = self.id_expression()


                pass
            elif token in [1074]:
                self.enterOuterAlt(localctx, 2)
                self.state = 12046
                self.match(PlSqlParser.NO)
                self.state = 12047
                self.match(PlSqlParser.FLASHBACK)
                self.state = 12048
                self.match(PlSqlParser.ARCHIVE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Log_grpContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_log_grp

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLog_grp" ):
                listener.enterLog_grp(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLog_grp" ):
                listener.exitLog_grp(self)




    def log_grp(self):

        localctx = PlSqlParser.Log_grpContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1240, self.RULE_log_grp)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12051
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Supplemental_table_loggingContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def SUPPLEMENTAL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SUPPLEMENTAL)
            else:
                return self.getToken(PlSqlParser.SUPPLEMENTAL, i)

        def LOG(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOG)
            else:
                return self.getToken(PlSqlParser.LOG, i)

        def supplemental_log_grp_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Supplemental_log_grp_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Supplemental_log_grp_clauseContext,i)


        def supplemental_id_key_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Supplemental_id_key_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Supplemental_id_key_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def GROUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GROUP)
            else:
                return self.getToken(PlSqlParser.GROUP, i)

        def log_grp(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Log_grpContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Log_grpContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_supplemental_table_logging

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSupplemental_table_logging" ):
                listener.enterSupplemental_table_logging(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSupplemental_table_logging" ):
                listener.exitSupplemental_table_logging(self)




    def supplemental_table_logging(self):

        localctx = PlSqlParser.Supplemental_table_loggingContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1242, self.RULE_supplemental_table_logging)
        self._la = 0 # Token type
        try:
            self.state = 12093
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 12053
                self.match(PlSqlParser.ADD)
                self.state = 12054
                self.match(PlSqlParser.SUPPLEMENTAL)
                self.state = 12055
                self.match(PlSqlParser.LOG)
                self.state = 12058
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [609]:
                    self.state = 12056
                    self.supplemental_log_grp_clause()
                    pass
                elif token in [334]:
                    self.state = 12057
                    self.supplemental_id_key_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12069
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12060
                    self.match(PlSqlParser.COMMA)
                    self.state = 12061
                    self.match(PlSqlParser.SUPPLEMENTAL)
                    self.state = 12062
                    self.match(PlSqlParser.LOG)
                    self.state = 12065
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [609]:
                        self.state = 12063
                        self.supplemental_log_grp_clause()
                        pass
                    elif token in [334]:
                        self.state = 12064
                        self.supplemental_id_key_clause()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 12071
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 12072
                self.match(PlSqlParser.DROP)
                self.state = 12073
                self.match(PlSqlParser.SUPPLEMENTAL)
                self.state = 12074
                self.match(PlSqlParser.LOG)
                self.state = 12078
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [334]:
                    self.state = 12075
                    self.supplemental_id_key_clause()
                    pass
                elif token in [609]:
                    self.state = 12076
                    self.match(PlSqlParser.GROUP)
                    self.state = 12077
                    self.log_grp()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12090
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12080
                    self.match(PlSqlParser.COMMA)
                    self.state = 12081
                    self.match(PlSqlParser.SUPPLEMENTAL)
                    self.state = 12082
                    self.match(PlSqlParser.LOG)
                    self.state = 12086
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [334]:
                        self.state = 12083
                        self.supplemental_id_key_clause()
                        pass
                    elif token in [609]:
                        self.state = 12084
                        self.match(PlSqlParser.GROUP)
                        self.state = 12085
                        self.log_grp()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 12092
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Supplemental_log_grp_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def log_grp(self):
            return self.getTypedRuleContext(PlSqlParser.Log_grpContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def regular_id(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Regular_idContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Regular_idContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def NO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NO)
            else:
                return self.getToken(PlSqlParser.NO, i)

        def LOG(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOG)
            else:
                return self.getToken(PlSqlParser.LOG, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def ALWAYS(self):
            return self.getToken(PlSqlParser.ALWAYS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_supplemental_log_grp_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSupplemental_log_grp_clause" ):
                listener.enterSupplemental_log_grp_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSupplemental_log_grp_clause" ):
                listener.exitSupplemental_log_grp_clause(self)




    def supplemental_log_grp_clause(self):

        localctx = PlSqlParser.Supplemental_log_grp_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1244, self.RULE_supplemental_log_grp_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12095
            self.match(PlSqlParser.GROUP)
            self.state = 12096
            self.log_grp()
            self.state = 12097
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 12098
            self.regular_id()
            self.state = 12101
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1074:
                self.state = 12099
                self.match(PlSqlParser.NO)
                self.state = 12100
                self.match(PlSqlParser.LOG)


            self.state = 12111
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12103
                self.match(PlSqlParser.COMMA)
                self.state = 12104
                self.regular_id()
                self.state = 12107
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 12105
                    self.match(PlSqlParser.NO)
                    self.state = 12106
                    self.match(PlSqlParser.LOG)


                self.state = 12113
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12114
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 12116
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==44:
                self.state = 12115
                self.match(PlSqlParser.ALWAYS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Supplemental_id_key_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def ALL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ALL)
            else:
                return self.getToken(PlSqlParser.ALL, i)

        def PRIMARY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PRIMARY)
            else:
                return self.getToken(PlSqlParser.PRIMARY, i)

        def KEY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEY)
            else:
                return self.getToken(PlSqlParser.KEY, i)

        def UNIQUE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNIQUE)
            else:
                return self.getToken(PlSqlParser.UNIQUE, i)

        def FOREIGN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FOREIGN)
            else:
                return self.getToken(PlSqlParser.FOREIGN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_supplemental_id_key_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSupplemental_id_key_clause" ):
                listener.enterSupplemental_id_key_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSupplemental_id_key_clause" ):
                listener.exitSupplemental_id_key_clause(self)




    def supplemental_id_key_clause(self):

        localctx = PlSqlParser.Supplemental_id_key_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1246, self.RULE_supplemental_id_key_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12118
            self.match(PlSqlParser.DATA)
            self.state = 12119
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 12131 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 12121
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 12120
                    self.match(PlSqlParser.COMMA)


                self.state = 12129
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [38]:
                    self.state = 12123
                    self.match(PlSqlParser.ALL)
                    pass
                elif token in [1376]:
                    self.state = 12124
                    self.match(PlSqlParser.PRIMARY)
                    self.state = 12125
                    self.match(PlSqlParser.KEY)
                    pass
                elif token in [2091]:
                    self.state = 12126
                    self.match(PlSqlParser.UNIQUE)
                    pass
                elif token in [578]:
                    self.state = 12127
                    self.match(PlSqlParser.FOREIGN)
                    self.state = 12128
                    self.match(PlSqlParser.KEY)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12133 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==38 or _la==578 or _la==1376 or _la==2091 or _la==2353):
                    break

            self.state = 12135
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 12136
            self.match(PlSqlParser.COLUMNS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Allocate_extent_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.datafile = None # Token
            self.inst_num = None # Token

        def ALLOCATE(self):
            return self.getToken(PlSqlParser.ALLOCATE, 0)

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SIZE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SIZE)
            else:
                return self.getToken(PlSqlParser.SIZE, i)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def DATAFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DATAFILE)
            else:
                return self.getToken(PlSqlParser.DATAFILE, i)

        def INSTANCE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INSTANCE)
            else:
                return self.getToken(PlSqlParser.INSTANCE, i)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_allocate_extent_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAllocate_extent_clause" ):
                listener.enterAllocate_extent_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAllocate_extent_clause" ):
                listener.exitAllocate_extent_clause(self)




    def allocate_extent_clause(self):

        localctx = PlSqlParser.Allocate_extent_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1248, self.RULE_allocate_extent_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12138
            self.match(PlSqlParser.ALLOCATE)
            self.state = 12139
            self.match(PlSqlParser.EXTENT)
            self.state = 12152
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 12140
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 12147 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 12147
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1617]:
                        self.state = 12141
                        self.match(PlSqlParser.SIZE)
                        self.state = 12142
                        self.size_clause()
                        pass
                    elif token in [335]:
                        self.state = 12143
                        self.match(PlSqlParser.DATAFILE)
                        self.state = 12144
                        localctx.datafile = self.match(PlSqlParser.CHAR_STRING)
                        pass
                    elif token in [716]:
                        self.state = 12145
                        self.match(PlSqlParser.INSTANCE)
                        self.state = 12146
                        localctx.inst_num = self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 12149 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==335 or _la==716 or _la==1617):
                        break

                self.state = 12151
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Deallocate_unused_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEALLOCATE(self):
            return self.getToken(PlSqlParser.DEALLOCATE, 0)

        def UNUSED(self):
            return self.getToken(PlSqlParser.UNUSED, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_deallocate_unused_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeallocate_unused_clause" ):
                listener.enterDeallocate_unused_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeallocate_unused_clause" ):
                listener.exitDeallocate_unused_clause(self)




    def deallocate_unused_clause(self):

        localctx = PlSqlParser.Deallocate_unused_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1250, self.RULE_deallocate_unused_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12154
            self.match(PlSqlParser.DEALLOCATE)
            self.state = 12155
            self.match(PlSqlParser.UNUSED)
            self.state = 12158
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==768:
                self.state = 12156
                self.match(PlSqlParser.KEEP)
                self.state = 12157
                self.size_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Shrink_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SHRINK(self):
            return self.getToken(PlSqlParser.SHRINK, 0)

        def SPACE_KEYWORD(self):
            return self.getToken(PlSqlParser.SPACE_KEYWORD, 0)

        def COMPACT(self):
            return self.getToken(PlSqlParser.COMPACT, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_shrink_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterShrink_clause" ):
                listener.enterShrink_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitShrink_clause" ):
                listener.exitShrink_clause(self)




    def shrink_clause(self):

        localctx = PlSqlParser.Shrink_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1252, self.RULE_shrink_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12160
            self.match(PlSqlParser.SHRINK)
            self.state = 12161
            self.match(PlSqlParser.SPACE_KEYWORD)
            self.state = 12163
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==235:
                self.state = 12162
                self.match(PlSqlParser.COMPACT)


            self.state = 12166
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 12165
                self.match(PlSqlParser.CASCADE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Records_per_block_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RECORDS_PER_BLOCK(self):
            return self.getToken(PlSqlParser.RECORDS_PER_BLOCK, 0)

        def MINIMIZE(self):
            return self.getToken(PlSqlParser.MINIMIZE, 0)

        def NOMINIMIZE(self):
            return self.getToken(PlSqlParser.NOMINIMIZE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_records_per_block_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRecords_per_block_clause" ):
                listener.enterRecords_per_block_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRecords_per_block_clause" ):
                listener.exitRecords_per_block_clause(self)




    def records_per_block_clause(self):

        localctx = PlSqlParser.Records_per_block_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1254, self.RULE_records_per_block_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12169
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==899 or _la==1061:
                self.state = 12168
                _la = self._input.LA(1)
                if not(_la==899 or _la==1061):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 12171
            self.match(PlSqlParser.RECORDS_PER_BLOCK)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Upgrade_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UPGRADE(self):
            return self.getToken(PlSqlParser.UPGRADE, 0)

        def column_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Column_propertiesContext,0)


        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_upgrade_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpgrade_table_clause" ):
                listener.enterUpgrade_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpgrade_table_clause" ):
                listener.exitUpgrade_table_clause(self)




    def upgrade_table_clause(self):

        localctx = PlSqlParser.Upgrade_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1256, self.RULE_upgrade_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12173
            self.match(PlSqlParser.UPGRADE)

            self.state = 12175
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 12174
                self.match(PlSqlParser.NOT)


            self.state = 12177
            self.match(PlSqlParser.INCLUDING)
            self.state = 12178
            self.match(PlSqlParser.DATA)
            self.state = 12180
            self.column_properties()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Truncate_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_truncate_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTruncate_table" ):
                listener.enterTruncate_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTruncate_table" ):
                listener.exitTruncate_table(self)




    def truncate_table(self):

        localctx = PlSqlParser.Truncate_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1258, self.RULE_truncate_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12182
            self.match(PlSqlParser.TRUNCATE)
            self.state = 12183
            self.match(PlSqlParser.TABLE)
            self.state = 12184
            self.tableview_name()
            self.state = 12186
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1400:
                self.state = 12185
                self.match(PlSqlParser.PURGE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_table" ):
                listener.enterDrop_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_table" ):
                listener.exitDrop_table(self)




    def drop_table(self):

        localctx = PlSqlParser.Drop_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1260, self.RULE_drop_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12188
            self.match(PlSqlParser.DROP)
            self.state = 12189
            self.match(PlSqlParser.TABLE)
            self.state = 12190
            self.tableview_name()
            self.state = 12193
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 12191
                self.match(PlSqlParser.IF)
                self.state = 12192
                self.match(PlSqlParser.EXISTS)


            self.state = 12196
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1400:
                self.state = 12195
                self.match(PlSqlParser.PURGE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_tablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ts = None # Id_expressionContext

        def DROP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DROP)
            else:
                return self.getToken(PlSqlParser.DROP, i)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def including_contents_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Including_contents_clauseContext,0)


        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def QUOTA(self):
            return self.getToken(PlSqlParser.QUOTA, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_tablespace" ):
                listener.enterDrop_tablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_tablespace" ):
                listener.exitDrop_tablespace(self)




    def drop_tablespace(self):

        localctx = PlSqlParser.Drop_tablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1262, self.RULE_drop_tablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12198
            self.match(PlSqlParser.DROP)
            self.state = 12199
            self.match(PlSqlParser.TABLESPACE)
            self.state = 12200
            localctx.ts = self.id_expression()
            self.state = 12203
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 12201
                self.match(PlSqlParser.IF)
                self.state = 12202
                self.match(PlSqlParser.EXISTS)


            self.state = 12209
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==438 or _la==768:
                self.state = 12205
                _la = self._input.LA(1)
                if not(_la==438 or _la==768):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 12207
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1415:
                    self.state = 12206
                    self.match(PlSqlParser.QUOTA)




            self.state = 12212
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==663:
                self.state = 12211
                self.including_contents_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_tablespace_setContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tss = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def including_contents_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Including_contents_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_tablespace_set

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_tablespace_set" ):
                listener.enterDrop_tablespace_set(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_tablespace_set" ):
                listener.exitDrop_tablespace_set(self)




    def drop_tablespace_set(self):

        localctx = PlSqlParser.Drop_tablespace_setContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1264, self.RULE_drop_tablespace_set)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12214
            self.match(PlSqlParser.DROP)
            self.state = 12215
            self.match(PlSqlParser.TABLESPACE)
            self.state = 12216
            self.match(PlSqlParser.SET)
            self.state = 12217
            localctx.tss = self.id_expression()
            self.state = 12219
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==663:
                self.state = 12218
                self.including_contents_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Including_contents_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def CONTENTS(self):
            return self.getToken(PlSqlParser.CONTENTS, 0)

        def DATAFILES(self):
            return self.getToken(PlSqlParser.DATAFILES, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def CONSTRAINTS(self):
            return self.getToken(PlSqlParser.CONSTRAINTS, 0)

        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_including_contents_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIncluding_contents_clause" ):
                listener.enterIncluding_contents_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIncluding_contents_clause" ):
                listener.exitIncluding_contents_clause(self)




    def including_contents_clause(self):

        localctx = PlSqlParser.Including_contents_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1266, self.RULE_including_contents_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12221
            self.match(PlSqlParser.INCLUDING)
            self.state = 12222
            self.match(PlSqlParser.CONTENTS)
            self.state = 12225
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==49 or _la==768:
                self.state = 12223
                _la = self._input.LA(1)
                if not(_la==49 or _la==768):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 12224
                self.match(PlSqlParser.DATAFILES)


            self.state = 12229
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 12227
                self.match(PlSqlParser.CASCADE)
                self.state = 12228
                self.match(PlSqlParser.CONSTRAINTS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_view" ):
                listener.enterDrop_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_view" ):
                listener.exitDrop_view(self)




    def drop_view(self):

        localctx = PlSqlParser.Drop_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1268, self.RULE_drop_view)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12231
            self.match(PlSqlParser.DROP)
            self.state = 12232
            self.match(PlSqlParser.VIEW)
            self.state = 12233
            self.tableview_name()
            self.state = 12236
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==650:
                self.state = 12234
                self.match(PlSqlParser.IF)
                self.state = 12235
                self.match(PlSqlParser.EXISTS)


            self.state = 12240
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 12238
                self.match(PlSqlParser.CASCADE)
                self.state = 12239
                self.match(PlSqlParser.CONSTRAINT)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Comment_on_columnContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_comment_on_column

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComment_on_column" ):
                listener.enterComment_on_column(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComment_on_column" ):
                listener.exitComment_on_column(self)




    def comment_on_column(self):

        localctx = PlSqlParser.Comment_on_columnContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1270, self.RULE_comment_on_column)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12242
            self.match(PlSqlParser.COMMENT)
            self.state = 12243
            self.match(PlSqlParser.ON)
            self.state = 12244
            self.match(PlSqlParser.COLUMN)
            self.state = 12245
            self.column_name()
            self.state = 12246
            self.match(PlSqlParser.IS)
            self.state = 12247
            self.quoted_string()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Enable_or_disableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_enable_or_disable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnable_or_disable" ):
                listener.enterEnable_or_disable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnable_or_disable" ):
                listener.exitEnable_or_disable(self)




    def enable_or_disable(self):

        localctx = PlSqlParser.Enable_or_disableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1272, self.RULE_enable_or_disable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12249
            _la = self._input.LA(1)
            if not(_la==404 or _la==467):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Allow_or_disallowContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALLOW(self):
            return self.getToken(PlSqlParser.ALLOW, 0)

        def DISALLOW(self):
            return self.getToken(PlSqlParser.DISALLOW, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_allow_or_disallow

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAllow_or_disallow" ):
                listener.enterAllow_or_disallow(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAllow_or_disallow" ):
                listener.exitAllow_or_disallow(self)




    def allow_or_disallow(self):

        localctx = PlSqlParser.Allow_or_disallowContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1274, self.RULE_allow_or_disallow)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12251
            _la = self._input.LA(1)
            if not(_la==40 or _la==408):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_synonymContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def SYNONYM(self):
            return self.getToken(PlSqlParser.SYNONYM, 0)

        def synonym_name(self):
            return self.getTypedRuleContext(PlSqlParser.Synonym_nameContext,0)


        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_synonym

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_synonym" ):
                listener.enterAlter_synonym(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_synonym" ):
                listener.exitAlter_synonym(self)




    def alter_synonym(self):

        localctx = PlSqlParser.Alter_synonymContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1276, self.RULE_alter_synonym)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12253
            self.match(PlSqlParser.ALTER)
            self.state = 12255
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1398:
                self.state = 12254
                self.match(PlSqlParser.PUBLIC)


            self.state = 12257
            self.match(PlSqlParser.SYNONYM)
            self.state = 12261
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1551,self._ctx)
            if la_ == 1:
                self.state = 12258
                self.schema_name()
                self.state = 12259
                self.match(PlSqlParser.PERIOD)


            self.state = 12263
            self.synonym_name()
            self.state = 12264
            _la = self._input.LA(1)
            if not(_la==237 or _la==451 or _la==1070):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_synonymContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def SYNONYM(self):
            return self.getToken(PlSqlParser.SYNONYM, 0)

        def synonym_name(self):
            return self.getTypedRuleContext(PlSqlParser.Synonym_nameContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def schema_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Schema_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def AT_SIGN(self):
            return self.getToken(PlSqlParser.AT_SIGN, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_synonym

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_synonym" ):
                listener.enterCreate_synonym(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_synonym" ):
                listener.exitCreate_synonym(self)




    def create_synonym(self):

        localctx = PlSqlParser.Create_synonymContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1278, self.RULE_create_synonym)
        self._la = 0 # Token type
        try:
            self.state = 12313
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1560,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 12266
                self.match(PlSqlParser.CREATE)
                self.state = 12269
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1237:
                    self.state = 12267
                    self.match(PlSqlParser.OR)
                    self.state = 12268
                    self.match(PlSqlParser.REPLACE)


                self.state = 12271
                self.match(PlSqlParser.PUBLIC)
                self.state = 12272
                self.match(PlSqlParser.SYNONYM)
                self.state = 12273
                self.synonym_name()
                self.state = 12274
                self.match(PlSqlParser.FOR)
                self.state = 12278
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1553,self._ctx)
                if la_ == 1:
                    self.state = 12275
                    self.schema_name()
                    self.state = 12276
                    self.match(PlSqlParser.PERIOD)


                self.state = 12280
                self.schema_object_name()
                self.state = 12283
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2355:
                    self.state = 12281
                    self.match(PlSqlParser.AT_SIGN)
                    self.state = 12282
                    self.link_name()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 12285
                self.match(PlSqlParser.CREATE)
                self.state = 12288
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1237:
                    self.state = 12286
                    self.match(PlSqlParser.OR)
                    self.state = 12287
                    self.match(PlSqlParser.REPLACE)


                self.state = 12290
                self.match(PlSqlParser.SYNONYM)
                self.state = 12294
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1556,self._ctx)
                if la_ == 1:
                    self.state = 12291
                    self.schema_name()
                    self.state = 12292
                    self.match(PlSqlParser.PERIOD)


                self.state = 12296
                self.synonym_name()
                self.state = 12297
                self.match(PlSqlParser.FOR)
                self.state = 12301
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1557,self._ctx)
                if la_ == 1:
                    self.state = 12298
                    self.schema_name()
                    self.state = 12299
                    self.match(PlSqlParser.PERIOD)


                self.state = 12303
                self.schema_object_name()
                self.state = 12311
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2355:
                    self.state = 12304
                    self.match(PlSqlParser.AT_SIGN)
                    self.state = 12308
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1558,self._ctx)
                    if la_ == 1:
                        self.state = 12305
                        self.schema_name()
                        self.state = 12306
                        self.match(PlSqlParser.PERIOD)


                    self.state = 12310
                    self.link_name()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_synonymContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def SYNONYM(self):
            return self.getToken(PlSqlParser.SYNONYM, 0)

        def synonym_name(self):
            return self.getTypedRuleContext(PlSqlParser.Synonym_nameContext,0)


        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_synonym

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_synonym" ):
                listener.enterDrop_synonym(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_synonym" ):
                listener.exitDrop_synonym(self)




    def drop_synonym(self):

        localctx = PlSqlParser.Drop_synonymContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1280, self.RULE_drop_synonym)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12315
            self.match(PlSqlParser.DROP)
            self.state = 12317
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1398:
                self.state = 12316
                self.match(PlSqlParser.PUBLIC)


            self.state = 12319
            self.match(PlSqlParser.SYNONYM)
            self.state = 12323
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1562,self._ctx)
            if la_ == 1:
                self.state = 12320
                self.schema_name()
                self.state = 12321
                self.match(PlSqlParser.PERIOD)


            self.state = 12325
            self.synonym_name()
            self.state = 12327
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 12326
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_spfileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def SPFILE(self):
            return self.getToken(PlSqlParser.SPFILE, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def PFILE(self):
            return self.getToken(PlSqlParser.PFILE, 0)

        def MEMORY(self):
            return self.getToken(PlSqlParser.MEMORY, 0)

        def EQUALS_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EQUALS_OP)
            else:
                return self.getToken(PlSqlParser.EQUALS_OP, i)

        def spfile_name(self):
            return self.getTypedRuleContext(PlSqlParser.Spfile_nameContext,0)


        def pfile_name(self):
            return self.getTypedRuleContext(PlSqlParser.Pfile_nameContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def COPY(self):
            return self.getToken(PlSqlParser.COPY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_spfile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_spfile" ):
                listener.enterCreate_spfile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_spfile" ):
                listener.exitCreate_spfile(self)




    def create_spfile(self):

        localctx = PlSqlParser.Create_spfileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1282, self.RULE_create_spfile)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12329
            self.match(PlSqlParser.CREATE)
            self.state = 12330
            self.match(PlSqlParser.SPFILE)
            self.state = 12333
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2369:
                self.state = 12331
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 12332
                self.spfile_name()


            self.state = 12335
            self.match(PlSqlParser.FROM)
            self.state = 12346
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1318]:
                self.state = 12336
                self.match(PlSqlParser.PFILE)
                self.state = 12339
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2369:
                    self.state = 12337
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 12338
                    self.pfile_name()


                self.state = 12343
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 12341
                    self.match(PlSqlParser.AS)
                    self.state = 12342
                    self.match(PlSqlParser.COPY)


                pass
            elif token in [888]:
                self.state = 12345
                self.match(PlSqlParser.MEMORY)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Spfile_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_spfile_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSpfile_name" ):
                listener.enterSpfile_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSpfile_name" ):
                listener.exitSpfile_name(self)




    def spfile_name(self):

        localctx = PlSqlParser.Spfile_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1284, self.RULE_spfile_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12348
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pfile_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pfile_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPfile_name" ):
                listener.enterPfile_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPfile_name" ):
                listener.exitPfile_name(self)




    def pfile_name(self):

        localctx = PlSqlParser.Pfile_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1286, self.RULE_pfile_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12350
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Comment_on_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_comment_on_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComment_on_table" ):
                listener.enterComment_on_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComment_on_table" ):
                listener.exitComment_on_table(self)




    def comment_on_table(self):

        localctx = PlSqlParser.Comment_on_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1288, self.RULE_comment_on_table)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12352
            self.match(PlSqlParser.COMMENT)
            self.state = 12353
            self.match(PlSqlParser.ON)
            self.state = 12354
            self.match(PlSqlParser.TABLE)
            self.state = 12355
            self.tableview_name()
            self.state = 12356
            self.match(PlSqlParser.IS)
            self.state = 12357
            self.quoted_string()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Comment_on_materializedContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_comment_on_materialized

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterComment_on_materialized" ):
                listener.enterComment_on_materialized(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitComment_on_materialized" ):
                listener.exitComment_on_materialized(self)




    def comment_on_materialized(self):

        localctx = PlSqlParser.Comment_on_materializedContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1290, self.RULE_comment_on_materialized)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12359
            self.match(PlSqlParser.COMMENT)
            self.state = 12360
            self.match(PlSqlParser.ON)
            self.state = 12361
            self.match(PlSqlParser.MATERIALIZED)
            self.state = 12362
            self.match(PlSqlParser.VIEW)
            self.state = 12363
            self.tableview_name()
            self.state = 12364
            self.match(PlSqlParser.IS)
            self.state = 12365
            self.quoted_string()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_analytic_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.av = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def ANALYTIC(self):
            return self.getToken(PlSqlParser.ANALYTIC, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def alter_add_cache_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_add_cache_clauseContext,0)


        def alter_drop_cache_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_drop_cache_clauseContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_analytic_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_analytic_view" ):
                listener.enterAlter_analytic_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_analytic_view" ):
                listener.exitAlter_analytic_view(self)




    def alter_analytic_view(self):

        localctx = PlSqlParser.Alter_analytic_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1292, self.RULE_alter_analytic_view)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12367
            self.match(PlSqlParser.ALTER)
            self.state = 12368
            self.match(PlSqlParser.ANALYTIC)
            self.state = 12369
            self.match(PlSqlParser.VIEW)
            self.state = 12373
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1568,self._ctx)
            if la_ == 1:
                self.state = 12370
                self.schema_name()
                self.state = 12371
                self.match(PlSqlParser.PERIOD)


            self.state = 12375
            localctx.av = self.id_expression()
            self.state = 12382
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1481]:
                self.state = 12376
                self.match(PlSqlParser.RENAME)
                self.state = 12377
                self.match(PlSqlParser.TO)
                self.state = 12378
                self.id_expression()
                pass
            elif token in [237]:
                self.state = 12379
                self.match(PlSqlParser.COMPILE)
                pass
            elif token in [21]:
                self.state = 12380
                self.alter_add_cache_clause()
                pass
            elif token in [438]:
                self.state = 12381
                self.alter_drop_cache_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_add_cache_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def MEASURE(self):
            return self.getToken(PlSqlParser.MEASURE, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def levels_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Levels_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Levels_itemContext,i)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def measure_list(self):
            return self.getTypedRuleContext(PlSqlParser.Measure_listContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_add_cache_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_add_cache_clause" ):
                listener.enterAlter_add_cache_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_add_cache_clause" ):
                listener.exitAlter_add_cache_clause(self)




    def alter_add_cache_clause(self):

        localctx = PlSqlParser.Alter_add_cache_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1294, self.RULE_alter_add_cache_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12384
            self.match(PlSqlParser.ADD)
            self.state = 12385
            self.match(PlSqlParser.CACHE)
            self.state = 12386
            self.match(PlSqlParser.MEASURE)
            self.state = 12387
            self.match(PlSqlParser.GROUP)
            self.state = 12388
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 12391
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [38]:
                self.state = 12389
                self.match(PlSqlParser.ALL)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 12390
                self.measure_list()
                pass
            elif token in [2348]:
                pass
            else:
                pass
            self.state = 12393
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 12394
            self.match(PlSqlParser.LEVELS)
            self.state = 12395
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 12396
            self.levels_item()
            self.state = 12401
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12397
                self.match(PlSqlParser.COMMA)
                self.state = 12398
                self.levels_item()
                self.state = 12403
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12404
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Levels_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.d = None # Id_expressionContext
            self.h = None # Id_expressionContext
            self.l = None # Id_expressionContext

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_levels_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLevels_item" ):
                listener.enterLevels_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLevels_item" ):
                listener.exitLevels_item(self)




    def levels_item(self):

        localctx = PlSqlParser.Levels_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1296, self.RULE_levels_item)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12414
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1573,self._ctx)
            if la_ == 1:
                self.state = 12409
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1572,self._ctx)
                if la_ == 1:
                    self.state = 12406
                    localctx.d = self.id_expression()
                    self.state = 12407
                    self.match(PlSqlParser.PERIOD)


                self.state = 12411
                localctx.h = self.id_expression()
                self.state = 12412
                self.match(PlSqlParser.PERIOD)


            self.state = 12416
            localctx.l = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Measure_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_measure_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMeasure_list" ):
                listener.enterMeasure_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMeasure_list" ):
                listener.exitMeasure_list(self)




    def measure_list(self):

        localctx = PlSqlParser.Measure_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1298, self.RULE_measure_list)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12418
            self.id_expression()
            self.state = 12423
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12419
                self.match(PlSqlParser.COMMA)
                self.state = 12420
                self.id_expression()
                self.state = 12425
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_drop_cache_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def MEASURE(self):
            return self.getToken(PlSqlParser.MEASURE, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def levels_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Levels_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Levels_itemContext,i)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def measure_list(self):
            return self.getTypedRuleContext(PlSqlParser.Measure_listContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_drop_cache_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_drop_cache_clause" ):
                listener.enterAlter_drop_cache_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_drop_cache_clause" ):
                listener.exitAlter_drop_cache_clause(self)




    def alter_drop_cache_clause(self):

        localctx = PlSqlParser.Alter_drop_cache_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1300, self.RULE_alter_drop_cache_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12426
            self.match(PlSqlParser.DROP)
            self.state = 12427
            self.match(PlSqlParser.CACHE)
            self.state = 12428
            self.match(PlSqlParser.MEASURE)
            self.state = 12429
            self.match(PlSqlParser.GROUP)
            self.state = 12430
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 12433
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [38]:
                self.state = 12431
                self.match(PlSqlParser.ALL)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 12432
                self.measure_list()
                pass
            elif token in [2348]:
                pass
            else:
                pass
            self.state = 12435
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 12436
            self.match(PlSqlParser.LEVELS)
            self.state = 12437
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 12438
            self.levels_item()
            self.state = 12443
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12439
                self.match(PlSqlParser.COMMA)
                self.state = 12440
                self.levels_item()
                self.state = 12445
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12446
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_attribute_dimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ad = None # Id_expressionContext
            self.nad = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_attribute_dimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_attribute_dimension" ):
                listener.enterAlter_attribute_dimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_attribute_dimension" ):
                listener.exitAlter_attribute_dimension(self)




    def alter_attribute_dimension(self):

        localctx = PlSqlParser.Alter_attribute_dimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1302, self.RULE_alter_attribute_dimension)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12448
            self.match(PlSqlParser.ALTER)
            self.state = 12449
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 12450
            self.match(PlSqlParser.DIMENSION)
            self.state = 12454
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1577,self._ctx)
            if la_ == 1:
                self.state = 12451
                self.schema_name()
                self.state = 12452
                self.match(PlSqlParser.PERIOD)


            self.state = 12456
            localctx.ad = self.id_expression()
            self.state = 12461
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1481]:
                self.state = 12457
                self.match(PlSqlParser.RENAME)
                self.state = 12458
                self.match(PlSqlParser.TO)
                self.state = 12459
                localctx.nad = self.id_expression()
                pass
            elif token in [237]:
                self.state = 12460
                self.match(PlSqlParser.COMPILE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_audit_policyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.p = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def DROP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DROP)
            else:
                return self.getToken(PlSqlParser.DROP, i)

        def CONDITION(self):
            return self.getToken(PlSqlParser.CONDITION, 0)

        def privilege_audit_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Privilege_audit_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Privilege_audit_clauseContext,i)


        def action_audit_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Action_audit_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Action_audit_clauseContext,i)


        def role_audit_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Role_audit_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Role_audit_clauseContext,i)


        def ONLY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ONLY)
            else:
                return self.getToken(PlSqlParser.ONLY, i)

        def TOPLEVEL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TOPLEVEL)
            else:
                return self.getToken(PlSqlParser.TOPLEVEL, i)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def EVALUATE(self):
            return self.getToken(PlSqlParser.EVALUATE, 0)

        def PER(self):
            return self.getToken(PlSqlParser.PER, 0)

        def STATEMENT(self):
            return self.getToken(PlSqlParser.STATEMENT, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def INSTANCE(self):
            return self.getToken(PlSqlParser.INSTANCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_audit_policy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_audit_policy" ):
                listener.enterAlter_audit_policy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_audit_policy" ):
                listener.exitAlter_audit_policy(self)




    def alter_audit_policy(self):

        localctx = PlSqlParser.Alter_audit_policyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1304, self.RULE_alter_audit_policy)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12463
            self.match(PlSqlParser.ALTER)
            self.state = 12464
            self.match(PlSqlParser.AUDIT)
            self.state = 12465
            self.match(PlSqlParser.POLICY)
            self.state = 12466
            localctx.p = self.id_expression()
            self.state = 12468
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21:
                self.state = 12467
                self.match(PlSqlParser.ADD)


            self.state = 12483
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1584,self._ctx)
            if la_ == 1:
                self.state = 12471
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1580,self._ctx)
                if la_ == 1:
                    self.state = 12470
                    self.privilege_audit_clause()


                self.state = 12474
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1581,self._ctx)
                if la_ == 1:
                    self.state = 12473
                    self.action_audit_clause()


                self.state = 12477
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1582,self._ctx)
                if la_ == 1:
                    self.state = 12476
                    self.role_audit_clause()


                pass

            elif la_ == 2:
                self.state = 12481
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1583,self._ctx)
                if la_ == 1:
                    self.state = 12479
                    self.match(PlSqlParser.ONLY)
                    self.state = 12480
                    self.match(PlSqlParser.TOPLEVEL)


                pass


            self.state = 12486
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==438:
                self.state = 12485
                self.match(PlSqlParser.DROP)


            self.state = 12501
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1590,self._ctx)
            if la_ == 1:
                self.state = 12489
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1384:
                    self.state = 12488
                    self.privilege_audit_clause()


                self.state = 12492
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==12:
                    self.state = 12491
                    self.action_audit_clause()


                self.state = 12495
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1517:
                    self.state = 12494
                    self.role_audit_clause()


                pass

            elif la_ == 2:
                self.state = 12499
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1192:
                    self.state = 12497
                    self.match(PlSqlParser.ONLY)
                    self.state = 12498
                    self.match(PlSqlParser.TOPLEVEL)


                pass


            self.state = 12511
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==251:
                self.state = 12503
                self.match(PlSqlParser.CONDITION)
                self.state = 12509
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [438]:
                    self.state = 12504
                    self.match(PlSqlParser.DROP)
                    pass
                elif token in [2343]:
                    self.state = 12505
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 12506
                    self.match(PlSqlParser.EVALUATE)
                    self.state = 12507
                    self.match(PlSqlParser.PER)
                    self.state = 12508
                    _la = self._input.LA(1)
                    if not(_la==716 or _la==1586 or _la==1659):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_clusterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def SIZE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SIZE)
            else:
                return self.getToken(PlSqlParser.SIZE, i)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def allocate_extent_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allocate_extent_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,i)


        def deallocate_unused_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Deallocate_unused_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,i)


        def cache_or_nocache(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Cache_or_nocacheContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Cache_or_nocacheContext,i)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_cluster

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_cluster" ):
                listener.enterAlter_cluster(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_cluster" ):
                listener.exitAlter_cluster(self)




    def alter_cluster(self):

        localctx = PlSqlParser.Alter_clusterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1306, self.RULE_alter_cluster)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12513
            self.match(PlSqlParser.ALTER)
            self.state = 12514
            self.match(PlSqlParser.CLUSTER)
            self.state = 12515
            self.cluster_name()
            self.state = 12522 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 12522
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [247, 701, 877, 1296, 1299, 1678]:
                    self.state = 12516
                    self.physical_attributes_clause()
                    pass
                elif token in [1617]:
                    self.state = 12517
                    self.match(PlSqlParser.SIZE)
                    self.state = 12518
                    self.size_clause()
                    pass
                elif token in [39]:
                    self.state = 12519
                    self.allocate_extent_clause()
                    pass
                elif token in [356]:
                    self.state = 12520
                    self.deallocate_unused_clause()
                    pass
                elif token in [158, 1010]:
                    self.state = 12521
                    self.cache_or_nocache()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12524 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==39 or _la==158 or _la==247 or _la==356 or _la==701 or _la==877 or _la==1010 or _la==1296 or _la==1299 or _la==1617 or _la==1678):
                    break

            self.state = 12527
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 12526
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_analytic_viewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.av = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def ANALYTIC(self):
            return self.getToken(PlSqlParser.ANALYTIC, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_analytic_view

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_analytic_view" ):
                listener.enterDrop_analytic_view(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_analytic_view" ):
                listener.exitDrop_analytic_view(self)




    def drop_analytic_view(self):

        localctx = PlSqlParser.Drop_analytic_viewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1308, self.RULE_drop_analytic_view)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12529
            self.match(PlSqlParser.DROP)
            self.state = 12530
            self.match(PlSqlParser.ANALYTIC)
            self.state = 12531
            self.match(PlSqlParser.VIEW)
            self.state = 12535
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1596,self._ctx)
            if la_ == 1:
                self.state = 12532
                self.schema_name()
                self.state = 12533
                self.match(PlSqlParser.PERIOD)


            self.state = 12537
            localctx.av = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_attribute_dimensionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ad = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def schema_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_attribute_dimension

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_attribute_dimension" ):
                listener.enterDrop_attribute_dimension(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_attribute_dimension" ):
                listener.exitDrop_attribute_dimension(self)




    def drop_attribute_dimension(self):

        localctx = PlSqlParser.Drop_attribute_dimensionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1310, self.RULE_drop_attribute_dimension)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12539
            self.match(PlSqlParser.DROP)
            self.state = 12540
            self.match(PlSqlParser.ATTRIBUTE)
            self.state = 12541
            self.match(PlSqlParser.DIMENSION)
            self.state = 12545
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1597,self._ctx)
            if la_ == 1:
                self.state = 12542
                self.schema_name()
                self.state = 12543
                self.match(PlSqlParser.PERIOD)


            self.state = 12547
            localctx.ad = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_audit_policyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.p = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_audit_policy

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_audit_policy" ):
                listener.enterDrop_audit_policy(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_audit_policy" ):
                listener.exitDrop_audit_policy(self)




    def drop_audit_policy(self):

        localctx = PlSqlParser.Drop_audit_policyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1312, self.RULE_drop_audit_policy)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12549
            self.match(PlSqlParser.DROP)
            self.state = 12550
            self.match(PlSqlParser.AUDIT)
            self.state = 12551
            self.match(PlSqlParser.POLICY)
            self.state = 12552
            localctx.p = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_flashback_archiveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fa = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_flashback_archive

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_flashback_archive" ):
                listener.enterDrop_flashback_archive(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_flashback_archive" ):
                listener.exitDrop_flashback_archive(self)




    def drop_flashback_archive(self):

        localctx = PlSqlParser.Drop_flashback_archiveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1314, self.RULE_drop_flashback_archive)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12554
            self.match(PlSqlParser.DROP)
            self.state = 12555
            self.match(PlSqlParser.FLASHBACK)
            self.state = 12556
            self.match(PlSqlParser.ARCHIVE)
            self.state = 12557
            localctx.fa = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_clusterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def TABLES(self):
            return self.getToken(PlSqlParser.TABLES, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def CONSTRAINTS(self):
            return self.getToken(PlSqlParser.CONSTRAINTS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_cluster

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_cluster" ):
                listener.enterDrop_cluster(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_cluster" ):
                listener.exitDrop_cluster(self)




    def drop_cluster(self):

        localctx = PlSqlParser.Drop_clusterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1316, self.RULE_drop_cluster)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12559
            self.match(PlSqlParser.DROP)
            self.state = 12560
            self.match(PlSqlParser.CLUSTER)
            self.state = 12561
            self.cluster_name()
            self.state = 12568
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==663:
                self.state = 12562
                self.match(PlSqlParser.INCLUDING)
                self.state = 12563
                self.match(PlSqlParser.TABLES)
                self.state = 12566
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==171:
                    self.state = 12564
                    self.match(PlSqlParser.CASCADE)
                    self.state = 12565
                    self.match(PlSqlParser.CONSTRAINTS)




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_contextContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ns = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_context

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_context" ):
                listener.enterDrop_context(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_context" ):
                listener.exitDrop_context(self)




    def drop_context(self):

        localctx = PlSqlParser.Drop_contextContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1318, self.RULE_drop_context)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12570
            self.match(PlSqlParser.DROP)
            self.state = 12571
            self.match(PlSqlParser.CONTEXT)
            self.state = 12572
            localctx.ns = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_directoryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dn = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_directory

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_directory" ):
                listener.enterDrop_directory(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_directory" ):
                listener.exitDrop_directory(self)




    def drop_directory(self):

        localctx = PlSqlParser.Drop_directoryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1320, self.RULE_drop_directory)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12574
            self.match(PlSqlParser.DROP)
            self.state = 12575
            self.match(PlSqlParser.DIRECTORY)
            self.state = 12576
            localctx.dn = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_diskgroupContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.dgn = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def DISKGROUP(self):
            return self.getToken(PlSqlParser.DISKGROUP, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def CONTENTS(self):
            return self.getToken(PlSqlParser.CONTENTS, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def EXCLUDING(self):
            return self.getToken(PlSqlParser.EXCLUDING, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_diskgroup

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_diskgroup" ):
                listener.enterDrop_diskgroup(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_diskgroup" ):
                listener.exitDrop_diskgroup(self)




    def drop_diskgroup(self):

        localctx = PlSqlParser.Drop_diskgroupContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1322, self.RULE_drop_diskgroup)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12578
            self.match(PlSqlParser.DROP)
            self.state = 12579
            self.match(PlSqlParser.DISKGROUP)
            self.state = 12580
            localctx.dgn = self.id_expression()
            self.state = 12589
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==503 or _la==576 or _la==663:
                self.state = 12586
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [576, 663]:
                    self.state = 12582
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==576:
                        self.state = 12581
                        self.match(PlSqlParser.FORCE)


                    self.state = 12584
                    self.match(PlSqlParser.INCLUDING)
                    pass
                elif token in [503]:
                    self.state = 12585
                    self.match(PlSqlParser.EXCLUDING)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12588
                self.match(PlSqlParser.CONTENTS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_editionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.e = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_edition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_edition" ):
                listener.enterDrop_edition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_edition" ):
                listener.exitDrop_edition(self)




    def drop_edition(self):

        localctx = PlSqlParser.Drop_editionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1324, self.RULE_drop_edition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12591
            self.match(PlSqlParser.DROP)
            self.state = 12592
            self.match(PlSqlParser.EDITION)
            self.state = 12593
            localctx.e = self.id_expression()
            self.state = 12595
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 12594
                self.match(PlSqlParser.CASCADE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Truncate_clusterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def cluster_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cluster_nameContext,0)


        def STORAGE(self):
            return self.getToken(PlSqlParser.STORAGE, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_truncate_cluster

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTruncate_cluster" ):
                listener.enterTruncate_cluster(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTruncate_cluster" ):
                listener.exitTruncate_cluster(self)




    def truncate_cluster(self):

        localctx = PlSqlParser.Truncate_clusterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1326, self.RULE_truncate_cluster)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12597
            self.match(PlSqlParser.TRUNCATE)
            self.state = 12598
            self.match(PlSqlParser.CLUSTER)
            self.state = 12599
            self.cluster_name()
            self.state = 12602
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==438 or _la==1509:
                self.state = 12600
                _la = self._input.LA(1)
                if not(_la==438 or _la==1509):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 12601
                self.match(PlSqlParser.STORAGE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cache_or_nocacheContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cache_or_nocache

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCache_or_nocache" ):
                listener.enterCache_or_nocache(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCache_or_nocache" ):
                listener.exitCache_or_nocache(self)




    def cache_or_nocache(self):

        localctx = PlSqlParser.Cache_or_nocacheContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1328, self.RULE_cache_or_nocache)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12604
            _la = self._input.LA(1)
            if not(_la==158 or _la==1010):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Database_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_database_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatabase_name" ):
                listener.enterDatabase_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatabase_name" ):
                listener.exitDatabase_name(self)




    def database_name(self):

        localctx = PlSqlParser.Database_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1330, self.RULE_database_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12606
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_databaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def database_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Database_clauseContext,0)


        def startup_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Startup_clausesContext,0)


        def recovery_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Recovery_clausesContext,0)


        def database_file_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Database_file_clausesContext,0)


        def logfile_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Logfile_clausesContext,0)


        def controlfile_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Controlfile_clausesContext,0)


        def standby_database_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Standby_database_clausesContext,0)


        def default_settings_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Default_settings_clauseContext,0)


        def instance_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Instance_clausesContext,0)


        def security_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Security_clauseContext,0)


        def prepare_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Prepare_clauseContext,0)


        def drop_mirror_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_mirror_clauseContext,0)


        def lost_write_protection(self):
            return self.getTypedRuleContext(PlSqlParser.Lost_write_protectionContext,0)


        def cdb_fleet_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Cdb_fleet_clausesContext,0)


        def property_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Property_clausesContext,0)


        def replay_upgrade_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Replay_upgrade_clausesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_database

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_database" ):
                listener.enterAlter_database(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_database" ):
                listener.exitAlter_database(self)




    def alter_database(self):

        localctx = PlSqlParser.Alter_databaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1332, self.RULE_alter_database)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12608
            self.match(PlSqlParser.ALTER)
            self.state = 12609
            self.database_clause()
            self.state = 12625
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1605,self._ctx)
            if la_ == 1:
                self.state = 12610
                self.startup_clauses()
                pass

            elif la_ == 2:
                self.state = 12611
                self.recovery_clauses()
                pass

            elif la_ == 3:
                self.state = 12612
                self.database_file_clauses()
                pass

            elif la_ == 4:
                self.state = 12613
                self.logfile_clauses()
                pass

            elif la_ == 5:
                self.state = 12614
                self.controlfile_clauses()
                pass

            elif la_ == 6:
                self.state = 12615
                self.standby_database_clauses()
                pass

            elif la_ == 7:
                self.state = 12616
                self.default_settings_clause()
                pass

            elif la_ == 8:
                self.state = 12617
                self.instance_clauses()
                pass

            elif la_ == 9:
                self.state = 12618
                self.security_clause()
                pass

            elif la_ == 10:
                self.state = 12619
                self.prepare_clause()
                pass

            elif la_ == 11:
                self.state = 12620
                self.drop_mirror_clause()
                pass

            elif la_ == 12:
                self.state = 12621
                self.lost_write_protection()
                pass

            elif la_ == 13:
                self.state = 12622
                self.cdb_fleet_clauses()
                pass

            elif la_ == 14:
                self.state = 12623
                self.property_clauses()
                pass

            elif la_ == 15:
                self.state = 12624
                self.replay_upgrade_clauses()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Database_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def database_name(self):
            return self.getTypedRuleContext(PlSqlParser.Database_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_database_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatabase_clause" ):
                listener.enterDatabase_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatabase_clause" ):
                listener.exitDatabase_clause(self)




    def database_clause(self):

        localctx = PlSqlParser.Database_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1334, self.RULE_database_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12628
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1336:
                self.state = 12627
                self.match(PlSqlParser.PLUGGABLE)


            self.state = 12630
            self.match(PlSqlParser.DATABASE)
            self.state = 12632
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1607,self._ctx)
            if la_ == 1:
                self.state = 12631
                self.database_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Startup_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOUNT(self):
            return self.getToken(PlSqlParser.MOUNT, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def CLONE(self):
            return self.getToken(PlSqlParser.CLONE, 0)

        def OPEN(self):
            return self.getToken(PlSqlParser.OPEN, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def resetlogs_or_noresetlogs(self):
            return self.getTypedRuleContext(PlSqlParser.Resetlogs_or_noresetlogsContext,0)


        def upgrade_or_downgrade(self):
            return self.getTypedRuleContext(PlSqlParser.Upgrade_or_downgradeContext,0)


        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_startup_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStartup_clauses" ):
                listener.enterStartup_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStartup_clauses" ):
                listener.exitStartup_clauses(self)




    def startup_clauses(self):

        localctx = PlSqlParser.Startup_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1336, self.RULE_startup_clauses)
        self._la = 0 # Token type
        try:
            self.state = 12653
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1612,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 12634
                self.match(PlSqlParser.MOUNT)
                self.state = 12637
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==206 or _la==1651:
                    self.state = 12635
                    _la = self._input.LA(1)
                    if not(_la==206 or _la==1651):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 12636
                    self.match(PlSqlParser.DATABASE)


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 12639
                self.match(PlSqlParser.OPEN)
                self.state = 12642
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1429:
                    self.state = 12640
                    self.match(PlSqlParser.READ)
                    self.state = 12641
                    self.match(PlSqlParser.WRITE)


                self.state = 12645
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1110 or _la==1487:
                    self.state = 12644
                    self.resetlogs_or_noresetlogs()


                self.state = 12648
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==435 or _la==2118:
                    self.state = 12647
                    self.upgrade_or_downgrade()


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 12650
                self.match(PlSqlParser.OPEN)
                self.state = 12651
                self.match(PlSqlParser.READ)
                self.state = 12652
                self.match(PlSqlParser.ONLY)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Resetlogs_or_noresetlogsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RESETLOGS(self):
            return self.getToken(PlSqlParser.RESETLOGS, 0)

        def NORESETLOGS(self):
            return self.getToken(PlSqlParser.NORESETLOGS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_resetlogs_or_noresetlogs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterResetlogs_or_noresetlogs" ):
                listener.enterResetlogs_or_noresetlogs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitResetlogs_or_noresetlogs" ):
                listener.exitResetlogs_or_noresetlogs(self)




    def resetlogs_or_noresetlogs(self):

        localctx = PlSqlParser.Resetlogs_or_noresetlogsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1338, self.RULE_resetlogs_or_noresetlogs)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12655
            _la = self._input.LA(1)
            if not(_la==1110 or _la==1487):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Upgrade_or_downgradeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UPGRADE(self):
            return self.getToken(PlSqlParser.UPGRADE, 0)

        def DOWNGRADE(self):
            return self.getToken(PlSqlParser.DOWNGRADE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_upgrade_or_downgrade

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpgrade_or_downgrade" ):
                listener.enterUpgrade_or_downgrade(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpgrade_or_downgrade" ):
                listener.exitUpgrade_or_downgrade(self)




    def upgrade_or_downgrade(self):

        localctx = PlSqlParser.Upgrade_or_downgradeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1340, self.RULE_upgrade_or_downgrade)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12657
            _la = self._input.LA(1)
            if not(_la==435 or _la==2118):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Recovery_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def general_recovery(self):
            return self.getTypedRuleContext(PlSqlParser.General_recoveryContext,0)


        def managed_standby_recovery(self):
            return self.getTypedRuleContext(PlSqlParser.Managed_standby_recoveryContext,0)


        def begin_or_end(self):
            return self.getTypedRuleContext(PlSqlParser.Begin_or_endContext,0)


        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_recovery_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRecovery_clauses" ):
                listener.enterRecovery_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRecovery_clauses" ):
                listener.exitRecovery_clauses(self)




    def recovery_clauses(self):

        localctx = PlSqlParser.Recovery_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1342, self.RULE_recovery_clauses)
        try:
            self.state = 12664
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1613,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 12659
                self.general_recovery()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 12660
                self.managed_standby_recovery()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 12661
                self.begin_or_end()
                self.state = 12662
                self.match(PlSqlParser.BACKUP)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Begin_or_endContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_begin_or_end

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBegin_or_end" ):
                listener.enterBegin_or_end(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBegin_or_end" ):
                listener.exitBegin_or_end(self)




    def begin_or_end(self):

        localctx = PlSqlParser.Begin_or_endContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1344, self.RULE_begin_or_end)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12666
            _la = self._input.LA(1)
            if not(_la==110 or _la==473):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class General_recoveryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RECOVER(self):
            return self.getToken(PlSqlParser.RECOVER, 0)

        def CONTINUE(self):
            return self.getToken(PlSqlParser.CONTINUE, 0)

        def CANCEL(self):
            return self.getToken(PlSqlParser.CANCEL, 0)

        def AUTOMATIC(self):
            return self.getToken(PlSqlParser.AUTOMATIC, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def full_database_recovery(self):
            return self.getTypedRuleContext(PlSqlParser.Full_database_recoveryContext,0)


        def partial_database_recovery(self):
            return self.getTypedRuleContext(PlSqlParser.Partial_database_recoveryContext,0)


        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def TEST(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TEST)
            else:
                return self.getToken(PlSqlParser.TEST, i)

        def ALLOW(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ALLOW)
            else:
                return self.getToken(PlSqlParser.ALLOW, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def CORRUPTION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CORRUPTION)
            else:
                return self.getToken(PlSqlParser.CORRUPTION, i)

        def parallel_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_general_recovery

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGeneral_recovery" ):
                listener.enterGeneral_recovery(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGeneral_recovery" ):
                listener.exitGeneral_recovery(self)




    def general_recovery(self):

        localctx = PlSqlParser.General_recoveryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1346, self.RULE_general_recovery)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12668
            self.match(PlSqlParser.RECOVER)
            self.state = 12670
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1614,self._ctx)
            if la_ == 1:
                self.state = 12669
                self.match(PlSqlParser.AUTOMATIC)


            self.state = 12674
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1615,self._ctx)
            if la_ == 1:
                self.state = 12672
                self.match(PlSqlParser.FROM)
                self.state = 12673
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 12698
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1621,self._ctx)
            if la_ == 1:
                self.state = 12680
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1616,self._ctx)
                if la_ == 1:
                    self.state = 12676
                    self.full_database_recovery()

                elif la_ == 2:
                    self.state = 12677
                    self.partial_database_recovery()

                elif la_ == 3:
                    self.state = 12678
                    self.match(PlSqlParser.LOGFILE)
                    self.state = 12679
                    self.match(PlSqlParser.CHAR_STRING)


                self.state = 12691
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==40 or _la==1085 or _la==1261 or _la==2009:
                    self.state = 12687 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 12687
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [2009]:
                            self.state = 12682
                            self.match(PlSqlParser.TEST)
                            pass
                        elif token in [40]:
                            self.state = 12683
                            self.match(PlSqlParser.ALLOW)
                            self.state = 12684
                            self.match(PlSqlParser.UNSIGNED_INTEGER)
                            self.state = 12685
                            self.match(PlSqlParser.CORRUPTION)
                            pass
                        elif token in [1085, 1261]:
                            self.state = 12686
                            self.parallel_clause()
                            pass
                        else:
                            raise NoViableAltException(self)

                        self.state = 12689 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (_la==40 or _la==1085 or _la==1261 or _la==2009):
                            break



                pass

            elif la_ == 2:
                self.state = 12693
                self.match(PlSqlParser.CONTINUE)
                self.state = 12695
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 12694
                    self.match(PlSqlParser.DEFAULT)


                pass

            elif la_ == 3:
                self.state = 12697
                self.match(PlSqlParser.CANCEL)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Full_database_recoveryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def UNTIL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNTIL)
            else:
                return self.getToken(PlSqlParser.UNTIL, i)

        def USING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USING)
            else:
                return self.getToken(PlSqlParser.USING, i)

        def BACKUP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BACKUP)
            else:
                return self.getToken(PlSqlParser.BACKUP, i)

        def CONTROLFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONTROLFILE)
            else:
                return self.getToken(PlSqlParser.CONTROLFILE, i)

        def SNAPSHOT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SNAPSHOT)
            else:
                return self.getToken(PlSqlParser.SNAPSHOT, i)

        def TIME(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TIME)
            else:
                return self.getToken(PlSqlParser.TIME, i)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def CANCEL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CANCEL)
            else:
                return self.getToken(PlSqlParser.CANCEL, i)

        def CHANGE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHANGE)
            else:
                return self.getToken(PlSqlParser.CHANGE, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def CONSISTENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONSISTENT)
            else:
                return self.getToken(PlSqlParser.CONSISTENT, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_full_database_recovery

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFull_database_recovery" ):
                listener.enterFull_database_recovery(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFull_database_recovery" ):
                listener.exitFull_database_recovery(self)




    def full_database_recovery(self):

        localctx = PlSqlParser.Full_database_recoveryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1348, self.RULE_full_database_recovery)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12701
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1651:
                self.state = 12700
                self.match(PlSqlParser.STANDBY)


            self.state = 12703
            self.match(PlSqlParser.DATABASE)
            self.state = 12723
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1624 or _la==2109 or _la==2153:
                self.state = 12719 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 12719
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2109]:
                        self.state = 12704
                        self.match(PlSqlParser.UNTIL)
                        self.state = 12711
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [166]:
                            self.state = 12705
                            self.match(PlSqlParser.CANCEL)
                            pass
                        elif token in [2024]:
                            self.state = 12706
                            self.match(PlSqlParser.TIME)
                            self.state = 12707
                            self.match(PlSqlParser.CHAR_STRING)
                            pass
                        elif token in [182]:
                            self.state = 12708
                            self.match(PlSqlParser.CHANGE)
                            self.state = 12709
                            self.match(PlSqlParser.UNSIGNED_INTEGER)
                            pass
                        elif token in [268]:
                            self.state = 12710
                            self.match(PlSqlParser.CONSISTENT)
                            pass
                        else:
                            raise NoViableAltException(self)

                        pass
                    elif token in [2153]:
                        self.state = 12713
                        self.match(PlSqlParser.USING)
                        self.state = 12714
                        self.match(PlSqlParser.BACKUP)
                        self.state = 12715
                        self.match(PlSqlParser.CONTROLFILE)
                        pass
                    elif token in [1624]:
                        self.state = 12716
                        self.match(PlSqlParser.SNAPSHOT)
                        self.state = 12717
                        self.match(PlSqlParser.TIME)
                        self.state = 12718
                        self.match(PlSqlParser.CHAR_STRING)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 12721 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==1624 or _la==2109 or _la==2153):
                        break



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partial_database_recoveryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def filenumber(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenumberContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenumberContext,i)


        def partial_database_recovery_10g(self):
            return self.getTypedRuleContext(PlSqlParser.Partial_database_recovery_10gContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_partial_database_recovery

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartial_database_recovery" ):
                listener.enterPartial_database_recovery(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartial_database_recovery" ):
                listener.exitPartial_database_recovery(self)




    def partial_database_recovery(self):

        localctx = PlSqlParser.Partial_database_recoveryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1350, self.RULE_partial_database_recovery)
        self._la = 0 # Token type
        try:
            self.state = 12746
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1630,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 12725
                self.match(PlSqlParser.TABLESPACE)
                self.state = 12726
                self.tablespace()
                self.state = 12731
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12727
                    self.match(PlSqlParser.COMMA)
                    self.state = 12728
                    self.tablespace()
                    self.state = 12733
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 12734
                self.match(PlSqlParser.DATAFILE)
                self.state = 12735
                self.match(PlSqlParser.CHAR_STRING)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 12736
                self.filenumber()
                self.state = 12742
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2341 or _la==2353:
                    self.state = 12740
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2353]:
                        self.state = 12737
                        self.match(PlSqlParser.COMMA)
                        self.state = 12738
                        self.match(PlSqlParser.CHAR_STRING)
                        pass
                    elif token in [2341]:
                        self.state = 12739
                        self.filenumber()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 12744
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 12745
                self.partial_database_recovery_10g()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partial_database_recovery_10gContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def CONTROLFILE(self):
            return self.getToken(PlSqlParser.CONTROLFILE, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def filenumber(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenumberContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenumberContext,i)


        def CONSISTENT(self):
            return self.getToken(PlSqlParser.CONSISTENT, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_partial_database_recovery_10g

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartial_database_recovery_10g" ):
                listener.enterPartial_database_recovery_10g(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartial_database_recovery_10g" ):
                listener.exitPartial_database_recovery_10g(self)




    def partial_database_recovery_10g(self):

        localctx = PlSqlParser.Partial_database_recovery_10gContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1352, self.RULE_partial_database_recovery_10g)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12748
            if not self.isVersion10():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion10()")
            self.state = 12749
            self.match(PlSqlParser.STANDBY)
            self.state = 12770
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1996]:
                self.state = 12750
                self.match(PlSqlParser.TABLESPACE)
                self.state = 12751
                self.tablespace()
                self.state = 12756
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12752
                    self.match(PlSqlParser.COMMA)
                    self.state = 12753
                    self.tablespace()
                    self.state = 12758
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [335]:
                self.state = 12759
                self.match(PlSqlParser.DATAFILE)
                self.state = 12760
                self.match(PlSqlParser.CHAR_STRING)
                pass
            elif token in [2341]:
                self.state = 12761
                self.filenumber()
                self.state = 12767
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2341 or _la==2353:
                    self.state = 12765
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2353]:
                        self.state = 12762
                        self.match(PlSqlParser.COMMA)
                        self.state = 12763
                        self.match(PlSqlParser.CHAR_STRING)
                        pass
                    elif token in [2341]:
                        self.state = 12764
                        self.filenumber()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 12769
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

            self.state = 12772
            self.match(PlSqlParser.UNTIL)
            self.state = 12775
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==268:
                self.state = 12773
                self.match(PlSqlParser.CONSISTENT)
                self.state = 12774
                self.match(PlSqlParser.WITH)


            self.state = 12777
            self.match(PlSqlParser.CONTROLFILE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Managed_standby_recoveryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RECOVER(self):
            return self.getToken(PlSqlParser.RECOVER, 0)

        def MANAGED(self):
            return self.getToken(PlSqlParser.MANAGED, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def db_name(self):
            return self.getTypedRuleContext(PlSqlParser.Db_nameContext,0)


        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def IDENTITY(self):
            return self.getToken(PlSqlParser.IDENTITY, 0)

        def FINISH(self):
            return self.getToken(PlSqlParser.FINISH, 0)

        def CANCEL(self):
            return self.getToken(PlSqlParser.CANCEL, 0)

        def USING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USING)
            else:
                return self.getToken(PlSqlParser.USING, i)

        def CURRENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CURRENT)
            else:
                return self.getToken(PlSqlParser.CURRENT, i)

        def LOGFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOGFILE)
            else:
                return self.getToken(PlSqlParser.LOGFILE, i)

        def DISCONNECT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISCONNECT)
            else:
                return self.getToken(PlSqlParser.DISCONNECT, i)

        def NODELAY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NODELAY)
            else:
                return self.getToken(PlSqlParser.NODELAY, i)

        def UNTIL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNTIL)
            else:
                return self.getToken(PlSqlParser.UNTIL, i)

        def CHANGE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHANGE)
            else:
                return self.getToken(PlSqlParser.CHANGE, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def CONSISTENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONSISTENT)
            else:
                return self.getToken(PlSqlParser.CONSISTENT, i)

        def parallel_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,i)


        def FROM(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FROM)
            else:
                return self.getToken(PlSqlParser.FROM, i)

        def SESSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SESSION)
            else:
                return self.getToken(PlSqlParser.SESSION, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_managed_standby_recovery

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterManaged_standby_recovery" ):
                listener.enterManaged_standby_recovery(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitManaged_standby_recovery" ):
                listener.exitManaged_standby_recovery(self)




    def managed_standby_recovery(self):

        localctx = PlSqlParser.Managed_standby_recoveryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1354, self.RULE_managed_standby_recovery)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12779
            self.match(PlSqlParser.RECOVER)
            self.state = 12814
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [851]:
                self.state = 12780
                self.match(PlSqlParser.MANAGED)
                self.state = 12781
                self.match(PlSqlParser.STANDBY)
                self.state = 12782
                self.match(PlSqlParser.DATABASE)
                self.state = 12804
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [411, 1030, 1085, 1261, 2109, 2153]:
                    self.state = 12798 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while True:
                        self.state = 12798
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1637,self._ctx)
                        if la_ == 1:
                            self.state = 12783
                            self.match(PlSqlParser.USING)
                            self.state = 12784
                            self.match(PlSqlParser.CURRENT)
                            self.state = 12785
                            self.match(PlSqlParser.LOGFILE)
                            pass

                        elif la_ == 2:
                            self.state = 12786
                            self.match(PlSqlParser.DISCONNECT)
                            self.state = 12789
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==588:
                                self.state = 12787
                                self.match(PlSqlParser.FROM)
                                self.state = 12788
                                self.match(PlSqlParser.SESSION)


                            pass

                        elif la_ == 3:
                            self.state = 12791
                            self.match(PlSqlParser.NODELAY)
                            pass

                        elif la_ == 4:
                            self.state = 12792
                            self.match(PlSqlParser.UNTIL)
                            self.state = 12793
                            self.match(PlSqlParser.CHANGE)
                            self.state = 12794
                            self.match(PlSqlParser.UNSIGNED_INTEGER)
                            pass

                        elif la_ == 5:
                            self.state = 12795
                            self.match(PlSqlParser.UNTIL)
                            self.state = 12796
                            self.match(PlSqlParser.CONSISTENT)
                            pass

                        elif la_ == 6:
                            self.state = 12797
                            self.parallel_clause()
                            pass


                        self.state = 12800 
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if not (_la==411 or _la==1030 or _la==1085 or _la==1261 or _la==2109 or _la==2153):
                            break

                    pass
                elif token in [558]:
                    self.state = 12802
                    self.match(PlSqlParser.FINISH)
                    pass
                elif token in [166]:
                    self.state = 12803
                    self.match(PlSqlParser.CANCEL)
                    pass
                elif token in [-1, 2354, 2367]:
                    pass
                else:
                    pass
                pass
            elif token in [2052]:
                self.state = 12806
                self.match(PlSqlParser.TO)
                self.state = 12807
                self.match(PlSqlParser.LOGICAL)
                self.state = 12808
                self.match(PlSqlParser.STANDBY)
                self.state = 12812
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1640,self._ctx)
                if la_ == 1:
                    self.state = 12809
                    self.db_name()
                    pass

                elif la_ == 2:
                    self.state = 12810
                    self.match(PlSqlParser.KEEP)
                    self.state = 12811
                    self.match(PlSqlParser.IDENTITY)
                    pass


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Db_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_db_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDb_name" ):
                listener.enterDb_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDb_name" ):
                listener.exitDb_name(self)




    def db_name(self):

        localctx = PlSqlParser.Db_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1356, self.RULE_db_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12816
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Database_file_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def create_datafile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Create_datafile_clauseContext,0)


        def alter_datafile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_datafile_clauseContext,0)


        def alter_tempfile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_tempfile_clauseContext,0)


        def move_datafile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Move_datafile_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_database_file_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatabase_file_clauses" ):
                listener.enterDatabase_file_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatabase_file_clauses" ):
                listener.exitDatabase_file_clauses(self)




    def database_file_clauses(self):

        localctx = PlSqlParser.Database_file_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1358, self.RULE_database_file_clauses)
        self._la = 0 # Token type
        try:
            self.state = 12835
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1481]:
                self.enterOuterAlt(localctx, 1)
                self.state = 12818
                self.match(PlSqlParser.RENAME)
                self.state = 12819
                self.match(PlSqlParser.FILE)
                self.state = 12820
                self.filename()
                self.state = 12825
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12821
                    self.match(PlSqlParser.COMMA)
                    self.state = 12822
                    self.filename()
                    self.state = 12827
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 12828
                self.match(PlSqlParser.TO)
                self.state = 12829
                self.filename()
                pass
            elif token in [305]:
                self.enterOuterAlt(localctx, 2)
                self.state = 12831
                self.create_datafile_clause()
                pass
            elif token in [335]:
                self.enterOuterAlt(localctx, 3)
                self.state = 12832
                self.alter_datafile_clause()
                pass
            elif token in [2005]:
                self.enterOuterAlt(localctx, 4)
                self.state = 12833
                self.alter_tempfile_clause()
                pass
            elif token in [938]:
                self.enterOuterAlt(localctx, 5)
                self.state = 12834
                self.move_datafile_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_datafile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def filenumber(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenumberContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenumberContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_datafile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_datafile_clause" ):
                listener.enterCreate_datafile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_datafile_clause" ):
                listener.exitCreate_datafile_clause(self)




    def create_datafile_clause(self):

        localctx = PlSqlParser.Create_datafile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1360, self.RULE_create_datafile_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12837
            self.match(PlSqlParser.CREATE)
            self.state = 12838
            self.match(PlSqlParser.DATAFILE)
            self.state = 12841
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2343]:
                self.state = 12839
                self.filename()
                pass
            elif token in [2341]:
                self.state = 12840
                self.filenumber()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 12850
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12843
                self.match(PlSqlParser.COMMA)
                self.state = 12846
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 12844
                    self.filename()
                    pass
                elif token in [2341]:
                    self.state = 12845
                    self.filenumber()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12852
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12855
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 12853
                self.match(PlSqlParser.AS)

                self.state = 12854
                self.match(PlSqlParser.NEW)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_datafile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def filenumber(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenumberContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenumberContext,i)


        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_datafile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_datafile_clause" ):
                listener.enterAlter_datafile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_datafile_clause" ):
                listener.exitAlter_datafile_clause(self)




    def alter_datafile_clause(self):

        localctx = PlSqlParser.Alter_datafile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1362, self.RULE_alter_datafile_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12857
            self.match(PlSqlParser.DATAFILE)
            self.state = 12860
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2343]:
                self.state = 12858
                self.filename()
                pass
            elif token in [2341]:
                self.state = 12859
                self.filenumber()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 12869
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12862
                self.match(PlSqlParser.COMMA)
                self.state = 12865
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 12863
                    self.filename()
                    pass
                elif token in [2341]:
                    self.state = 12864
                    self.filenumber()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12871
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12883
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1190]:
                self.state = 12872
                self.match(PlSqlParser.ONLINE)
                pass
            elif token in [1177]:
                self.state = 12873
                self.match(PlSqlParser.OFFLINE)
                self.state = 12876
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==580:
                    self.state = 12874
                    self.match(PlSqlParser.FOR)
                    self.state = 12875
                    self.match(PlSqlParser.DROP)


                pass
            elif token in [1489]:
                self.state = 12878
                self.match(PlSqlParser.RESIZE)
                self.state = 12879
                self.size_clause()
                pass
            elif token in [91]:
                self.state = 12880
                self.autoextend_clause()
                pass
            elif token in [473]:
                self.state = 12881
                self.match(PlSqlParser.END)
                self.state = 12882
                self.match(PlSqlParser.BACKUP)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_tempfile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TEMPFILE(self):
            return self.getToken(PlSqlParser.TEMPFILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def filenumber(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenumberContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenumberContext,i)


        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def DATAFILES(self):
            return self.getToken(PlSqlParser.DATAFILES, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_tempfile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_tempfile_clause" ):
                listener.enterAlter_tempfile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_tempfile_clause" ):
                listener.exitAlter_tempfile_clause(self)




    def alter_tempfile_clause(self):

        localctx = PlSqlParser.Alter_tempfile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1364, self.RULE_alter_tempfile_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12885
            self.match(PlSqlParser.TEMPFILE)
            self.state = 12888
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2343]:
                self.state = 12886
                self.filename()
                pass
            elif token in [2341]:
                self.state = 12887
                self.filenumber()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 12897
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12890
                self.match(PlSqlParser.COMMA)
                self.state = 12893
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 12891
                    self.filename()
                    pass
                elif token in [2341]:
                    self.state = 12892
                    self.filenumber()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12899
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12908
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1489]:
                self.state = 12900
                self.match(PlSqlParser.RESIZE)
                self.state = 12901
                self.size_clause()
                pass
            elif token in [91]:
                self.state = 12902
                self.autoextend_clause()
                pass
            elif token in [438]:
                self.state = 12903
                self.match(PlSqlParser.DROP)

                self.state = 12904
                self.match(PlSqlParser.INCLUDING)
                self.state = 12905
                self.match(PlSqlParser.DATAFILES)
                pass
            elif token in [1190]:
                self.state = 12906
                self.match(PlSqlParser.ONLINE)
                pass
            elif token in [1177]:
                self.state = 12907
                self.match(PlSqlParser.OFFLINE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Move_datafile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def filenumber(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenumberContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenumberContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_move_datafile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMove_datafile_clause" ):
                listener.enterMove_datafile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMove_datafile_clause" ):
                listener.exitMove_datafile_clause(self)




    def move_datafile_clause(self):

        localctx = PlSqlParser.Move_datafile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1366, self.RULE_move_datafile_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12910
            self.match(PlSqlParser.MOVE)
            self.state = 12911
            self.match(PlSqlParser.DATAFILE)
            self.state = 12914
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2343]:
                self.state = 12912
                self.filename()
                pass
            elif token in [2341]:
                self.state = 12913
                self.filenumber()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 12923
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 12916
                self.match(PlSqlParser.COMMA)
                self.state = 12919
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 12917
                    self.filename()
                    pass
                elif token in [2341]:
                    self.state = 12918
                    self.filenumber()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 12925
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 12928
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2052:
                self.state = 12926
                self.match(PlSqlParser.TO)
                self.state = 12927
                self.filename()


            self.state = 12931
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1509:
                self.state = 12930
                self.match(PlSqlParser.REUSE)


            self.state = 12934
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==768:
                self.state = 12933
                self.match(PlSqlParser.KEEP)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logfile_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ARCHIVELOG(self):
            return self.getToken(PlSqlParser.ARCHIVELOG, 0)

        def NOARCHIVELOG(self):
            return self.getToken(PlSqlParser.NOARCHIVELOG, 0)

        def MANUAL(self):
            return self.getToken(PlSqlParser.MANUAL, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def NOLOGGING(self):
            return self.getToken(PlSqlParser.NOLOGGING, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def AVAILABILITY(self):
            return self.getToken(PlSqlParser.AVAILABILITY, 0)

        def LOAD(self):
            return self.getToken(PlSqlParser.LOAD, 0)

        def PERFORMANCE(self):
            return self.getToken(PlSqlParser.PERFORMANCE, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def CLEAR(self):
            return self.getToken(PlSqlParser.CLEAR, 0)

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def logfile_descriptor(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logfile_descriptorContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logfile_descriptorContext,i)


        def UNARCHIVED(self):
            return self.getToken(PlSqlParser.UNARCHIVED, 0)

        def UNRECOVERABLE(self):
            return self.getToken(PlSqlParser.UNRECOVERABLE, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def add_logfile_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Add_logfile_clausesContext,0)


        def drop_logfile_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_logfile_clausesContext,0)


        def switch_logfile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Switch_logfile_clauseContext,0)


        def supplemental_db_logging(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_db_loggingContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_logfile_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogfile_clauses" ):
                listener.enterLogfile_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogfile_clauses" ):
                listener.exitLogfile_clauses(self)




    def logfile_clauses(self):

        localctx = PlSqlParser.Logfile_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1368, self.RULE_logfile_clauses)
        self._la = 0 # Token type
        try:
            self.state = 12992
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1671,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 12941
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [65]:
                    self.state = 12936
                    self.match(PlSqlParser.ARCHIVELOG)
                    self.state = 12938
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==856:
                        self.state = 12937
                        self.match(PlSqlParser.MANUAL)


                    pass
                elif token in [1003]:
                    self.state = 12940
                    self.match(PlSqlParser.NOARCHIVELOG)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 12944
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 12943
                    self.match(PlSqlParser.NO)


                self.state = 12946
                self.match(PlSqlParser.FORCE)
                self.state = 12947
                self.match(PlSqlParser.LOGGING)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 12948
                self.match(PlSqlParser.SET)
                self.state = 12949
                self.match(PlSqlParser.STANDBY)
                self.state = 12950
                self.match(PlSqlParser.NOLOGGING)
                self.state = 12951
                self.match(PlSqlParser.FOR)
                self.state = 12956
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [334]:
                    self.state = 12952
                    self.match(PlSqlParser.DATA)
                    self.state = 12953
                    self.match(PlSqlParser.AVAILABILITY)
                    pass
                elif token in [816]:
                    self.state = 12954
                    self.match(PlSqlParser.LOAD)
                    self.state = 12955
                    self.match(PlSqlParser.PERFORMANCE)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 12958
                self.match(PlSqlParser.RENAME)
                self.state = 12959
                self.match(PlSqlParser.FILE)
                self.state = 12960
                self.filename()
                self.state = 12965
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12961
                    self.match(PlSqlParser.COMMA)
                    self.state = 12962
                    self.filename()
                    self.state = 12967
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 12968
                self.match(PlSqlParser.TO)
                self.state = 12969
                self.filename()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 12971
                self.match(PlSqlParser.CLEAR)
                self.state = 12973
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2082:
                    self.state = 12972
                    self.match(PlSqlParser.UNARCHIVED)


                self.state = 12975
                self.match(PlSqlParser.LOGFILE)
                self.state = 12976
                self.logfile_descriptor()
                self.state = 12981
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 12977
                    self.match(PlSqlParser.COMMA)
                    self.state = 12978
                    self.logfile_descriptor()
                    self.state = 12983
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 12986
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2106:
                    self.state = 12984
                    self.match(PlSqlParser.UNRECOVERABLE)
                    self.state = 12985
                    self.match(PlSqlParser.DATAFILE)


                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 12988
                self.add_logfile_clauses()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 12989
                self.drop_logfile_clauses()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 12990
                self.switch_logfile_clause()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 12991
                self.supplemental_db_logging()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_logfile_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def logfile_descriptor(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logfile_descriptorContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logfile_descriptorContext,i)


        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def INSTANCE(self):
            return self.getToken(PlSqlParser.INSTANCE, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def THREAD(self):
            return self.getToken(PlSqlParser.THREAD, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def group_redo_logfile(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Group_redo_logfileContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Group_redo_logfileContext,i)


        def REUSE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REUSE)
            else:
                return self.getToken(PlSqlParser.REUSE, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_logfile_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_logfile_clauses" ):
                listener.enterAdd_logfile_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_logfile_clauses" ):
                listener.exitAdd_logfile_clauses(self)




    def add_logfile_clauses(self):

        localctx = PlSqlParser.Add_logfile_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1370, self.RULE_add_logfile_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 12994
            self.match(PlSqlParser.ADD)
            self.state = 12996
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1651:
                self.state = 12995
                self.match(PlSqlParser.STANDBY)


            self.state = 12998
            self.match(PlSqlParser.LOGFILE)
            self.state = 13034
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [609, 716, 2014, 2343, 2347]:
                self.state = 13003
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [716]:
                    self.state = 12999
                    self.match(PlSqlParser.INSTANCE)
                    self.state = 13000
                    self.match(PlSqlParser.CHAR_STRING)
                    pass
                elif token in [2014]:
                    self.state = 13001
                    self.match(PlSqlParser.THREAD)
                    self.state = 13002
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                elif token in [609, 2343, 2347]:
                    pass
                else:
                    pass
                self.state = 13006 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 13005
                    self.group_redo_logfile()
                    self.state = 13008 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==609 or _la==2343 or _la==2347):
                        break

                pass
            elif token in [882]:
                self.state = 13010
                self.match(PlSqlParser.MEMBER)
                self.state = 13011
                self.filename()
                self.state = 13013
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 13012
                    self.match(PlSqlParser.REUSE)


                self.state = 13022
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13015
                    self.match(PlSqlParser.COMMA)
                    self.state = 13016
                    self.filename()
                    self.state = 13018
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1509:
                        self.state = 13017
                        self.match(PlSqlParser.REUSE)


                    self.state = 13024
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 13025
                self.match(PlSqlParser.TO)
                self.state = 13026
                self.logfile_descriptor()
                self.state = 13031
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13027
                    self.match(PlSqlParser.COMMA)
                    self.state = 13028
                    self.logfile_descriptor()
                    self.state = 13033
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Group_redo_logfileContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def redo_log_file_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Redo_log_file_specContext,0)


        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_group_redo_logfile

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGroup_redo_logfile" ):
                listener.enterGroup_redo_logfile(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGroup_redo_logfile" ):
                listener.exitGroup_redo_logfile(self)




    def group_redo_logfile(self):

        localctx = PlSqlParser.Group_redo_logfileContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1372, self.RULE_group_redo_logfile)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13038
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==609:
                self.state = 13036
                self.match(PlSqlParser.GROUP)
                self.state = 13037
                self.match(PlSqlParser.UNSIGNED_INTEGER)


            self.state = 13040
            self.redo_log_file_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_logfile_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def logfile_descriptor(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logfile_descriptorContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logfile_descriptorContext,i)


        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_logfile_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_logfile_clauses" ):
                listener.enterDrop_logfile_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_logfile_clauses" ):
                listener.exitDrop_logfile_clauses(self)




    def drop_logfile_clauses(self):

        localctx = PlSqlParser.Drop_logfile_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1374, self.RULE_drop_logfile_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13042
            self.match(PlSqlParser.DROP)
            self.state = 13044
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1651:
                self.state = 13043
                self.match(PlSqlParser.STANDBY)


            self.state = 13046
            self.match(PlSqlParser.LOGFILE)
            self.state = 13064
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [609, 2343, 2347]:
                self.state = 13047
                self.logfile_descriptor()
                self.state = 13052
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13048
                    self.match(PlSqlParser.COMMA)
                    self.state = 13049
                    self.logfile_descriptor()
                    self.state = 13054
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [882]:
                self.state = 13055
                self.match(PlSqlParser.MEMBER)
                self.state = 13056
                self.filename()
                self.state = 13061
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13057
                    self.match(PlSqlParser.COMMA)
                    self.state = 13058
                    self.filename()
                    self.state = 13063
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Switch_logfile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SWITCH(self):
            return self.getToken(PlSqlParser.SWITCH, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def LOGFILES(self):
            return self.getToken(PlSqlParser.LOGFILES, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def BLOCKSIZE(self):
            return self.getToken(PlSqlParser.BLOCKSIZE, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_switch_logfile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSwitch_logfile_clause" ):
                listener.enterSwitch_logfile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSwitch_logfile_clause" ):
                listener.exitSwitch_logfile_clause(self)




    def switch_logfile_clause(self):

        localctx = PlSqlParser.Switch_logfile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1376, self.RULE_switch_logfile_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13066
            self.match(PlSqlParser.SWITCH)
            self.state = 13067
            self.match(PlSqlParser.ALL)
            self.state = 13068
            self.match(PlSqlParser.LOGFILES)
            self.state = 13069
            self.match(PlSqlParser.TO)
            self.state = 13070
            self.match(PlSqlParser.BLOCKSIZE)
            self.state = 13071
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Supplemental_db_loggingContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_or_drop(self):
            return self.getTypedRuleContext(PlSqlParser.Add_or_dropContext,0)


        def SUPPLEMENTAL(self):
            return self.getToken(PlSqlParser.SUPPLEMENTAL, 0)

        def LOG(self):
            return self.getToken(PlSqlParser.LOG, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def supplemental_id_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_id_key_clauseContext,0)


        def supplemental_plsql_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_plsql_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_supplemental_db_logging

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSupplemental_db_logging" ):
                listener.enterSupplemental_db_logging(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSupplemental_db_logging" ):
                listener.exitSupplemental_db_logging(self)




    def supplemental_db_logging(self):

        localctx = PlSqlParser.Supplemental_db_loggingContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1378, self.RULE_supplemental_db_logging)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13073
            self.add_or_drop()
            self.state = 13074
            self.match(PlSqlParser.SUPPLEMENTAL)
            self.state = 13075
            self.match(PlSqlParser.LOG)
            self.state = 13079
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1685,self._ctx)
            if la_ == 1:
                self.state = 13076
                self.match(PlSqlParser.DATA)
                pass

            elif la_ == 2:
                self.state = 13077
                self.supplemental_id_key_clause()
                pass

            elif la_ == 3:
                self.state = 13078
                self.supplemental_plsql_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_or_dropContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_or_drop

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_or_drop" ):
                listener.enterAdd_or_drop(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_or_drop" ):
                listener.exitAdd_or_drop(self)




    def add_or_drop(self):

        localctx = PlSqlParser.Add_or_dropContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1380, self.RULE_add_or_drop)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13081
            _la = self._input.LA(1)
            if not(_la==21 or _la==438):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Supplemental_plsql_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def PROCEDURAL(self):
            return self.getToken(PlSqlParser.PROCEDURAL, 0)

        def REPLICATION(self):
            return self.getToken(PlSqlParser.REPLICATION, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_supplemental_plsql_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSupplemental_plsql_clause" ):
                listener.enterSupplemental_plsql_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSupplemental_plsql_clause" ):
                listener.exitSupplemental_plsql_clause(self)




    def supplemental_plsql_clause(self):

        localctx = PlSqlParser.Supplemental_plsql_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1382, self.RULE_supplemental_plsql_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13083
            self.match(PlSqlParser.DATA)
            self.state = 13084
            self.match(PlSqlParser.FOR)
            self.state = 13085
            self.match(PlSqlParser.PROCEDURAL)
            self.state = 13086
            self.match(PlSqlParser.REPLICATION)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logfile_descriptorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def filename(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.FilenameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.FilenameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_logfile_descriptor

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogfile_descriptor" ):
                listener.enterLogfile_descriptor(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogfile_descriptor" ):
                listener.exitLogfile_descriptor(self)




    def logfile_descriptor(self):

        localctx = PlSqlParser.Logfile_descriptorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1384, self.RULE_logfile_descriptor)
        self._la = 0 # Token type
        try:
            self.state = 13102
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [609]:
                self.enterOuterAlt(localctx, 1)
                self.state = 13088
                self.match(PlSqlParser.GROUP)
                self.state = 13089
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 13090
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 13091
                self.filename()
                self.state = 13096
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13092
                    self.match(PlSqlParser.COMMA)
                    self.state = 13093
                    self.filename()
                    self.state = 13098
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 13099
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2343]:
                self.enterOuterAlt(localctx, 3)
                self.state = 13101
                self.filename()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Controlfile_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def CONTROLFILE(self):
            return self.getToken(PlSqlParser.CONTROLFILE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def PHYSICAL(self):
            return self.getToken(PlSqlParser.PHYSICAL, 0)

        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def trace_file_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Trace_file_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_controlfile_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterControlfile_clauses" ):
                listener.enterControlfile_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitControlfile_clauses" ):
                listener.exitControlfile_clauses(self)




    def controlfile_clauses(self):

        localctx = PlSqlParser.Controlfile_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1386, self.RULE_controlfile_clauses)
        self._la = 0 # Token type
        try:
            self.state = 13125
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [305]:
                self.enterOuterAlt(localctx, 1)
                self.state = 13104
                self.match(PlSqlParser.CREATE)
                self.state = 13106
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==833 or _la==1319:
                    self.state = 13105
                    _la = self._input.LA(1)
                    if not(_la==833 or _la==1319):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 13108
                self.match(PlSqlParser.STANDBY)
                self.state = 13109
                self.match(PlSqlParser.CONTROLFILE)
                self.state = 13110
                self.match(PlSqlParser.AS)
                self.state = 13111
                self.filename()
                self.state = 13113
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 13112
                    self.match(PlSqlParser.REUSE)


                pass
            elif token in [100]:
                self.enterOuterAlt(localctx, 2)
                self.state = 13115
                self.match(PlSqlParser.BACKUP)
                self.state = 13116
                self.match(PlSqlParser.CONTROLFILE)
                self.state = 13117
                self.match(PlSqlParser.TO)
                self.state = 13123
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 13118
                    self.filename()
                    self.state = 13120
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1509:
                        self.state = 13119
                        self.match(PlSqlParser.REUSE)


                    pass
                elif token in [2054]:
                    self.state = 13122
                    self.trace_file_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Trace_file_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRACE(self):
            return self.getToken(PlSqlParser.TRACE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def RESETLOGS(self):
            return self.getToken(PlSqlParser.RESETLOGS, 0)

        def NORESETLOGS(self):
            return self.getToken(PlSqlParser.NORESETLOGS, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_trace_file_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrace_file_clause" ):
                listener.enterTrace_file_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrace_file_clause" ):
                listener.exitTrace_file_clause(self)




    def trace_file_clause(self):

        localctx = PlSqlParser.Trace_file_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1388, self.RULE_trace_file_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13127
            self.match(PlSqlParser.TRACE)
            self.state = 13133
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 13128
                self.match(PlSqlParser.AS)
                self.state = 13129
                self.filename()
                self.state = 13131
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1509:
                    self.state = 13130
                    self.match(PlSqlParser.REUSE)




            self.state = 13136
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1110 or _la==1487:
                self.state = 13135
                _la = self._input.LA(1)
                if not(_la==1110 or _la==1487):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Standby_database_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def activate_standby_db_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Activate_standby_db_clauseContext,0)


        def maximize_standby_db_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Maximize_standby_db_clauseContext,0)


        def register_logfile_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Register_logfile_clauseContext,0)


        def commit_switchover_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Commit_switchover_clauseContext,0)


        def start_standby_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Start_standby_clauseContext,0)


        def stop_standby_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Stop_standby_clauseContext,0)


        def convert_database_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Convert_database_clauseContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_standby_database_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStandby_database_clauses" ):
                listener.enterStandby_database_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStandby_database_clauses" ):
                listener.exitStandby_database_clauses(self)




    def standby_database_clauses(self):

        localctx = PlSqlParser.Standby_database_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1390, self.RULE_standby_database_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13145
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [13]:
                self.state = 13138
                self.activate_standby_db_clause()
                pass
            elif token in [1590]:
                self.state = 13139
                self.maximize_standby_db_clause()
                pass
            elif token in [1460]:
                self.state = 13140
                self.register_logfile_clause()
                pass
            elif token in [231, 1367]:
                self.state = 13141
                self.commit_switchover_clause()
                pass
            elif token in [1654]:
                self.state = 13142
                self.start_standby_clause()
                pass
            elif token in [1, 1677]:
                self.state = 13143
                self.stop_standby_clause()
                pass
            elif token in [285]:
                self.state = 13144
                self.convert_database_clause()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 13148
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 13147
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Activate_standby_db_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACTIVATE(self):
            return self.getToken(PlSqlParser.ACTIVATE, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def FINISH(self):
            return self.getToken(PlSqlParser.FINISH, 0)

        def APPLY(self):
            return self.getToken(PlSqlParser.APPLY, 0)

        def PHYSICAL(self):
            return self.getToken(PlSqlParser.PHYSICAL, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_activate_standby_db_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterActivate_standby_db_clause" ):
                listener.enterActivate_standby_db_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitActivate_standby_db_clause" ):
                listener.exitActivate_standby_db_clause(self)




    def activate_standby_db_clause(self):

        localctx = PlSqlParser.Activate_standby_db_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1392, self.RULE_activate_standby_db_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13150
            self.match(PlSqlParser.ACTIVATE)
            self.state = 13152
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==833 or _la==1319:
                self.state = 13151
                _la = self._input.LA(1)
                if not(_la==833 or _la==1319):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 13154
            self.match(PlSqlParser.STANDBY)
            self.state = 13155
            self.match(PlSqlParser.DATABASE)
            self.state = 13158
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==558:
                self.state = 13156
                self.match(PlSqlParser.FINISH)
                self.state = 13157
                self.match(PlSqlParser.APPLY)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Maximize_standby_db_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def MAXIMIZE(self):
            return self.getToken(PlSqlParser.MAXIMIZE, 0)

        def PROTECTION(self):
            return self.getToken(PlSqlParser.PROTECTION, 0)

        def AVAILABILITY(self):
            return self.getToken(PlSqlParser.AVAILABILITY, 0)

        def PERFORMANCE(self):
            return self.getToken(PlSqlParser.PERFORMANCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_maximize_standby_db_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMaximize_standby_db_clause" ):
                listener.enterMaximize_standby_db_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMaximize_standby_db_clause" ):
                listener.exitMaximize_standby_db_clause(self)




    def maximize_standby_db_clause(self):

        localctx = PlSqlParser.Maximize_standby_db_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1394, self.RULE_maximize_standby_db_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13160
            self.match(PlSqlParser.SET)
            self.state = 13161
            self.match(PlSqlParser.STANDBY)
            self.state = 13162
            self.match(PlSqlParser.DATABASE)
            self.state = 13163
            self.match(PlSqlParser.TO)
            self.state = 13164
            self.match(PlSqlParser.MAXIMIZE)
            self.state = 13165
            _la = self._input.LA(1)
            if not(_la==96 or _la==1312 or _la==1394):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Register_logfile_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REGISTER(self):
            return self.getToken(PlSqlParser.REGISTER, 0)

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def PHYSICAL(self):
            return self.getToken(PlSqlParser.PHYSICAL, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_register_logfile_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRegister_logfile_clause" ):
                listener.enterRegister_logfile_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRegister_logfile_clause" ):
                listener.exitRegister_logfile_clause(self)




    def register_logfile_clause(self):

        localctx = PlSqlParser.Register_logfile_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1396, self.RULE_register_logfile_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13167
            self.match(PlSqlParser.REGISTER)
            self.state = 13170
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1237:
                self.state = 13168
                self.match(PlSqlParser.OR)
                self.state = 13169
                self.match(PlSqlParser.REPLACE)


            self.state = 13172
            _la = self._input.LA(1)
            if not(_la==833 or _la==1319):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 13173
            self.match(PlSqlParser.LOGFILE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Commit_switchover_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TO)
            else:
                return self.getToken(PlSqlParser.TO, i)

        def SWITCHOVER(self):
            return self.getToken(PlSqlParser.SWITCHOVER, 0)

        def PREPARE(self):
            return self.getToken(PlSqlParser.PREPARE, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def CANCEL(self):
            return self.getToken(PlSqlParser.CANCEL, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def SHUTDOWN(self):
            return self.getToken(PlSqlParser.SHUTDOWN, 0)

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def NOWAIT(self):
            return self.getToken(PlSqlParser.NOWAIT, 0)

        def PHYSICAL(self):
            return self.getToken(PlSqlParser.PHYSICAL, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_commit_switchover_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCommit_switchover_clause" ):
                listener.enterCommit_switchover_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCommit_switchover_clause" ):
                listener.exitCommit_switchover_clause(self)




    def commit_switchover_clause(self):

        localctx = PlSqlParser.Commit_switchover_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1398, self.RULE_commit_switchover_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13175
            _la = self._input.LA(1)
            if not(_la==231 or _la==1367):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 13176
            self.match(PlSqlParser.TO)
            self.state = 13177
            self.match(PlSqlParser.SWITCHOVER)
            self.state = 13206
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [833, 2052]:
                self.state = 13203
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2052]:
                    self.state = 13178
                    self.match(PlSqlParser.TO)
                    self.state = 13199
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1706,self._ctx)
                    if la_ == 1:
                        self.state = 13187
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1703,self._ctx)
                        if la_ == 1:
                            self.state = 13180
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==833 or _la==1319:
                                self.state = 13179
                                _la = self._input.LA(1)
                                if not(_la==833 or _la==1319):
                                    self._errHandler.recoverInline(self)
                                else:
                                    self._errHandler.reportMatch(self)
                                    self.consume()


                            self.state = 13182
                            self.match(PlSqlParser.PRIMARY)
                            pass

                        elif la_ == 2:
                            self.state = 13184
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==1319:
                                self.state = 13183
                                self.match(PlSqlParser.PHYSICAL)


                            self.state = 13186
                            self.match(PlSqlParser.STANDBY)
                            pass


                        self.state = 13195
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==1586 or _la==2210 or _la==2212:
                            self.state = 13190
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==2210 or _la==2212:
                                self.state = 13189
                                _la = self._input.LA(1)
                                if not(_la==2210 or _la==2212):
                                    self._errHandler.recoverInline(self)
                                else:
                                    self._errHandler.reportMatch(self)
                                    self.consume()


                            self.state = 13192
                            self.match(PlSqlParser.SESSION)
                            self.state = 13193
                            self.match(PlSqlParser.SHUTDOWN)
                            self.state = 13194
                            _la = self._input.LA(1)
                            if not(_la==1153 or _la==2197):
                                self._errHandler.recoverInline(self)
                            else:
                                self._errHandler.reportMatch(self)
                                self.consume()


                        pass

                    elif la_ == 2:
                        self.state = 13197
                        self.match(PlSqlParser.LOGICAL)
                        self.state = 13198
                        self.match(PlSqlParser.STANDBY)
                        pass


                    pass
                elif token in [833]:
                    self.state = 13201
                    self.match(PlSqlParser.LOGICAL)
                    self.state = 13202
                    self.match(PlSqlParser.STANDBY)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [166]:
                self.state = 13205
                self.match(PlSqlParser.CANCEL)
                pass
            elif token in [-1, 1085, 1261, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Start_standby_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.scn_value = None # Token

        def START(self):
            return self.getToken(PlSqlParser.START, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def APPLY(self):
            return self.getToken(PlSqlParser.APPLY, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def NODELAY(self):
            return self.getToken(PlSqlParser.NODELAY, 0)

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def INITIAL(self):
            return self.getToken(PlSqlParser.INITIAL, 0)

        def SKIP_(self):
            return self.getToken(PlSqlParser.SKIP_, 0)

        def FAILED(self):
            return self.getToken(PlSqlParser.FAILED, 0)

        def TRANSACTION(self):
            return self.getToken(PlSqlParser.TRANSACTION, 0)

        def FINISH(self):
            return self.getToken(PlSqlParser.FINISH, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_start_standby_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStart_standby_clause" ):
                listener.enterStart_standby_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStart_standby_clause" ):
                listener.exitStart_standby_clause(self)




    def start_standby_clause(self):

        localctx = PlSqlParser.Start_standby_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1400, self.RULE_start_standby_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13208
            self.match(PlSqlParser.START)
            self.state = 13209
            self.match(PlSqlParser.LOGICAL)
            self.state = 13210
            self.match(PlSqlParser.STANDBY)
            self.state = 13211
            self.match(PlSqlParser.APPLY)
            self.state = 13213
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==656:
                self.state = 13212
                self.match(PlSqlParser.IMMEDIATE)


            self.state = 13216
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1030:
                self.state = 13215
                self.match(PlSqlParser.NODELAY)


            self.state = 13229
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [967]:
                self.state = 13218
                self.match(PlSqlParser.NEW)
                self.state = 13219
                self.match(PlSqlParser.PRIMARY)
                self.state = 13220
                self.regular_id()
                pass
            elif token in [698]:
                self.state = 13221
                self.match(PlSqlParser.INITIAL)
                self.state = 13223
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2341:
                    self.state = 13222
                    localctx.scn_value = self.match(PlSqlParser.UNSIGNED_INTEGER)


                pass
            elif token in [1619]:
                self.state = 13225
                self.match(PlSqlParser.SKIP_)
                self.state = 13226
                self.match(PlSqlParser.FAILED)
                self.state = 13227
                self.match(PlSqlParser.TRANSACTION)
                pass
            elif token in [558]:
                self.state = 13228
                self.match(PlSqlParser.FINISH)
                pass
            elif token in [-1, 1085, 1261, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Stop_standby_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def APPLY(self):
            return self.getToken(PlSqlParser.APPLY, 0)

        def STOP(self):
            return self.getToken(PlSqlParser.STOP, 0)

        def ABORT(self):
            return self.getToken(PlSqlParser.ABORT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_stop_standby_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStop_standby_clause" ):
                listener.enterStop_standby_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStop_standby_clause" ):
                listener.exitStop_standby_clause(self)




    def stop_standby_clause(self):

        localctx = PlSqlParser.Stop_standby_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1402, self.RULE_stop_standby_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13231
            _la = self._input.LA(1)
            if not(_la==1 or _la==1677):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 13232
            self.match(PlSqlParser.LOGICAL)
            self.state = 13233
            self.match(PlSqlParser.STANDBY)
            self.state = 13234
            self.match(PlSqlParser.APPLY)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Convert_database_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONVERT(self):
            return self.getToken(PlSqlParser.CONVERT, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def PHYSICAL(self):
            return self.getToken(PlSqlParser.PHYSICAL, 0)

        def SNAPSHOT(self):
            return self.getToken(PlSqlParser.SNAPSHOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_convert_database_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConvert_database_clause" ):
                listener.enterConvert_database_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConvert_database_clause" ):
                listener.exitConvert_database_clause(self)




    def convert_database_clause(self):

        localctx = PlSqlParser.Convert_database_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1404, self.RULE_convert_database_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13236
            self.match(PlSqlParser.CONVERT)
            self.state = 13237
            self.match(PlSqlParser.TO)
            self.state = 13238
            _la = self._input.LA(1)
            if not(_la==1319 or _la==1624):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 13239
            self.match(PlSqlParser.STANDBY)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_settings_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def edition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Edition_nameContext,0)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def BIGFILE(self):
            return self.getToken(PlSqlParser.BIGFILE, 0)

        def SMALLFILE(self):
            return self.getToken(PlSqlParser.SMALLFILE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def tablespace_group_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_group_nameContext,0)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def GLOBAL_NAME(self):
            return self.getToken(PlSqlParser.GLOBAL_NAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def database(self):
            return self.getTypedRuleContext(PlSqlParser.DatabaseContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def domain(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.DomainContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.DomainContext,i)


        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def BLOCK(self):
            return self.getToken(PlSqlParser.BLOCK, 0)

        def CHANGE(self):
            return self.getToken(PlSqlParser.CHANGE, 0)

        def TRACKING(self):
            return self.getToken(PlSqlParser.TRACKING, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def filename(self):
            return self.getTypedRuleContext(PlSqlParser.FilenameContext,0)


        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def flashback_mode_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_mode_clauseContext,0)


        def set_time_zone_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Set_time_zone_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_default_settings_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_settings_clause" ):
                listener.enterDefault_settings_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_settings_clause" ):
                listener.exitDefault_settings_clause(self)




    def default_settings_clause(self):

        localctx = PlSqlParser.Default_settings_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1406, self.RULE_default_settings_clause)
        self._la = 0 # Token type
        try:
            self.state = 13287
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1717,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 13241
                self.match(PlSqlParser.DEFAULT)
                self.state = 13242
                self.match(PlSqlParser.EDITION)
                self.state = 13243
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 13244
                self.edition_name()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 13245
                self.match(PlSqlParser.SET)
                self.state = 13246
                self.match(PlSqlParser.DEFAULT)
                self.state = 13247
                _la = self._input.LA(1)
                if not(_la==118 or _la==1622):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13248
                self.match(PlSqlParser.TABLESPACE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 13249
                self.match(PlSqlParser.DEFAULT)
                self.state = 13250
                self.match(PlSqlParser.TABLESPACE)
                self.state = 13251
                self.tablespace()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 13252
                self.match(PlSqlParser.DEFAULT)
                self.state = 13253
                self.match(PlSqlParser.TEMPORARY)
                self.state = 13254
                self.match(PlSqlParser.TABLESPACE)
                self.state = 13257
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1713,self._ctx)
                if la_ == 1:
                    self.state = 13255
                    self.tablespace()
                    pass

                elif la_ == 2:
                    self.state = 13256
                    self.tablespace_group_name()
                    pass


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 13259
                self.match(PlSqlParser.RENAME)
                self.state = 13260
                self.match(PlSqlParser.GLOBAL_NAME)
                self.state = 13261
                self.match(PlSqlParser.TO)
                self.state = 13262
                self.database()
                self.state = 13265 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 13263
                    self.match(PlSqlParser.PERIOD)
                    self.state = 13264
                    self.domain()
                    self.state = 13267 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==2340):
                        break

                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 13269
                self.match(PlSqlParser.ENABLE)
                self.state = 13270
                self.match(PlSqlParser.BLOCK)
                self.state = 13271
                self.match(PlSqlParser.CHANGE)
                self.state = 13272
                self.match(PlSqlParser.TRACKING)
                self.state = 13279
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 13273
                    self.match(PlSqlParser.USING)
                    self.state = 13274
                    self.match(PlSqlParser.FILE)
                    self.state = 13275
                    self.filename()
                    self.state = 13277
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1509:
                        self.state = 13276
                        self.match(PlSqlParser.REUSE)




                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 13281
                self.match(PlSqlParser.DISABLE)
                self.state = 13282
                self.match(PlSqlParser.BLOCK)
                self.state = 13283
                self.match(PlSqlParser.CHANGE)
                self.state = 13284
                self.match(PlSqlParser.TRACKING)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 13285
                self.flashback_mode_clause()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 13286
                self.set_time_zone_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_time_zone_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def TIMEZONE(self):
            return self.getToken(PlSqlParser.TIMEZONE, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_set_time_zone_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_time_zone_clause" ):
                listener.enterSet_time_zone_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_time_zone_clause" ):
                listener.exitSet_time_zone_clause(self)




    def set_time_zone_clause(self):

        localctx = PlSqlParser.Set_time_zone_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1408, self.RULE_set_time_zone_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13289
            self.match(PlSqlParser.SET)
            self.state = 13290
            self.match(PlSqlParser.TIMEZONE)
            self.state = 13291
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 13292
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Instance_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def enable_or_disable(self):
            return self.getTypedRuleContext(PlSqlParser.Enable_or_disableContext,0)


        def INSTANCE(self):
            return self.getToken(PlSqlParser.INSTANCE, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_instance_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInstance_clauses" ):
                listener.enterInstance_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInstance_clauses" ):
                listener.exitInstance_clauses(self)




    def instance_clauses(self):

        localctx = PlSqlParser.Instance_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1410, self.RULE_instance_clauses)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13294
            self.enable_or_disable()
            self.state = 13295
            self.match(PlSqlParser.INSTANCE)
            self.state = 13296
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Security_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GUARD(self):
            return self.getToken(PlSqlParser.GUARD, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_security_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSecurity_clause" ):
                listener.enterSecurity_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSecurity_clause" ):
                listener.exitSecurity_clause(self)




    def security_clause(self):

        localctx = PlSqlParser.Security_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1412, self.RULE_security_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13298
            self.match(PlSqlParser.GUARD)
            self.state = 13299
            _la = self._input.LA(1)
            if not(_la==38 or _la==1071 or _la==1651):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DomainContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_domain

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDomain" ):
                listener.enterDomain(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDomain" ):
                listener.exitDomain(self)




    def domain(self):

        localctx = PlSqlParser.DomainContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1414, self.RULE_domain)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13301
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DatabaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_database

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatabase" ):
                listener.enterDatabase(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatabase" ):
                listener.exitDatabase(self)




    def database(self):

        localctx = PlSqlParser.DatabaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1416, self.RULE_database)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13303
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Edition_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_edition_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEdition_name" ):
                listener.enterEdition_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEdition_name" ):
                listener.exitEdition_name(self)




    def edition_name(self):

        localctx = PlSqlParser.Edition_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1418, self.RULE_edition_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13305
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FilenumberContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_filenumber

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFilenumber" ):
                listener.enterFilenumber(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFilenumber" ):
                listener.exitFilenumber(self)




    def filenumber(self):

        localctx = PlSqlParser.FilenumberContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1420, self.RULE_filenumber)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13307
            self.match(PlSqlParser.UNSIGNED_INTEGER)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class FilenameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_filename

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFilename" ):
                listener.enterFilename(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFilename" ):
                listener.exitFilename(self)




    def filename(self):

        localctx = PlSqlParser.FilenameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1422, self.RULE_filename)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13309
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Prepare_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.c = None # Id_expressionContext

        def PREPARE(self):
            return self.getToken(PlSqlParser.PREPARE, 0)

        def MIRROR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MIRROR)
            else:
                return self.getToken(PlSqlParser.MIRROR, i)

        def COPY(self):
            return self.getToken(PlSqlParser.COPY, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def REDUNDANCY(self):
            return self.getToken(PlSqlParser.REDUNDANCY, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def UNPROTECTED(self):
            return self.getToken(PlSqlParser.UNPROTECTED, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_prepare_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrepare_clause" ):
                listener.enterPrepare_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrepare_clause" ):
                listener.exitPrepare_clause(self)




    def prepare_clause(self):

        localctx = PlSqlParser.Prepare_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1424, self.RULE_prepare_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13311
            self.match(PlSqlParser.PREPARE)
            self.state = 13312
            self.match(PlSqlParser.MIRROR)
            self.state = 13313
            self.match(PlSqlParser.COPY)
            self.state = 13314
            localctx.c = self.id_expression()
            self.state = 13318
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 13315
                self.match(PlSqlParser.WITH)
                self.state = 13316
                _la = self._input.LA(1)
                if not(_la==634 or _la==909 or _la==2104):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13317
                self.match(PlSqlParser.REDUNDANCY)


            self.state = 13323
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 13320
                self.match(PlSqlParser.FOR)
                self.state = 13321
                self.match(PlSqlParser.DATABASE)
                self.state = 13322
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_mirror_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.mn = None # Id_expressionContext

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def MIRROR(self):
            return self.getToken(PlSqlParser.MIRROR, 0)

        def COPY(self):
            return self.getToken(PlSqlParser.COPY, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_mirror_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_mirror_clause" ):
                listener.enterDrop_mirror_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_mirror_clause" ):
                listener.exitDrop_mirror_clause(self)




    def drop_mirror_clause(self):

        localctx = PlSqlParser.Drop_mirror_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1426, self.RULE_drop_mirror_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13325
            self.match(PlSqlParser.DROP)
            self.state = 13326
            self.match(PlSqlParser.MIRROR)
            self.state = 13327
            self.match(PlSqlParser.COPY)
            self.state = 13328
            localctx.mn = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lost_write_protectionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOST(self):
            return self.getToken(PlSqlParser.LOST, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def PROTECTION(self):
            return self.getToken(PlSqlParser.PROTECTION, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def SUSPEND(self):
            return self.getToken(PlSqlParser.SUSPEND, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lost_write_protection

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLost_write_protection" ):
                listener.enterLost_write_protection(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLost_write_protection" ):
                listener.exitLost_write_protection(self)




    def lost_write_protection(self):

        localctx = PlSqlParser.Lost_write_protectionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1428, self.RULE_lost_write_protection)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13330
            _la = self._input.LA(1)
            if not(_la==404 or _la==467 or _la==1480 or _la==1706):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 13331
            self.match(PlSqlParser.LOST)
            self.state = 13332
            self.match(PlSqlParser.WRITE)
            self.state = 13333
            self.match(PlSqlParser.PROTECTION)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cdb_fleet_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def lead_cdb_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Lead_cdb_clauseContext,0)


        def lead_cdb_uri_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Lead_cdb_uri_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cdb_fleet_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCdb_fleet_clauses" ):
                listener.enterCdb_fleet_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCdb_fleet_clauses" ):
                listener.exitCdb_fleet_clauses(self)




    def cdb_fleet_clauses(self):

        localctx = PlSqlParser.Cdb_fleet_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1430, self.RULE_cdb_fleet_clauses)
        try:
            self.state = 13337
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1720,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 13335
                self.lead_cdb_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 13336
                self.lead_cdb_uri_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lead_cdb_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def LEAD_CDB(self):
            return self.getToken(PlSqlParser.LEAD_CDB, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def TRUE(self):
            return self.getToken(PlSqlParser.TRUE, 0)

        def FALSE(self):
            return self.getToken(PlSqlParser.FALSE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lead_cdb_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLead_cdb_clause" ):
                listener.enterLead_cdb_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLead_cdb_clause" ):
                listener.exitLead_cdb_clause(self)




    def lead_cdb_clause(self):

        localctx = PlSqlParser.Lead_cdb_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1432, self.RULE_lead_cdb_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13339
            self.match(PlSqlParser.SET)
            self.state = 13340
            self.match(PlSqlParser.LEAD_CDB)
            self.state = 13341
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 13342
            _la = self._input.LA(1)
            if not(_la==538 or _la==2068):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lead_cdb_uri_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def LEAD_CDB_URI(self):
            return self.getToken(PlSqlParser.LEAD_CDB_URI, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lead_cdb_uri_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLead_cdb_uri_clause" ):
                listener.enterLead_cdb_uri_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLead_cdb_uri_clause" ):
                listener.exitLead_cdb_uri_clause(self)




    def lead_cdb_uri_clause(self):

        localctx = PlSqlParser.Lead_cdb_uri_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1434, self.RULE_lead_cdb_uri_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13344
            self.match(PlSqlParser.SET)
            self.state = 13345
            self.match(PlSqlParser.LEAD_CDB_URI)
            self.state = 13346
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 13347
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Property_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.qcn = None # Id_expressionContext

        def PROPERTY(self):
            return self.getToken(PlSqlParser.PROPERTY, 0)

        def DEFAULT_CREDENTIAL(self):
            return self.getToken(PlSqlParser.DEFAULT_CREDENTIAL, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_property_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProperty_clauses" ):
                listener.enterProperty_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProperty_clauses" ):
                listener.exitProperty_clauses(self)




    def property_clauses(self):

        localctx = PlSqlParser.Property_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1436, self.RULE_property_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13349
            self.match(PlSqlParser.PROPERTY)
            self.state = 13350
            _la = self._input.LA(1)
            if not(_la==1480 or _la==1590):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 13351
            self.match(PlSqlParser.DEFAULT_CREDENTIAL)
            self.state = 13352
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 13353
            localctx.qcn = self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Replay_upgrade_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UPGRADE(self):
            return self.getToken(PlSqlParser.UPGRADE, 0)

        def SYNC(self):
            return self.getToken(PlSqlParser.SYNC, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_replay_upgrade_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReplay_upgrade_clauses" ):
                listener.enterReplay_upgrade_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReplay_upgrade_clauses" ):
                listener.exitReplay_upgrade_clauses(self)




    def replay_upgrade_clauses(self):

        localctx = PlSqlParser.Replay_upgrade_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1438, self.RULE_replay_upgrade_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13355
            self.match(PlSqlParser.UPGRADE)
            self.state = 13356
            self.match(PlSqlParser.SYNC)
            self.state = 13357
            _la = self._input.LA(1)
            if not(_la==1178 or _la==1193):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_database_linkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def local_link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Local_link_nameContext,0)


        def CONNECT(self):
            return self.getToken(PlSqlParser.CONNECT, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def user_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,0)


        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def password_value(self):
            return self.getTypedRuleContext(PlSqlParser.Password_valueContext,0)


        def link_authentication(self):
            return self.getTypedRuleContext(PlSqlParser.Link_authenticationContext,0)


        def SHARED(self):
            return self.getToken(PlSqlParser.SHARED, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_database_link

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_database_link" ):
                listener.enterAlter_database_link(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_database_link" ):
                listener.exitAlter_database_link(self)




    def alter_database_link(self):

        localctx = PlSqlParser.Alter_database_linkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1440, self.RULE_alter_database_link)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13359
            self.match(PlSqlParser.ALTER)
            self.state = 13361
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1597:
                self.state = 13360
                self.match(PlSqlParser.SHARED)


            self.state = 13364
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1398:
                self.state = 13363
                self.match(PlSqlParser.PUBLIC)


            self.state = 13366
            self.match(PlSqlParser.DATABASE)
            self.state = 13367
            self.match(PlSqlParser.LINK)
            self.state = 13368
            self.local_link_name()
            self.state = 13379
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [265]:
                self.state = 13369
                self.match(PlSqlParser.CONNECT)
                self.state = 13370
                self.match(PlSqlParser.TO)
                self.state = 13371
                self.user_object_name()
                self.state = 13372
                self.match(PlSqlParser.IDENTIFIED)
                self.state = 13373
                self.match(PlSqlParser.BY)
                self.state = 13374
                self.password_value()
                self.state = 13376
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==84:
                    self.state = 13375
                    self.link_authentication()


                pass
            elif token in [84]:
                self.state = 13378
                self.link_authentication()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Password_valueContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_password_value

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPassword_value" ):
                listener.enterPassword_value(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPassword_value" ):
                listener.exitPassword_value(self)




    def password_value(self):

        localctx = PlSqlParser.Password_valueContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1442, self.RULE_password_value)
        try:
            self.state = 13385
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 13381
                self.id_expression()
                pass
            elif token in [2341, 2342]:
                self.enterOuterAlt(localctx, 2)
                self.state = 13382
                self.numeric()
                pass
            elif token in [2164]:
                self.enterOuterAlt(localctx, 3)
                self.state = 13383
                self.match(PlSqlParser.VALUES)
                self.state = 13384
                self.match(PlSqlParser.CHAR_STRING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Link_authenticationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AUTHENTICATED(self):
            return self.getToken(PlSqlParser.AUTHENTICATED, 0)

        def BY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BY)
            else:
                return self.getToken(PlSqlParser.BY, i)

        def user_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,0)


        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def password_value(self):
            return self.getTypedRuleContext(PlSqlParser.Password_valueContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_link_authentication

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLink_authentication" ):
                listener.enterLink_authentication(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLink_authentication" ):
                listener.exitLink_authentication(self)




    def link_authentication(self):

        localctx = PlSqlParser.Link_authenticationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1444, self.RULE_link_authentication)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13387
            self.match(PlSqlParser.AUTHENTICATED)
            self.state = 13388
            self.match(PlSqlParser.BY)
            self.state = 13389
            self.user_object_name()
            self.state = 13390
            self.match(PlSqlParser.IDENTIFIED)
            self.state = 13391
            self.match(PlSqlParser.BY)
            self.state = 13392
            self.password_value()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_databaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def database_name(self):
            return self.getTypedRuleContext(PlSqlParser.Database_nameContext,0)


        def USER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USER)
            else:
                return self.getToken(PlSqlParser.USER, i)

        def IDENTIFIED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IDENTIFIED)
            else:
                return self.getToken(PlSqlParser.IDENTIFIED, i)

        def BY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BY)
            else:
                return self.getToken(PlSqlParser.BY, i)

        def password_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Password_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Password_valueContext,i)


        def CONTROLFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONTROLFILE)
            else:
                return self.getToken(PlSqlParser.CONTROLFILE, i)

        def REUSE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REUSE)
            else:
                return self.getToken(PlSqlParser.REUSE, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def CHARACTER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHARACTER)
            else:
                return self.getToken(PlSqlParser.CHARACTER, i)

        def SET(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SET)
            else:
                return self.getToken(PlSqlParser.SET, i)

        def char_set_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Char_set_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Char_set_nameContext,i)


        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def database_logging_clauses(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Database_logging_clausesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Database_logging_clausesContext,i)


        def tablespace_clauses(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tablespace_clausesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tablespace_clausesContext,i)


        def set_time_zone_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Set_time_zone_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Set_time_zone_clauseContext,i)


        def USER_DATA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.USER_DATA)
            else:
                return self.getToken(PlSqlParser.USER_DATA, i)

        def tablespace_group_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tablespace_group_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tablespace_group_nameContext,i)


        def DATAFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DATAFILE)
            else:
                return self.getToken(PlSqlParser.DATAFILE, i)

        def datafile_tempfile_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Datafile_tempfile_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_specContext,i)


        def enable_pluggable_database(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Enable_pluggable_databaseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Enable_pluggable_databaseContext,i)


        def SYS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SYS)
            else:
                return self.getToken(PlSqlParser.SYS, i)

        def SYSTEM(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SYSTEM)
            else:
                return self.getToken(PlSqlParser.SYSTEM, i)

        def MAXDATAFILES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MAXDATAFILES)
            else:
                return self.getToken(PlSqlParser.MAXDATAFILES, i)

        def MAXINSTANCES(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MAXINSTANCES)
            else:
                return self.getToken(PlSqlParser.MAXINSTANCES, i)

        def BIGFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BIGFILE)
            else:
                return self.getToken(PlSqlParser.BIGFILE, i)

        def SMALLFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SMALLFILE)
            else:
                return self.getToken(PlSqlParser.SMALLFILE, i)

        def NATIONAL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NATIONAL)
            else:
                return self.getToken(PlSqlParser.NATIONAL, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_create_database

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_database" ):
                listener.enterCreate_database(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_database" ):
                listener.exitCreate_database(self)




    def create_database(self):

        localctx = PlSqlParser.Create_databaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1446, self.RULE_create_database)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13394
            self.match(PlSqlParser.CREATE)
            self.state = 13395
            self.match(PlSqlParser.DATABASE)
            self.state = 13396
            self.database_name()
            self.state = 13435 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 13435
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1729,self._ctx)
                if la_ == 1:
                    self.state = 13397
                    self.match(PlSqlParser.USER)
                    self.state = 13398
                    _la = self._input.LA(1)
                    if not(_la==1713 or _la==1865):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 13399
                    self.match(PlSqlParser.IDENTIFIED)
                    self.state = 13400
                    self.match(PlSqlParser.BY)
                    self.state = 13401
                    self.password_value()
                    pass

                elif la_ == 2:
                    self.state = 13402
                    self.match(PlSqlParser.CONTROLFILE)
                    self.state = 13403
                    self.match(PlSqlParser.REUSE)
                    pass

                elif la_ == 3:
                    self.state = 13404
                    _la = self._input.LA(1)
                    if not(_la==868 or _la==871):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 13405
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass

                elif la_ == 4:
                    self.state = 13407
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==947:
                        self.state = 13406
                        self.match(PlSqlParser.NATIONAL)


                    self.state = 13409
                    self.match(PlSqlParser.CHARACTER)
                    self.state = 13410
                    self.match(PlSqlParser.SET)
                    self.state = 13411
                    self.char_set_name()
                    pass

                elif la_ == 5:
                    self.state = 13412
                    self.match(PlSqlParser.SET)
                    self.state = 13413
                    self.match(PlSqlParser.DEFAULT)
                    self.state = 13414
                    _la = self._input.LA(1)
                    if not(_la==118 or _la==1622):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 13415
                    self.match(PlSqlParser.TABLESPACE)
                    pass

                elif la_ == 6:
                    self.state = 13416
                    self.database_logging_clauses()
                    pass

                elif la_ == 7:
                    self.state = 13417
                    self.tablespace_clauses()
                    pass

                elif la_ == 8:
                    self.state = 13418
                    self.set_time_zone_clause()
                    pass

                elif la_ == 9:
                    self.state = 13420
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==118 or _la==1622:
                        self.state = 13419
                        _la = self._input.LA(1)
                        if not(_la==118 or _la==1622):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 13422
                    self.match(PlSqlParser.USER_DATA)
                    self.state = 13423
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 13424
                    self.tablespace_group_name()
                    self.state = 13425
                    self.match(PlSqlParser.DATAFILE)
                    self.state = 13426
                    self.datafile_tempfile_spec()
                    self.state = 13431
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 13427
                        self.match(PlSqlParser.COMMA)
                        self.state = 13428
                        self.datafile_tempfile_spec()
                        self.state = 13433
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass

                elif la_ == 10:
                    self.state = 13434
                    self.enable_pluggable_database()
                    pass


                self.state = 13437 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==65 or _la==118 or _la==185 or _la==283 or _la==335 or _la==368 or _la==467 or _la==521 or _la==576 or ((((_la - 830)) & ~0x3f) == 0 and ((1 << (_la - 830)) & 33260226740225) != 0) or _la==947 or _la==1003 or _la==1590 or _la==1622 or _la==1716 or ((((_la - 2087)) & ~0x3f) == 0 and ((1 << (_la - 2087)) & 145241087982698497) != 0)):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Database_logging_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def database_logging_sub_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Database_logging_sub_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Database_logging_sub_clauseContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def MAXLOGFILES(self):
            return self.getToken(PlSqlParser.MAXLOGFILES, 0)

        def MAXLOGMEMBERS(self):
            return self.getToken(PlSqlParser.MAXLOGMEMBERS, 0)

        def MAXLOGHISTORY(self):
            return self.getToken(PlSqlParser.MAXLOGHISTORY, 0)

        def ARCHIVELOG(self):
            return self.getToken(PlSqlParser.ARCHIVELOG, 0)

        def NOARCHIVELOG(self):
            return self.getToken(PlSqlParser.NOARCHIVELOG, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_database_logging_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatabase_logging_clauses" ):
                listener.enterDatabase_logging_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatabase_logging_clauses" ):
                listener.exitDatabase_logging_clauses(self)




    def database_logging_clauses(self):

        localctx = PlSqlParser.Database_logging_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1448, self.RULE_database_logging_clauses)
        self._la = 0 # Token type
        try:
            self.state = 13454
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [830]:
                self.enterOuterAlt(localctx, 1)
                self.state = 13439
                self.match(PlSqlParser.LOGFILE)
                self.state = 13440
                self.database_logging_sub_clause()
                self.state = 13445
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13441
                    self.match(PlSqlParser.COMMA)
                    self.state = 13442
                    self.database_logging_sub_clause()
                    self.state = 13447
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [872, 873, 874]:
                self.enterOuterAlt(localctx, 2)
                self.state = 13448
                _la = self._input.LA(1)
                if not(((((_la - 872)) & ~0x3f) == 0 and ((1 << (_la - 872)) & 7) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13449
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [65]:
                self.enterOuterAlt(localctx, 3)
                self.state = 13450
                self.match(PlSqlParser.ARCHIVELOG)
                pass
            elif token in [1003]:
                self.enterOuterAlt(localctx, 4)
                self.state = 13451
                self.match(PlSqlParser.NOARCHIVELOG)
                pass
            elif token in [576]:
                self.enterOuterAlt(localctx, 5)
                self.state = 13452
                self.match(PlSqlParser.FORCE)
                self.state = 13453
                self.match(PlSqlParser.LOGGING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Database_logging_sub_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def file_specification(self):
            return self.getTypedRuleContext(PlSqlParser.File_specificationContext,0)


        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_database_logging_sub_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatabase_logging_sub_clause" ):
                listener.enterDatabase_logging_sub_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatabase_logging_sub_clause" ):
                listener.exitDatabase_logging_sub_clause(self)




    def database_logging_sub_clause(self):

        localctx = PlSqlParser.Database_logging_sub_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1450, self.RULE_database_logging_sub_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13458
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==609:
                self.state = 13456
                self.match(PlSqlParser.GROUP)
                self.state = 13457
                self.match(PlSqlParser.UNSIGNED_INTEGER)


            self.state = 13460
            self.file_specification()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def MANAGEMENT(self):
            return self.getToken(PlSqlParser.MANAGEMENT, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def file_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.File_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.File_specificationContext,i)


        def SYSAUX(self):
            return self.getToken(PlSqlParser.SYSAUX, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def default_tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.Default_tablespaceContext,0)


        def default_temp_tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.Default_temp_tablespaceContext,0)


        def undo_tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.Undo_tablespaceContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_clauses" ):
                listener.enterTablespace_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_clauses" ):
                listener.exitTablespace_clauses(self)




    def tablespace_clauses(self):

        localctx = PlSqlParser.Tablespace_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1452, self.RULE_tablespace_clauses)
        self._la = 0 # Token type
        try:
            self.state = 13480
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1736,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 13462
                self.match(PlSqlParser.EXTENT)
                self.state = 13463
                self.match(PlSqlParser.MANAGEMENT)
                self.state = 13464
                self.match(PlSqlParser.LOCAL)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 13466
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1716:
                    self.state = 13465
                    self.match(PlSqlParser.SYSAUX)


                self.state = 13468
                self.match(PlSqlParser.DATAFILE)
                self.state = 13469
                self.file_specification()
                self.state = 13474
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13470
                    self.match(PlSqlParser.COMMA)
                    self.state = 13471
                    self.file_specification()
                    self.state = 13476
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 13477
                self.default_tablespace()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 13478
                self.default_temp_tablespace()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 13479
                self.undo_tablespace()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Enable_pluggable_databaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def SEED(self):
            return self.getToken(PlSqlParser.SEED, 0)

        def undo_mode_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Undo_mode_clauseContext,0)


        def file_name_convert(self):
            return self.getTypedRuleContext(PlSqlParser.File_name_convertContext,0)


        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def tablespace_datafile_clauses(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Tablespace_datafile_clausesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Tablespace_datafile_clausesContext,i)


        def SYSAUX(self):
            return self.getToken(PlSqlParser.SYSAUX, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_enable_pluggable_database

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnable_pluggable_database" ):
                listener.enterEnable_pluggable_database(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnable_pluggable_database" ):
                listener.exitEnable_pluggable_database(self)




    def enable_pluggable_database(self):

        localctx = PlSqlParser.Enable_pluggable_databaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1454, self.RULE_enable_pluggable_database)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13482
            self.match(PlSqlParser.ENABLE)
            self.state = 13483
            self.match(PlSqlParser.PLUGGABLE)
            self.state = 13484
            self.match(PlSqlParser.DATABASE)
            self.state = 13497
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1564:
                self.state = 13485
                self.match(PlSqlParser.SEED)
                self.state = 13487
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==551:
                    self.state = 13486
                    self.file_name_convert()


                self.state = 13491
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1865:
                    self.state = 13489
                    self.match(PlSqlParser.SYSTEM)
                    self.state = 13490
                    self.tablespace_datafile_clauses()


                self.state = 13495
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1739,self._ctx)
                if la_ == 1:
                    self.state = 13493
                    self.match(PlSqlParser.SYSAUX)
                    self.state = 13494
                    self.tablespace_datafile_clauses()




            self.state = 13500
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==821:
                self.state = 13499
                self.undo_mode_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class File_name_convertContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FILE_NAME_CONVERT(self):
            return self.getToken(PlSqlParser.FILE_NAME_CONVERT, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def filename_convert_sub_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Filename_convert_sub_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Filename_convert_sub_clauseContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_file_name_convert

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFile_name_convert" ):
                listener.enterFile_name_convert(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFile_name_convert" ):
                listener.exitFile_name_convert(self)




    def file_name_convert(self):

        localctx = PlSqlParser.File_name_convertContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1456, self.RULE_file_name_convert)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13502
            self.match(PlSqlParser.FILE_NAME_CONVERT)
            self.state = 13503
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 13516
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 13504
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 13505
                self.filename_convert_sub_clause()
                self.state = 13510
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13506
                    self.match(PlSqlParser.COMMA)
                    self.state = 13507
                    self.filename_convert_sub_clause()
                    self.state = 13512
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 13513
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1071]:
                self.state = 13515
                self.match(PlSqlParser.NONE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Filename_convert_sub_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_filename_convert_sub_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFilename_convert_sub_clause" ):
                listener.enterFilename_convert_sub_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFilename_convert_sub_clause" ):
                listener.exitFilename_convert_sub_clause(self)




    def filename_convert_sub_clause(self):

        localctx = PlSqlParser.Filename_convert_sub_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1458, self.RULE_filename_convert_sub_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13518
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 13521
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1744,self._ctx)
            if la_ == 1:
                self.state = 13519
                self.match(PlSqlParser.COMMA)
                self.state = 13520
                self.match(PlSqlParser.CHAR_STRING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tablespace_datafile_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DATAFILES(self):
            return self.getToken(PlSqlParser.DATAFILES, 0)

        def SIZE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SIZE)
            else:
                return self.getToken(PlSqlParser.SIZE, i)

        def size_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Size_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,i)


        def autoextend_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Autoextend_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace_datafile_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace_datafile_clauses" ):
                listener.enterTablespace_datafile_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace_datafile_clauses" ):
                listener.exitTablespace_datafile_clauses(self)




    def tablespace_datafile_clauses(self):

        localctx = PlSqlParser.Tablespace_datafile_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1460, self.RULE_tablespace_datafile_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13523
            self.match(PlSqlParser.DATAFILES)
            self.state = 13527 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 13527
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1617]:
                    self.state = 13524
                    self.match(PlSqlParser.SIZE)
                    self.state = 13525
                    self.size_clause()
                    pass
                elif token in [91]:
                    self.state = 13526
                    self.autoextend_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 13529 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==91 or _la==1617):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Undo_mode_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def UNDO(self):
            return self.getToken(PlSqlParser.UNDO, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_undo_mode_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUndo_mode_clause" ):
                listener.enterUndo_mode_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUndo_mode_clause" ):
                listener.exitUndo_mode_clause(self)




    def undo_mode_clause(self):

        localctx = PlSqlParser.Undo_mode_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1462, self.RULE_undo_mode_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13531
            self.match(PlSqlParser.LOCAL)
            self.state = 13532
            self.match(PlSqlParser.UNDO)
            self.state = 13533
            _la = self._input.LA(1)
            if not(_la==1178 or _la==1193):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_tablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def datafile_tempfile_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_specContext,0)


        def extent_management_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Extent_management_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_default_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_tablespace" ):
                listener.enterDefault_tablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_tablespace" ):
                listener.exitDefault_tablespace(self)




    def default_tablespace(self):

        localctx = PlSqlParser.Default_tablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1464, self.RULE_default_tablespace)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13535
            self.match(PlSqlParser.DEFAULT)
            self.state = 13536
            self.match(PlSqlParser.TABLESPACE)
            self.state = 13537
            self.tablespace()
            self.state = 13540
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1747,self._ctx)
            if la_ == 1:
                self.state = 13538
                self.match(PlSqlParser.DATAFILE)
                self.state = 13539
                self.datafile_tempfile_spec()


            self.state = 13543
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1748,self._ctx)
            if la_ == 1:
                self.state = 13542
                self.extent_management_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_temp_tablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def LEAF(self):
            return self.getToken(PlSqlParser.LEAF, 0)

        def TEMPFILE(self):
            return self.getToken(PlSqlParser.TEMPFILE, 0)

        def file_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.File_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.File_specificationContext,i)


        def extent_management_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Extent_management_clauseContext,0)


        def BIGFILE(self):
            return self.getToken(PlSqlParser.BIGFILE, 0)

        def SMALLFILE(self):
            return self.getToken(PlSqlParser.SMALLFILE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_temp_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_temp_tablespace" ):
                listener.enterDefault_temp_tablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_temp_tablespace" ):
                listener.exitDefault_temp_tablespace(self)




    def default_temp_tablespace(self):

        localctx = PlSqlParser.Default_temp_tablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1466, self.RULE_default_temp_tablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13546
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==118 or _la==1622:
                self.state = 13545
                _la = self._input.LA(1)
                if not(_la==118 or _la==1622):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 13548
            self.match(PlSqlParser.DEFAULT)
            self.state = 13556
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2007]:
                self.state = 13549
                self.match(PlSqlParser.TEMPORARY)
                self.state = 13550
                self.match(PlSqlParser.TABLESPACE)
                pass
            elif token in [821]:
                self.state = 13551
                self.match(PlSqlParser.LOCAL)
                self.state = 13552
                self.match(PlSqlParser.TEMPORARY)
                self.state = 13553
                self.match(PlSqlParser.TABLESPACE)
                self.state = 13554
                self.match(PlSqlParser.FOR)
                self.state = 13555
                _la = self._input.LA(1)
                if not(_la==38 or _la==787):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 13558
            self.tablespace()
            self.state = 13568
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2005:
                self.state = 13559
                self.match(PlSqlParser.TEMPFILE)
                self.state = 13560
                self.file_specification()
                self.state = 13565
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13561
                    self.match(PlSqlParser.COMMA)
                    self.state = 13562
                    self.file_specification()
                    self.state = 13567
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 13571
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1753,self._ctx)
            if la_ == 1:
                self.state = 13570
                self.extent_management_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Undo_tablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNDO(self):
            return self.getToken(PlSqlParser.UNDO, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def file_specification(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.File_specificationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.File_specificationContext,i)


        def BIGFILE(self):
            return self.getToken(PlSqlParser.BIGFILE, 0)

        def SMALLFILE(self):
            return self.getToken(PlSqlParser.SMALLFILE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_undo_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUndo_tablespace" ):
                listener.enterUndo_tablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUndo_tablespace" ):
                listener.exitUndo_tablespace(self)




    def undo_tablespace(self):

        localctx = PlSqlParser.Undo_tablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1468, self.RULE_undo_tablespace)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13574
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==118 or _la==1622:
                self.state = 13573
                _la = self._input.LA(1)
                if not(_la==118 or _la==1622):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 13576
            self.match(PlSqlParser.UNDO)
            self.state = 13577
            self.match(PlSqlParser.TABLESPACE)
            self.state = 13578
            self.tablespace()
            self.state = 13588
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1756,self._ctx)
            if la_ == 1:
                self.state = 13579
                self.match(PlSqlParser.DATAFILE)
                self.state = 13580
                self.file_specification()
                self.state = 13585
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13581
                    self.match(PlSqlParser.COMMA)
                    self.state = 13582
                    self.file_specification()
                    self.state = 13587
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_databaseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def BACKUPS(self):
            return self.getToken(PlSqlParser.BACKUPS, 0)

        def NOPROMPT(self):
            return self.getToken(PlSqlParser.NOPROMPT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_database

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_database" ):
                listener.enterDrop_database(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_database" ):
                listener.exitDrop_database(self)




    def drop_database(self):

        localctx = PlSqlParser.Drop_databaseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1470, self.RULE_drop_database)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13590
            self.match(PlSqlParser.DROP)
            self.state = 13591
            self.match(PlSqlParser.DATABASE)
            self.state = 13594
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==663:
                self.state = 13592
                self.match(PlSqlParser.INCLUDING)
                self.state = 13593
                self.match(PlSqlParser.BACKUPS)


            self.state = 13597
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1094:
                self.state = 13596
                self.match(PlSqlParser.NOPROMPT)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Create_database_linkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def SHARED(self):
            return self.getToken(PlSqlParser.SHARED, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def CONNECT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONNECT)
            else:
                return self.getToken(PlSqlParser.CONNECT, i)

        def TO(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TO)
            else:
                return self.getToken(PlSqlParser.TO, i)

        def link_authentication(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Link_authenticationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Link_authenticationContext,i)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def CURRENT_USER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CURRENT_USER)
            else:
                return self.getToken(PlSqlParser.CURRENT_USER, i)

        def user_object_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_object_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,i)


        def IDENTIFIED(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IDENTIFIED)
            else:
                return self.getToken(PlSqlParser.IDENTIFIED, i)

        def BY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BY)
            else:
                return self.getToken(PlSqlParser.BY, i)

        def password_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Password_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Password_valueContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_create_database_link

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCreate_database_link" ):
                listener.enterCreate_database_link(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCreate_database_link" ):
                listener.exitCreate_database_link(self)




    def create_database_link(self):

        localctx = PlSqlParser.Create_database_linkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1472, self.RULE_create_database_link)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13599
            self.match(PlSqlParser.CREATE)
            self.state = 13601
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1597:
                self.state = 13600
                self.match(PlSqlParser.SHARED)


            self.state = 13604
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1398:
                self.state = 13603
                self.match(PlSqlParser.PUBLIC)


            self.state = 13606
            self.match(PlSqlParser.DATABASE)
            self.state = 13607
            self.match(PlSqlParser.LINK)
            self.state = 13608
            self.link_name()
            self.state = 13624
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==84 or _la==265:
                self.state = 13622
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [265]:
                    self.state = 13609
                    self.match(PlSqlParser.CONNECT)
                    self.state = 13610
                    self.match(PlSqlParser.TO)
                    self.state = 13619
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1762,self._ctx)
                    if la_ == 1:
                        self.state = 13611
                        self.match(PlSqlParser.CURRENT_USER)
                        pass

                    elif la_ == 2:
                        self.state = 13612
                        self.user_object_name()
                        self.state = 13613
                        self.match(PlSqlParser.IDENTIFIED)
                        self.state = 13614
                        self.match(PlSqlParser.BY)
                        self.state = 13615
                        self.password_value()
                        self.state = 13617
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1761,self._ctx)
                        if la_ == 1:
                            self.state = 13616
                            self.link_authentication()


                        pass


                    pass
                elif token in [84]:
                    self.state = 13621
                    self.link_authentication()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 13626
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 13629
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 13627
                self.match(PlSqlParser.USING)
                self.state = 13628
                self.match(PlSqlParser.CHAR_STRING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_database_linkContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_database_link

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_database_link" ):
                listener.enterDrop_database_link(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_database_link" ):
                listener.exitDrop_database_link(self)




    def drop_database_link(self):

        localctx = PlSqlParser.Drop_database_linkContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1474, self.RULE_drop_database_link)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13631
            self.match(PlSqlParser.DROP)
            self.state = 13633
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1398:
                self.state = 13632
                self.match(PlSqlParser.PUBLIC)


            self.state = 13635
            self.match(PlSqlParser.DATABASE)
            self.state = 13636
            self.match(PlSqlParser.LINK)
            self.state = 13637
            self.link_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_tablespace_setContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tss = None # Id_expressionContext

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def alter_tablespace_attrs(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_tablespace_attrsContext,0)


        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_tablespace_set

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_tablespace_set" ):
                listener.enterAlter_tablespace_set(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_tablespace_set" ):
                listener.exitAlter_tablespace_set(self)




    def alter_tablespace_set(self):

        localctx = PlSqlParser.Alter_tablespace_setContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1476, self.RULE_alter_tablespace_set)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13639
            self.match(PlSqlParser.ALTER)
            self.state = 13640
            self.match(PlSqlParser.TABLESPACE)
            self.state = 13641
            self.match(PlSqlParser.SET)
            self.state = 13642
            localctx.tss = self.id_expression()
            self.state = 13643
            self.alter_tablespace_attrs()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_tablespace_attrsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.nts = None # Id_expressionContext

        def default_tablespace_params(self):
            return self.getTypedRuleContext(PlSqlParser.Default_tablespace_paramsContext,0)


        def MINIMUM(self):
            return self.getToken(PlSqlParser.MINIMUM, 0)

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def size_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Size_clauseContext,0)


        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def SHRINK(self):
            return self.getToken(PlSqlParser.SHRINK, 0)

        def SPACE_KEYWORD(self):
            return self.getToken(PlSqlParser.SPACE_KEYWORD, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def datafile_tempfile_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Datafile_tempfile_clausesContext,0)


        def tablespace_logging_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_logging_clausesContext,0)


        def tablespace_group_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_group_clauseContext,0)


        def tablespace_state_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_state_clausesContext,0)


        def autoextend_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Autoextend_clauseContext,0)


        def flashback_mode_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Flashback_mode_clauseContext,0)


        def tablespace_retention_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_retention_clauseContext,0)


        def alter_tablespace_encryption(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_tablespace_encryptionContext,0)


        def lost_write_protection(self):
            return self.getTypedRuleContext(PlSqlParser.Lost_write_protectionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_tablespace_attrs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_tablespace_attrs" ):
                listener.enterAlter_tablespace_attrs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_tablespace_attrs" ):
                listener.exitAlter_tablespace_attrs(self)




    def alter_tablespace_attrs(self):

        localctx = PlSqlParser.Alter_tablespace_attrsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1478, self.RULE_alter_tablespace_attrs)
        self._la = 0 # Token type
        try:
            self.state = 13672
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1768,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 13645
                self.default_tablespace_params()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 13646
                self.match(PlSqlParser.MINIMUM)
                self.state = 13647
                self.match(PlSqlParser.EXTENT)
                self.state = 13648
                self.size_clause()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 13649
                self.match(PlSqlParser.RESIZE)
                self.state = 13650
                self.size_clause()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 13651
                self.match(PlSqlParser.COALESCE)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 13652
                self.match(PlSqlParser.SHRINK)
                self.state = 13653
                self.match(PlSqlParser.SPACE_KEYWORD)
                self.state = 13656
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==768:
                    self.state = 13654
                    self.match(PlSqlParser.KEEP)
                    self.state = 13655
                    self.size_clause()


                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 13658
                self.match(PlSqlParser.RENAME)
                self.state = 13659
                self.match(PlSqlParser.TO)
                self.state = 13660
                localctx.nts = self.id_expression()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 13661
                _la = self._input.LA(1)
                if not(_la==110 or _la==473):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13662
                self.match(PlSqlParser.BACKUP)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 13663
                self.datafile_tempfile_clauses()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 13664
                self.tablespace_logging_clauses()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 13665
                self.tablespace_group_clause()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 13666
                self.tablespace_state_clauses()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 13667
                self.autoextend_clause()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 13668
                self.flashback_mode_clause()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 13669
                self.tablespace_retention_clause()
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 13670
                self.alter_tablespace_encryption()
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 13671
                self.lost_write_protection()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_tablespace_encryptionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def FINISH(self):
            return self.getToken(PlSqlParser.FINISH, 0)

        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def REKEY(self):
            return self.getToken(PlSqlParser.REKEY, 0)

        def DECRYPT(self):
            return self.getToken(PlSqlParser.DECRYPT, 0)

        def ts_file_name_convert(self):
            return self.getTypedRuleContext(PlSqlParser.Ts_file_name_convertContext,0)


        def tablespace_encryption_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Tablespace_encryption_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_tablespace_encryption

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_tablespace_encryption" ):
                listener.enterAlter_tablespace_encryption(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_tablespace_encryption" ):
                listener.exitAlter_tablespace_encryption(self)




    def alter_tablespace_encryption(self):

        localctx = PlSqlParser.Alter_tablespace_encryptionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1480, self.RULE_alter_tablespace_encryption)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13674
            self.match(PlSqlParser.ENCRYPTION)
            self.state = 13699
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1177]:
                self.state = 13675
                self.match(PlSqlParser.OFFLINE)
                self.state = 13681
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [471, 2153]:
                    self.state = 13677
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2153:
                        self.state = 13676
                        self.tablespace_encryption_spec()


                    self.state = 13679
                    self.match(PlSqlParser.ENCRYPT)
                    pass
                elif token in [366]:
                    self.state = 13680
                    self.match(PlSqlParser.DECRYPT)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [1190]:
                self.state = 13683
                self.match(PlSqlParser.ONLINE)
                self.state = 13689
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [471, 1472, 2153]:
                    self.state = 13685
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2153:
                        self.state = 13684
                        self.tablespace_encryption_spec()


                    self.state = 13687
                    _la = self._input.LA(1)
                    if not(_la==471 or _la==1472):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                elif token in [366]:
                    self.state = 13688
                    self.match(PlSqlParser.DECRYPT)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 13692
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==551:
                    self.state = 13691
                    self.ts_file_name_convert()


                pass
            elif token in [558]:
                self.state = 13694
                self.match(PlSqlParser.FINISH)
                self.state = 13695
                _la = self._input.LA(1)
                if not(_la==366 or _la==471 or _la==1472):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13697
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==551:
                    self.state = 13696
                    self.ts_file_name_convert()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ts_file_name_convertContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FILE_NAME_CONVERT(self):
            return self.getToken(PlSqlParser.FILE_NAME_CONVERT, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_ts_file_name_convert

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTs_file_name_convert" ):
                listener.enterTs_file_name_convert(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTs_file_name_convert" ):
                listener.exitTs_file_name_convert(self)




    def ts_file_name_convert(self):

        localctx = PlSqlParser.Ts_file_name_convertContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1482, self.RULE_ts_file_name_convert)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13701
            self.match(PlSqlParser.FILE_NAME_CONVERT)
            self.state = 13702
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 13703
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 13704
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 13705
            self.match(PlSqlParser.COMMA)
            self.state = 13706
            self.match(PlSqlParser.CHAR_STRING)
            self.state = 13713
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 13707
                self.match(PlSqlParser.COMMA)
                self.state = 13708
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 13709
                self.match(PlSqlParser.COMMA)
                self.state = 13710
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 13715
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 13716
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 13718
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==768:
                self.state = 13717
                self.match(PlSqlParser.KEEP)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_roleContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def role_name(self):
            return self.getTypedRuleContext(PlSqlParser.Role_nameContext,0)


        def role_identified_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Role_identified_clauseContext,0)


        def container_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Container_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_role

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_role" ):
                listener.enterAlter_role(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_role" ):
                listener.exitAlter_role(self)




    def alter_role(self):

        localctx = PlSqlParser.Alter_roleContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1484, self.RULE_alter_role)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13720
            self.match(PlSqlParser.ALTER)
            self.state = 13721
            self.match(PlSqlParser.ROLE)
            self.state = 13722
            self.role_name()
            self.state = 13723
            self.role_identified_clause()
            self.state = 13725
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==274:
                self.state = 13724
                self.container_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Role_identified_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def EXTERNALLY(self):
            return self.getToken(PlSqlParser.EXTERNALLY, 0)

        def GLOBALLY(self):
            return self.getToken(PlSqlParser.GLOBALLY, 0)

        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_role_identified_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRole_identified_clause" ):
                listener.enterRole_identified_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRole_identified_clause" ):
                listener.exitRole_identified_clause(self)




    def role_identified_clause(self):

        localctx = PlSqlParser.Role_identified_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1486, self.RULE_role_identified_clause)
        self._la = 0 # Token type
        try:
            self.state = 13746
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1138]:
                self.enterOuterAlt(localctx, 1)
                self.state = 13727
                self.match(PlSqlParser.NOT)
                self.state = 13728
                self.match(PlSqlParser.IDENTIFIED)
                pass
            elif token in [644]:
                self.enterOuterAlt(localctx, 2)
                self.state = 13729
                self.match(PlSqlParser.IDENTIFIED)
                self.state = 13744
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [154]:
                    self.state = 13730
                    self.match(PlSqlParser.BY)
                    self.state = 13731
                    self.identifier()
                    pass
                elif token in [2153]:
                    self.state = 13732
                    self.match(PlSqlParser.USING)
                    self.state = 13733
                    self.identifier()
                    self.state = 13736
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2340:
                        self.state = 13734
                        self.match(PlSqlParser.PERIOD)
                        self.state = 13735
                        self.id_expression()


                    pass
                elif token in [524]:
                    self.state = 13738
                    self.match(PlSqlParser.EXTERNALLY)
                    pass
                elif token in [603]:
                    self.state = 13739
                    self.match(PlSqlParser.GLOBALLY)
                    self.state = 13742
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==67:
                        self.state = 13740
                        self.match(PlSqlParser.AS)
                        self.state = 13741
                        self.match(PlSqlParser.CHAR_STRING)


                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_tableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def TABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLE)
            else:
                return self.getToken(PlSqlParser.TABLE, i)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def alter_table_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_table_propertiesContext,0)


        def constraint_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_clausesContext,0)


        def column_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Column_clausesContext,0)


        def alter_table_partitioning(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_table_partitioningContext,0)


        def move_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Move_table_clauseContext,0)


        def memoptimize_read_write_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Memoptimize_read_write_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Memoptimize_read_write_clauseContext,i)


        def enable_disable_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Enable_disable_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Enable_disable_clauseContext,i)


        def enable_or_disable(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Enable_or_disableContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Enable_or_disableContext,i)


        def LOCK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOCK)
            else:
                return self.getToken(PlSqlParser.LOCK, i)

        def ALL(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ALL)
            else:
                return self.getToken(PlSqlParser.ALL, i)

        def TRIGGERS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TRIGGERS)
            else:
                return self.getToken(PlSqlParser.TRIGGERS, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_table

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_table" ):
                listener.enterAlter_table(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_table" ):
                listener.exitAlter_table(self)




    def alter_table(self):

        localctx = PlSqlParser.Alter_tableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1488, self.RULE_alter_table)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13748
            self.match(PlSqlParser.ALTER)
            self.state = 13749
            self.match(PlSqlParser.TABLE)
            self.state = 13750
            self.tableview_name()
            self.state = 13754
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1783,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 13751
                    self.memoptimize_read_write_clause() 
                self.state = 13756
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1783,self._ctx)

            self.state = 13763
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1784,self._ctx)
            if la_ == 1:
                pass

            elif la_ == 2:
                self.state = 13758
                self.alter_table_properties()
                pass

            elif la_ == 3:
                self.state = 13759
                self.constraint_clauses()
                pass

            elif la_ == 4:
                self.state = 13760
                self.column_clauses()
                pass

            elif la_ == 5:
                self.state = 13761
                self.alter_table_partitioning()
                pass

            elif la_ == 6:
                self.state = 13762
                self.move_table_clause()
                pass


            self.state = 13777
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==404 or _la==467:
                self.state = 13773 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 13773
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1786,self._ctx)
                    if la_ == 1:
                        self.state = 13765
                        self.enable_disable_clause()
                        pass

                    elif la_ == 2:
                        self.state = 13766
                        self.enable_or_disable()
                        self.state = 13771
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1999]:
                            self.state = 13767
                            self.match(PlSqlParser.TABLE)
                            self.state = 13768
                            self.match(PlSqlParser.LOCK)
                            pass
                        elif token in [38]:
                            self.state = 13769
                            self.match(PlSqlParser.ALL)
                            self.state = 13770
                            self.match(PlSqlParser.TRIGGERS)
                            pass
                        else:
                            raise NoViableAltException(self)

                        pass


                    self.state = 13775 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==404 or _la==467):
                        break



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Memoptimize_read_write_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MEMOPTIMIZE(self):
            return self.getToken(PlSqlParser.MEMOPTIMIZE, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_memoptimize_read_write_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMemoptimize_read_write_clause" ):
                listener.enterMemoptimize_read_write_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMemoptimize_read_write_clause" ):
                listener.exitMemoptimize_read_write_clause(self)




    def memoptimize_read_write_clause(self):

        localctx = PlSqlParser.Memoptimize_read_write_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1490, self.RULE_memoptimize_read_write_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13780
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1074:
                self.state = 13779
                self.match(PlSqlParser.NO)


            self.state = 13782
            self.match(PlSqlParser.MEMOPTIMIZE)
            self.state = 13783
            self.match(PlSqlParser.FOR)
            self.state = 13784
            _la = self._input.LA(1)
            if not(_la==1429 or _la==2216):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_table_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def alter_table_properties_1(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_table_properties_1Context,0)


        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def shrink_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,0)


        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def REKEY(self):
            return self.getToken(PlSqlParser.REKEY, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_table_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_table_properties" ):
                listener.enterAlter_table_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_table_properties" ):
                listener.exitAlter_table_properties(self)




    def alter_table_properties(self):

        localctx = PlSqlParser.Alter_table_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1492, self.RULE_alter_table_properties)
        try:
            self.state = 13797
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1790,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 13786
                self.alter_table_properties_1()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 13787
                self.match(PlSqlParser.RENAME)
                self.state = 13788
                self.match(PlSqlParser.TO)
                self.state = 13789
                self.tableview_name()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 13790
                self.shrink_clause()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 13791
                self.match(PlSqlParser.READ)
                self.state = 13792
                self.match(PlSqlParser.ONLY)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 13793
                self.match(PlSqlParser.READ)
                self.state = 13794
                self.match(PlSqlParser.WRITE)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 13795
                self.match(PlSqlParser.REKEY)
                self.state = 13796
                self.match(PlSqlParser.CHAR_STRING)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_table_partitioningContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Add_table_partitionContext,0)


        def drop_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Drop_table_partitionContext,0)


        def merge_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_table_partitionContext,0)


        def modify_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_table_partitionContext,0)


        def split_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Split_table_partitionContext,0)


        def truncate_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Truncate_table_partitionContext,0)


        def exchange_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Exchange_table_partitionContext,0)


        def coalesce_table_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Coalesce_table_partitionContext,0)


        def alter_interval_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_interval_partitionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_table_partitioning

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_table_partitioning" ):
                listener.enterAlter_table_partitioning(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_table_partitioning" ):
                listener.exitAlter_table_partitioning(self)




    def alter_table_partitioning(self):

        localctx = PlSqlParser.Alter_table_partitioningContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1494, self.RULE_alter_table_partitioning)
        try:
            self.state = 13808
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 13799
                self.add_table_partition()
                pass
            elif token in [438]:
                self.enterOuterAlt(localctx, 2)
                self.state = 13800
                self.drop_table_partition()
                pass
            elif token in [892]:
                self.enterOuterAlt(localctx, 3)
                self.state = 13801
                self.merge_table_partition()
                pass
            elif token in [926]:
                self.enterOuterAlt(localctx, 4)
                self.state = 13802
                self.modify_table_partition()
                pass
            elif token in [1634]:
                self.enterOuterAlt(localctx, 5)
                self.state = 13803
                self.split_table_partition()
                pass
            elif token in [2069]:
                self.enterOuterAlt(localctx, 6)
                self.state = 13804
                self.truncate_table_partition()
                pass
            elif token in [501]:
                self.enterOuterAlt(localctx, 7)
                self.state = 13805
                self.exchange_table_partition()
                pass
            elif token in [218]:
                self.enterOuterAlt(localctx, 8)
                self.state = 13806
                self.coalesce_table_partition()
                pass
            elif token in [1590]:
                self.enterOuterAlt(localctx, 9)
                self.state = 13807
                self.alter_interval_partition()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def range_partition_desc(self):
            return self.getTypedRuleContext(PlSqlParser.Range_partition_descContext,0)


        def list_partition_desc(self):
            return self.getTypedRuleContext(PlSqlParser.List_partition_descContext,0)


        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def key_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,0)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_table_partition" ):
                listener.enterAdd_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_table_partition" ):
                listener.exitAdd_table_partition(self)




    def add_table_partition(self):

        localctx = PlSqlParser.Add_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1496, self.RULE_add_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13810
            self.match(PlSqlParser.ADD)
            self.state = 13827
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1796,self._ctx)
            if la_ == 1:
                self.state = 13811
                self.range_partition_desc()
                pass

            elif la_ == 2:
                self.state = 13812
                self.list_partition_desc()
                pass

            elif la_ == 3:
                self.state = 13813
                self.match(PlSqlParser.PARTITION)
                self.state = 13815
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1792,self._ctx)
                if la_ == 1:
                    self.state = 13814
                    self.partition_name()


                self.state = 13819
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1996:
                    self.state = 13817
                    self.match(PlSqlParser.TABLESPACE)
                    self.state = 13818
                    self.tablespace()


                self.state = 13822
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==246 or _la==1017:
                    self.state = 13821
                    self.key_compression()


                self.state = 13825
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2110:
                    self.state = 13824
                    self.match(PlSqlParser.UNUSABLE)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def partition_extended_names(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_extended_namesContext,0)


        def subpartition_extended_names(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_extended_namesContext,0)


        def update_index_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Update_index_clausesContext,0)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_table_partition" ):
                listener.enterDrop_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_table_partition" ):
                listener.exitDrop_table_partition(self)




    def drop_table_partition(self):

        localctx = PlSqlParser.Drop_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1498, self.RULE_drop_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13829
            self.match(PlSqlParser.DROP)
            self.state = 13832
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275, 1277]:
                self.state = 13830
                self.partition_extended_names()
                pass
            elif token in [1690, 1691]:
                self.state = 13831
                self.subpartition_extended_names()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 13838
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==736 or _la==2114:
                self.state = 13834
                self.update_index_clauses()
                self.state = 13836
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1085 or _la==1261:
                    self.state = 13835
                    self.parallel_clause()




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_table_partition" ):
                listener.enterMerge_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_table_partition" ):
                listener.exitMerge_table_partition(self)




    def merge_table_partition(self):

        localctx = PlSqlParser.Merge_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1500, self.RULE_merge_table_partition)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13840
            self.match(PlSqlParser.MERGE)
            self.state = 13841
            self.match(PlSqlParser.PARTITION)
            self.state = 13842
            self.partition_name()
            self.state = 13843
            self.match(PlSqlParser.AND)
            self.state = 13844
            self.partition_name()
            self.state = 13845
            self.match(PlSqlParser.INTO)
            self.state = 13846
            self.match(PlSqlParser.PARTITION)
            self.state = 13847
            self.partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def range_partitions(self):
            return self.getTypedRuleContext(PlSqlParser.Range_partitionsContext,0)


        def list_values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.List_values_clauseContext,0)


        def ADD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ADD)
            else:
                return self.getToken(PlSqlParser.ADD, i)

        def range_subpartition_desc(self):
            return self.getTypedRuleContext(PlSqlParser.Range_subpartition_descContext,0)


        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def shrink_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def REBUILD(self):
            return self.getToken(PlSqlParser.REBUILD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_table_partition" ):
                listener.enterModify_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_table_partition" ):
                listener.exitModify_table_partition(self)




    def modify_table_partition(self):

        localctx = PlSqlParser.Modify_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1502, self.RULE_modify_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13849
            self.match(PlSqlParser.MODIFY)
            self.state = 13872
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1805,self._ctx)
            if la_ == 1:
                self.state = 13850
                self.match(PlSqlParser.PARTITION)
                self.state = 13851
                self.partition_name()
                self.state = 13854
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1800,self._ctx)
                if la_ == 1:
                    self.state = 13852
                    _la = self._input.LA(1)
                    if not(_la==21 or _la==438):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 13853
                    self.list_values_clause()


                self.state = 13858
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==21:
                    self.state = 13856
                    self.match(PlSqlParser.ADD)
                    self.state = 13857
                    self.range_subpartition_desc()


                self.state = 13866
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1434 or _la==2110:
                    self.state = 13861
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1434:
                        self.state = 13860
                        self.match(PlSqlParser.REBUILD)


                    self.state = 13863
                    self.match(PlSqlParser.UNUSABLE)
                    self.state = 13864
                    self.match(PlSqlParser.LOCAL)
                    self.state = 13865
                    self.match(PlSqlParser.INDEXES)


                self.state = 13869
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1602:
                    self.state = 13868
                    self.shrink_clause()


                pass

            elif la_ == 2:
                self.state = 13871
                self.range_partitions()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Split_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SPLIT(self):
            return self.getToken(PlSqlParser.SPLIT, 0)

        def partition_extended_names(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_extended_namesContext,0)


        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.LiteralContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.LiteralContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def range_partition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Range_partition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Range_partition_descContext,i)


        def update_global_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Update_global_index_clauseContext,0)


        def update_index_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Update_index_clausesContext,0)


        def list_partition_desc(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.List_partition_descContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.List_partition_descContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_split_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSplit_table_partition" ):
                listener.enterSplit_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSplit_table_partition" ):
                listener.exitSplit_table_partition(self)




    def split_table_partition(self):

        localctx = PlSqlParser.Split_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1504, self.RULE_split_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13874
            self.match(PlSqlParser.SPLIT)
            self.state = 13875
            self.partition_extended_names()
            self.state = 13921
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [80]:
                self.state = 13876
                self.match(PlSqlParser.AT)
                self.state = 13877
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 13878
                self.literal()
                self.state = 13883
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13879
                    self.match(PlSqlParser.COMMA)
                    self.state = 13880
                    self.literal()
                    self.state = 13885
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 13886
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 13887
                self.match(PlSqlParser.INTO)
                self.state = 13888
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 13889
                self.range_partition_desc()
                self.state = 13894
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13890
                    self.match(PlSqlParser.COMMA)
                    self.state = 13891
                    self.range_partition_desc()
                    self.state = 13896
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 13897
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [735]:
                self.state = 13899
                self.match(PlSqlParser.INTO)
                self.state = 13900
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 13917
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1810,self._ctx)
                if la_ == 1:
                    self.state = 13901
                    self.range_partition_desc()
                    self.state = 13906
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 13902
                        self.match(PlSqlParser.COMMA)
                        self.state = 13903
                        self.range_partition_desc()
                        self.state = 13908
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass

                elif la_ == 2:
                    self.state = 13909
                    self.list_partition_desc()
                    self.state = 13914
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 13910
                        self.match(PlSqlParser.COMMA)
                        self.state = 13911
                        self.list_partition_desc()
                        self.state = 13916
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass


                self.state = 13919
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 13925
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1812,self._ctx)
            if la_ == 1:
                self.state = 13923
                self.update_global_index_clause()

            elif la_ == 2:
                self.state = 13924
                self.update_index_clauses()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Truncate_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def partition_extended_names(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_extended_namesContext,0)


        def subpartition_extended_names(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_extended_namesContext,0)


        def STORAGE(self):
            return self.getToken(PlSqlParser.STORAGE, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def update_index_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Update_index_clausesContext,0)


        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_truncate_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTruncate_table_partition" ):
                listener.enterTruncate_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTruncate_table_partition" ):
                listener.exitTruncate_table_partition(self)




    def truncate_table_partition(self):

        localctx = PlSqlParser.Truncate_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1506, self.RULE_truncate_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13927
            self.match(PlSqlParser.TRUNCATE)
            self.state = 13930
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275, 1277]:
                self.state = 13928
                self.partition_extended_names()
                pass
            elif token in [1690, 1691]:
                self.state = 13929
                self.subpartition_extended_names()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 13940
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==438 or _la==1509 or _la==1678:
                self.state = 13937
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [438]:
                    self.state = 13932
                    self.match(PlSqlParser.DROP)
                    self.state = 13934
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==38:
                        self.state = 13933
                        self.match(PlSqlParser.ALL)


                    pass
                elif token in [1509]:
                    self.state = 13936
                    self.match(PlSqlParser.REUSE)
                    pass
                elif token in [1678]:
                    pass
                else:
                    pass
                self.state = 13939
                self.match(PlSqlParser.STORAGE)


            self.state = 13943
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 13942
                self.match(PlSqlParser.CASCADE)


            self.state = 13949
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==736 or _la==2114:
                self.state = 13945
                self.update_index_clauses()
                self.state = 13947
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1085 or _la==1261:
                    self.state = 13946
                    self.parallel_clause()




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Exchange_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXCHANGE(self):
            return self.getToken(PlSqlParser.EXCHANGE, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def WITH(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.WITH)
            else:
                return self.getToken(PlSqlParser.WITH, i)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def VALIDATION(self):
            return self.getToken(PlSqlParser.VALIDATION, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def EXCLUDING(self):
            return self.getToken(PlSqlParser.EXCLUDING, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_exchange_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExchange_table_partition" ):
                listener.enterExchange_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExchange_table_partition" ):
                listener.exitExchange_table_partition(self)




    def exchange_table_partition(self):

        localctx = PlSqlParser.Exchange_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1508, self.RULE_exchange_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13951
            self.match(PlSqlParser.EXCHANGE)
            self.state = 13952
            self.match(PlSqlParser.PARTITION)
            self.state = 13953
            self.partition_name()
            self.state = 13954
            self.match(PlSqlParser.WITH)
            self.state = 13955
            self.match(PlSqlParser.TABLE)
            self.state = 13956
            self.tableview_name()
            self.state = 13959
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==503 or _la==663:
                self.state = 13957
                _la = self._input.LA(1)
                if not(_la==503 or _la==663):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13958
                self.match(PlSqlParser.INDEXES)


            self.state = 13963
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2210 or _la==2212:
                self.state = 13961
                _la = self._input.LA(1)
                if not(_la==2210 or _la==2212):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 13962
                self.match(PlSqlParser.VALIDATION)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Coalesce_table_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def allow_or_disallow(self):
            return self.getTypedRuleContext(PlSqlParser.Allow_or_disallowContext,0)


        def CLUSTERING(self):
            return self.getToken(PlSqlParser.CLUSTERING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_coalesce_table_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCoalesce_table_partition" ):
                listener.enterCoalesce_table_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCoalesce_table_partition" ):
                listener.exitCoalesce_table_partition(self)




    def coalesce_table_partition(self):

        localctx = PlSqlParser.Coalesce_table_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1510, self.RULE_coalesce_table_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13965
            self.match(PlSqlParser.COALESCE)
            self.state = 13966
            self.match(PlSqlParser.PARTITION)
            self.state = 13968
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 13967
                self.parallel_clause()


            self.state = 13973
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==40 or _la==408:
                self.state = 13970
                self.allow_or_disallow()
                self.state = 13971
                self.match(PlSqlParser.CLUSTERING)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_interval_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def INTERVAL(self):
            return self.getToken(PlSqlParser.INTERVAL, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def constant(self):
            return self.getTypedRuleContext(PlSqlParser.ConstantContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_interval_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_interval_partition" ):
                listener.enterAlter_interval_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_interval_partition" ):
                listener.exitAlter_interval_partition(self)




    def alter_interval_partition(self):

        localctx = PlSqlParser.Alter_interval_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1512, self.RULE_alter_interval_partition)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13975
            self.match(PlSqlParser.SET)
            self.state = 13976
            self.match(PlSqlParser.INTERVAL)
            self.state = 13977
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 13980
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1824,self._ctx)
            if la_ == 1:
                self.state = 13978
                self.constant()

            elif la_ == 2:
                self.state = 13979
                self.expression()


            self.state = 13982
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_extended_namesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def PARTITIONS(self):
            return self.getToken(PlSqlParser.PARTITIONS, 0)

        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def partition_key_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_key_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_key_valueContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_extended_names

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_extended_names" ):
                listener.enterPartition_extended_names(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_extended_names" ):
                listener.exitPartition_extended_names(self)




    def partition_extended_names(self):

        localctx = PlSqlParser.Partition_extended_namesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1514, self.RULE_partition_extended_names)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 13984
            _la = self._input.LA(1)
            if not(_la==1275 or _la==1277):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 14019
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 13985
                self.partition_name()
                self.state = 13990
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13986
                    self.match(PlSqlParser.COMMA)
                    self.state = 13987
                    self.partition_name()
                    self.state = 13992
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2347]:
                self.state = 13993
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 13994
                self.partition_name()
                self.state = 13999
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 13995
                    self.match(PlSqlParser.COMMA)
                    self.state = 13996
                    self.partition_name()
                    self.state = 14001
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14002
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [580]:
                self.state = 14004
                self.match(PlSqlParser.FOR)
                self.state = 14006
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 14005
                    self.match(PlSqlParser.LEFT_PAREN)


                self.state = 14008
                self.partition_key_value()
                self.state = 14013
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14009
                    self.match(PlSqlParser.COMMA)
                    self.state = 14010
                    self.partition_key_value()
                    self.state = 14015
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14017
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2348:
                    self.state = 14016
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subpartition_extended_namesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def SUBPARTITIONS(self):
            return self.getToken(PlSqlParser.SUBPARTITIONS, 0)

        def partition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Partition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def subpartition_key_value(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Subpartition_key_valueContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Subpartition_key_valueContext,i)


        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_subpartition_extended_names

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubpartition_extended_names" ):
                listener.enterSubpartition_extended_names(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubpartition_extended_names" ):
                listener.exitSubpartition_extended_names(self)




    def subpartition_extended_names(self):

        localctx = PlSqlParser.Subpartition_extended_namesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1516, self.RULE_subpartition_extended_names)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14021
            _la = self._input.LA(1)
            if not(_la==1690 or _la==1691):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 14053
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 14022
                self.partition_name()
                self.state = 14025
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1831,self._ctx)
                if la_ == 1:
                    self.state = 14023
                    self.match(PlSqlParser.UPDATE)
                    self.state = 14024
                    self.match(PlSqlParser.INDEXES)


                pass
            elif token in [2347]:
                self.state = 14027
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14028
                self.partition_name()
                self.state = 14033
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14029
                    self.match(PlSqlParser.COMMA)
                    self.state = 14030
                    self.partition_name()
                    self.state = 14035
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14036
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [580]:
                self.state = 14038
                self.match(PlSqlParser.FOR)
                self.state = 14040
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 14039
                    self.match(PlSqlParser.LEFT_PAREN)


                self.state = 14042
                self.subpartition_key_value()
                self.state = 14047
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14043
                    self.match(PlSqlParser.COMMA)
                    self.state = 14044
                    self.subpartition_key_value()
                    self.state = 14049
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14051
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2348:
                    self.state = 14050
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_table_properties_1Context(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def table_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,i)


        def inmemory_table_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inmemory_table_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inmemory_table_clauseContext,i)


        def supplemental_table_logging(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Supplemental_table_loggingContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Supplemental_table_loggingContext,i)


        def allocate_extent_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allocate_extent_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,i)


        def deallocate_unused_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Deallocate_unused_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,i)


        def RESULT_CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RESULT_CACHE)
            else:
                return self.getToken(PlSqlParser.RESULT_CACHE, i)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def MODE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MODE)
            else:
                return self.getToken(PlSqlParser.MODE, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def upgrade_table_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Upgrade_table_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Upgrade_table_clauseContext,i)


        def records_per_block_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Records_per_block_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Records_per_block_clauseContext,i)


        def parallel_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,i)


        def row_movement_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Row_movement_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Row_movement_clauseContext,i)


        def flashback_archive_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Flashback_archive_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Flashback_archive_clauseContext,i)


        def alter_iot_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_iot_clausesContext,0)


        def CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CACHE)
            else:
                return self.getToken(PlSqlParser.CACHE, i)

        def NOCACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOCACHE)
            else:
                return self.getToken(PlSqlParser.NOCACHE, i)

        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def FORCE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FORCE)
            else:
                return self.getToken(PlSqlParser.FORCE, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_table_properties_1

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_table_properties_1" ):
                listener.enterAlter_table_properties_1(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_table_properties_1" ):
                listener.exitAlter_table_properties_1(self)




    def alter_table_properties_1(self):

        localctx = PlSqlParser.Alter_table_properties_1Context(self, self._ctx, self.state)
        self.enterRule(localctx, 1518, self.RULE_alter_table_properties_1)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14073 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 14073
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1837,self._ctx)
                    if la_ == 1:
                        self.state = 14055
                        self.physical_attributes_clause()
                        pass

                    elif la_ == 2:
                        self.state = 14056
                        self.logging_clause()
                        pass

                    elif la_ == 3:
                        self.state = 14057
                        self.table_compression()
                        pass

                    elif la_ == 4:
                        self.state = 14058
                        self.inmemory_table_clause()
                        pass

                    elif la_ == 5:
                        self.state = 14059
                        self.supplemental_table_logging()
                        pass

                    elif la_ == 6:
                        self.state = 14060
                        self.allocate_extent_clause()
                        pass

                    elif la_ == 7:
                        self.state = 14061
                        self.deallocate_unused_clause()
                        pass

                    elif la_ == 8:
                        self.state = 14062
                        _la = self._input.LA(1)
                        if not(_la==158 or _la==1010):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass

                    elif la_ == 9:
                        self.state = 14063
                        self.match(PlSqlParser.RESULT_CACHE)
                        self.state = 14064
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 14065
                        self.match(PlSqlParser.MODE)
                        self.state = 14066
                        _la = self._input.LA(1)
                        if not(_la==368 or _la==576):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 14067
                        self.match(PlSqlParser.RIGHT_PAREN)
                        pass

                    elif la_ == 10:
                        self.state = 14068
                        self.upgrade_table_clause()
                        pass

                    elif la_ == 11:
                        self.state = 14069
                        self.records_per_block_clause()
                        pass

                    elif la_ == 12:
                        self.state = 14070
                        self.parallel_clause()
                        pass

                    elif la_ == 13:
                        self.state = 14071
                        self.row_movement_clause()
                        pass

                    elif la_ == 14:
                        self.state = 14072
                        self.flashback_archive_clause()
                        pass



                else:
                    raise NoViableAltException(self)
                self.state = 14075 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1838,self._ctx)

            self.state = 14078
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21 or _la==218 or _la==246 or _la==663 or _la==858 or _la==1017 or _la==1058 or _la==1249 or _la==1298:
                self.state = 14077
                self.alter_iot_clauses()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_iot_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def index_org_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Index_org_table_clauseContext,0)


        def alter_overflow_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_overflow_clauseContext,0)


        def alter_mapping_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Alter_mapping_table_clauseContext,0)


        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_iot_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_iot_clauses" ):
                listener.enterAlter_iot_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_iot_clauses" ):
                listener.exitAlter_iot_clauses(self)




    def alter_iot_clauses(self):

        localctx = PlSqlParser.Alter_iot_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1520, self.RULE_alter_iot_clauses)
        try:
            self.state = 14084
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1840,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 14080
                self.index_org_table_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 14081
                self.alter_overflow_clause()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 14082
                self.alter_mapping_table_clause()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 14083
                self.match(PlSqlParser.COALESCE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_mapping_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MAPPING(self):
            return self.getToken(PlSqlParser.MAPPING, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def allocate_extent_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,0)


        def deallocate_unused_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_mapping_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_mapping_table_clause" ):
                listener.enterAlter_mapping_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_mapping_table_clause" ):
                listener.exitAlter_mapping_table_clause(self)




    def alter_mapping_table_clause(self):

        localctx = PlSqlParser.Alter_mapping_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1522, self.RULE_alter_mapping_table_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14086
            self.match(PlSqlParser.MAPPING)
            self.state = 14087
            self.match(PlSqlParser.TABLE)
            self.state = 14090
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [39]:
                self.state = 14088
                self.allocate_extent_clause()
                pass
            elif token in [356]:
                self.state = 14089
                self.deallocate_unused_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_overflow_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_overflow_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Add_overflow_clauseContext,0)


        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def segment_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,i)


        def allocate_extent_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allocate_extent_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,i)


        def shrink_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Shrink_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,i)


        def deallocate_unused_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Deallocate_unused_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_overflow_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_overflow_clause" ):
                listener.enterAlter_overflow_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_overflow_clause" ):
                listener.exitAlter_overflow_clause(self)




    def alter_overflow_clause(self):

        localctx = PlSqlParser.Alter_overflow_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1524, self.RULE_alter_overflow_clause)
        self._la = 0 # Token type
        try:
            self.state = 14102
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [21]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14092
                self.add_overflow_clause()
                pass
            elif token in [1249]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14093
                self.match(PlSqlParser.OVERFLOW)
                self.state = 14098 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14098
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [246, 247, 554, 701, 832, 877, 1017, 1057, 1296, 1299, 1678, 1996]:
                        self.state = 14094
                        self.segment_attributes_clause()
                        pass
                    elif token in [39]:
                        self.state = 14095
                        self.allocate_extent_clause()
                        pass
                    elif token in [1602]:
                        self.state = 14096
                        self.shrink_clause()
                        pass
                    elif token in [356]:
                        self.state = 14097
                        self.deallocate_unused_clause()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 14100 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==39 or _la==246 or _la==247 or _la==356 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1602 or _la==1678 or _la==1996):
                        break

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_overflow_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def segment_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Segment_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def PARTITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PARTITION)
            else:
                return self.getToken(PlSqlParser.PARTITION, i)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_overflow_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_overflow_clause" ):
                listener.enterAdd_overflow_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_overflow_clause" ):
                listener.exitAdd_overflow_clause(self)




    def add_overflow_clause(self):

        localctx = PlSqlParser.Add_overflow_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1526, self.RULE_add_overflow_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14104
            self.match(PlSqlParser.ADD)
            self.state = 14105
            self.match(PlSqlParser.OVERFLOW)
            self.state = 14107
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                self.state = 14106
                self.segment_attributes_clause()


            self.state = 14125
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 14109
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14110
                self.match(PlSqlParser.PARTITION)
                self.state = 14112
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                    self.state = 14111
                    self.segment_attributes_clause()


                self.state = 14121
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14114
                    self.match(PlSqlParser.COMMA)
                    self.state = 14115
                    self.match(PlSqlParser.PARTITION)
                    self.state = 14117
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==246 or _la==247 or _la==554 or _la==701 or _la==832 or _la==877 or _la==1017 or _la==1057 or _la==1296 or _la==1299 or _la==1678 or _la==1996:
                        self.state = 14116
                        self.segment_attributes_clause()


                    self.state = 14123
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14124
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_index_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def update_global_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Update_global_index_clauseContext,0)


        def update_all_indexes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Update_all_indexes_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_update_index_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_index_clauses" ):
                listener.enterUpdate_index_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_index_clauses" ):
                listener.exitUpdate_index_clauses(self)




    def update_index_clauses(self):

        localctx = PlSqlParser.Update_index_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1528, self.RULE_update_index_clauses)
        try:
            self.state = 14129
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1850,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 14127
                self.update_global_index_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 14128
                self.update_all_indexes_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_global_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GLOBAL(self):
            return self.getToken(PlSqlParser.GLOBAL, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def INVALIDATE(self):
            return self.getToken(PlSqlParser.INVALIDATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_update_global_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_global_index_clause" ):
                listener.enterUpdate_global_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_global_index_clause" ):
                listener.exitUpdate_global_index_clause(self)




    def update_global_index_clause(self):

        localctx = PlSqlParser.Update_global_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1530, self.RULE_update_global_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14131
            _la = self._input.LA(1)
            if not(_la==736 or _la==2114):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 14132
            self.match(PlSqlParser.GLOBAL)
            self.state = 14133
            self.match(PlSqlParser.INDEXES)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_all_indexes_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def update_all_indexes_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Update_all_indexes_index_clauseContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_update_all_indexes_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_all_indexes_clause" ):
                listener.enterUpdate_all_indexes_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_all_indexes_clause" ):
                listener.exitUpdate_all_indexes_clause(self)




    def update_all_indexes_clause(self):

        localctx = PlSqlParser.Update_all_indexes_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1532, self.RULE_update_all_indexes_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14135
            self.match(PlSqlParser.UPDATE)
            self.state = 14136
            self.match(PlSqlParser.INDEXES)
            self.state = 14141
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 14137
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14138
                self.update_all_indexes_index_clause()
                self.state = 14139
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_all_indexes_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def update_index_partition(self):
            return self.getTypedRuleContext(PlSqlParser.Update_index_partitionContext,0)


        def update_index_subpartition(self):
            return self.getTypedRuleContext(PlSqlParser.Update_index_subpartitionContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def update_all_indexes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Update_all_indexes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Update_all_indexes_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_update_all_indexes_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_all_indexes_index_clause" ):
                listener.enterUpdate_all_indexes_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_all_indexes_index_clause" ):
                listener.exitUpdate_all_indexes_index_clause(self)




    def update_all_indexes_index_clause(self):

        localctx = PlSqlParser.Update_all_indexes_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1534, self.RULE_update_all_indexes_index_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14143
            self.index_name()
            self.state = 14144
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 14147
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275]:
                self.state = 14145
                self.update_index_partition()
                pass
            elif token in [1691]:
                self.state = 14146
                self.update_index_subpartition()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 14149
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 14154
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 14150
                self.match(PlSqlParser.COMMA)
                self.state = 14151
                self.update_all_indexes_clause()
                self.state = 14156
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_index_partitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def index_partition_description(self):
            return self.getTypedRuleContext(PlSqlParser.Index_partition_descriptionContext,0)


        def index_subpartition_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Index_subpartition_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def update_index_partition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Update_index_partitionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Update_index_partitionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_update_index_partition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_index_partition" ):
                listener.enterUpdate_index_partition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_index_partition" ):
                listener.exitUpdate_index_partition(self)




    def update_index_partition(self):

        localctx = PlSqlParser.Update_index_partitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1536, self.RULE_update_index_partition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14157
            self.index_partition_description()
            self.state = 14159
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1679 or _la==2347:
                self.state = 14158
                self.index_subpartition_clause()


            self.state = 14165
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1855,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 14161
                    self.match(PlSqlParser.COMMA)
                    self.state = 14162
                    self.update_index_partition() 
                self.state = 14167
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1855,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_index_subpartitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def subpartition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Subpartition_nameContext,0)


        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def tablespace(self):
            return self.getTypedRuleContext(PlSqlParser.TablespaceContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def update_index_subpartition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Update_index_subpartitionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Update_index_subpartitionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_update_index_subpartition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_index_subpartition" ):
                listener.enterUpdate_index_subpartition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_index_subpartition" ):
                listener.exitUpdate_index_subpartition(self)




    def update_index_subpartition(self):

        localctx = PlSqlParser.Update_index_subpartitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1538, self.RULE_update_index_subpartition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14168
            self.match(PlSqlParser.SUBPARTITION)
            self.state = 14170
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1856,self._ctx)
            if la_ == 1:
                self.state = 14169
                self.subpartition_name()


            self.state = 14174
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1996:
                self.state = 14172
                self.match(PlSqlParser.TABLESPACE)
                self.state = 14173
                self.tablespace()


            self.state = 14180
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,1858,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 14176
                    self.match(PlSqlParser.COMMA)
                    self.state = 14177
                    self.update_index_subpartition() 
                self.state = 14182
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1858,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Enable_disable_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def using_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_index_clauseContext,0)


        def exceptions_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Exceptions_clauseContext,0)


        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def VALIDATE(self):
            return self.getToken(PlSqlParser.VALIDATE, 0)

        def NOVALIDATE(self):
            return self.getToken(PlSqlParser.NOVALIDATE, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_enable_disable_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnable_disable_clause" ):
                listener.enterEnable_disable_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnable_disable_clause" ):
                listener.exitEnable_disable_clause(self)




    def enable_disable_clause(self):

        localctx = PlSqlParser.Enable_disable_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1540, self.RULE_enable_disable_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14183
            _la = self._input.LA(1)
            if not(_la==404 or _la==467):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 14185
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1149 or _la==2160:
                self.state = 14184
                _la = self._input.LA(1)
                if not(_la==1149 or _la==2160):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 14203
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2091]:
                self.state = 14187
                self.match(PlSqlParser.UNIQUE)
                self.state = 14188
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14189
                self.column_name()
                self.state = 14194
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14190
                    self.match(PlSqlParser.COMMA)
                    self.state = 14191
                    self.column_name()
                    self.state = 14196
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14197
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1376]:
                self.state = 14199
                self.match(PlSqlParser.PRIMARY)
                self.state = 14200
                self.match(PlSqlParser.KEY)
                pass
            elif token in [271]:
                self.state = 14201
                self.match(PlSqlParser.CONSTRAINT)
                self.state = 14202
                self.constraint_name()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 14206
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 14205
                self.using_index_clause()


            self.state = 14209
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==500:
                self.state = 14208
                self.exceptions_clause()


            self.state = 14212
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 14211
                self.match(PlSqlParser.CASCADE)


            self.state = 14216
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==438 or _la==768:
                self.state = 14214
                _la = self._input.LA(1)
                if not(_la==438 or _la==768):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 14215
                self.match(PlSqlParser.INDEX)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_index_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def create_index(self):
            return self.getTypedRuleContext(PlSqlParser.Create_indexContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def index_attributes(self):
            return self.getTypedRuleContext(PlSqlParser.Index_attributesContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_using_index_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_index_clause" ):
                listener.enterUsing_index_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_index_clause" ):
                listener.exitUsing_index_clause(self)




    def using_index_clause(self):

        localctx = PlSqlParser.Using_index_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1542, self.RULE_using_index_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14218
            self.match(PlSqlParser.USING)
            self.state = 14219
            self.match(PlSqlParser.INDEX)
            self.state = 14226
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1866,self._ctx)
            if la_ == 1:
                self.state = 14220
                self.index_name()

            elif la_ == 2:
                self.state = 14221
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14222
                self.create_index()
                self.state = 14223
                self.match(PlSqlParser.RIGHT_PAREN)

            elif la_ == 3:
                self.state = 14225
                self.index_attributes()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_attributesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def physical_attributes_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_attributes_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_attributes_clauseContext,i)


        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def TABLESPACE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.TABLESPACE)
            else:
                return self.getToken(PlSqlParser.TABLESPACE, i)

        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def sort_or_nosort(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sort_or_nosortContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sort_or_nosortContext,i)


        def REVERSE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REVERSE)
            else:
                return self.getToken(PlSqlParser.REVERSE, i)

        def visible_or_invisible(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Visible_or_invisibleContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Visible_or_invisibleContext,i)


        def parallel_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parallel_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,i)


        def tablespace(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.TablespaceContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.TablespaceContext,i)


        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_index_attributes

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_attributes" ):
                listener.enterIndex_attributes(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_attributes" ):
                listener.exitIndex_attributes(self)




    def index_attributes(self):

        localctx = PlSqlParser.Index_attributesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1544, self.RULE_index_attributes)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14240 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 14240
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [247, 701, 877, 1296, 1299, 1678]:
                        self.state = 14228
                        self.physical_attributes_clause()
                        pass
                    elif token in [554, 832, 1057]:
                        self.state = 14229
                        self.logging_clause()
                        pass
                    elif token in [1996]:
                        self.state = 14230
                        self.match(PlSqlParser.TABLESPACE)
                        self.state = 14233
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                            self.state = 14231
                            self.tablespace()
                            pass
                        elif token in [368]:
                            self.state = 14232
                            self.match(PlSqlParser.DEFAULT)
                            pass
                        else:
                            raise NoViableAltException(self)

                        pass
                    elif token in [246, 1017]:
                        self.state = 14235
                        self.key_compression()
                        pass
                    elif token in [1123, 1626]:
                        self.state = 14236
                        self.sort_or_nosort()
                        pass
                    elif token in [1510]:
                        self.state = 14237
                        self.match(PlSqlParser.REVERSE)
                        pass
                    elif token in [738, 2194]:
                        self.state = 14238
                        self.visible_or_invisible()
                        pass
                    elif token in [1085, 1261]:
                        self.state = 14239
                        self.parallel_clause()
                        pass
                    else:
                        raise NoViableAltException(self)


                else:
                    raise NoViableAltException(self)
                self.state = 14242 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1869,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sort_or_nosortContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SORT(self):
            return self.getToken(PlSqlParser.SORT, 0)

        def NOSORT(self):
            return self.getToken(PlSqlParser.NOSORT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sort_or_nosort

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSort_or_nosort" ):
                listener.enterSort_or_nosort(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSort_or_nosort" ):
                listener.exitSort_or_nosort(self)




    def sort_or_nosort(self):

        localctx = PlSqlParser.Sort_or_nosortContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1546, self.RULE_sort_or_nosort)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14244
            _la = self._input.LA(1)
            if not(_la==1123 or _la==1626):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Exceptions_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXCEPTIONS(self):
            return self.getToken(PlSqlParser.EXCEPTIONS, 0)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_exceptions_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExceptions_clause" ):
                listener.enterExceptions_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExceptions_clause" ):
                listener.exitExceptions_clause(self)




    def exceptions_clause(self):

        localctx = PlSqlParser.Exceptions_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1548, self.RULE_exceptions_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14246
            self.match(PlSqlParser.EXCEPTIONS)
            self.state = 14247
            self.match(PlSqlParser.INTO)
            self.state = 14248
            self.tableview_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Move_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def segment_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,0)


        def table_compression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_compressionContext,0)


        def index_org_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Index_org_table_clauseContext,0)


        def lob_storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_storage_clauseContext,i)


        def varray_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Varray_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Varray_col_propertiesContext,i)


        def parallel_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Parallel_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_move_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMove_table_clause" ):
                listener.enterMove_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMove_table_clause" ):
                listener.exitMove_table_clause(self)




    def move_table_clause(self):

        localctx = PlSqlParser.Move_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1550, self.RULE_move_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14250
            self.match(PlSqlParser.MOVE)
            self.state = 14252
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1190:
                self.state = 14251
                self.match(PlSqlParser.ONLINE)


            self.state = 14255
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1871,self._ctx)
            if la_ == 1:
                self.state = 14254
                self.segment_attributes_clause()


            self.state = 14258
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1872,self._ctx)
            if la_ == 1:
                self.state = 14257
                self.table_compression()


            self.state = 14261
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==246 or _la==663 or _la==858 or _la==1017 or _la==1058 or _la==1249 or _la==1298:
                self.state = 14260
                self.index_org_table_clause()


            self.state = 14267
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==817 or _la==2171:
                self.state = 14265
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [817]:
                    self.state = 14263
                    self.lob_storage_clause()
                    pass
                elif token in [2171]:
                    self.state = 14264
                    self.varray_col_properties()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 14269
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 14271
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1085 or _la==1261:
                self.state = 14270
                self.parallel_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_org_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def mapping_table_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Mapping_table_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Mapping_table_clauseContext,i)


        def PCTTHRESHOLD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTTHRESHOLD)
            else:
                return self.getToken(PlSqlParser.PCTTHRESHOLD, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def key_compression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Key_compressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Key_compressionContext,i)


        def index_org_overflow_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Index_org_overflow_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_org_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_org_table_clause" ):
                listener.enterIndex_org_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_org_table_clause" ):
                listener.exitIndex_org_table_clause(self)




    def index_org_table_clause(self):

        localctx = PlSqlParser.Index_org_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1552, self.RULE_index_org_table_clause)
        self._la = 0 # Token type
        try:
            self.state = 14285
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [246, 858, 1017, 1058, 1298]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14277 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 14277
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [858, 1058]:
                            self.state = 14273
                            self.mapping_table_clause()
                            pass
                        elif token in [1298]:
                            self.state = 14274
                            self.match(PlSqlParser.PCTTHRESHOLD)
                            self.state = 14275
                            self.match(PlSqlParser.UNSIGNED_INTEGER)
                            pass
                        elif token in [246, 1017]:
                            self.state = 14276
                            self.key_compression()
                            pass
                        else:
                            raise NoViableAltException(self)


                    else:
                        raise NoViableAltException(self)
                    self.state = 14279 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,1878,self._ctx)

                self.state = 14282
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==663 or _la==1249:
                    self.state = 14281
                    self.index_org_overflow_clause()


                pass
            elif token in [663, 1249]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14284
                self.index_org_overflow_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Mapping_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MAPPING(self):
            return self.getToken(PlSqlParser.MAPPING, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def NOMAPPING(self):
            return self.getToken(PlSqlParser.NOMAPPING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_mapping_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMapping_table_clause" ):
                listener.enterMapping_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMapping_table_clause" ):
                listener.exitMapping_table_clause(self)




    def mapping_table_clause(self):

        localctx = PlSqlParser.Mapping_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1554, self.RULE_mapping_table_clause)
        try:
            self.state = 14290
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [858]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14287
                self.match(PlSqlParser.MAPPING)
                self.state = 14288
                self.match(PlSqlParser.TABLE)
                pass
            elif token in [1058]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14289
                self.match(PlSqlParser.NOMAPPING)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Key_compressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NOCOMPRESS(self):
            return self.getToken(PlSqlParser.NOCOMPRESS, 0)

        def COMPRESS(self):
            return self.getToken(PlSqlParser.COMPRESS, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_key_compression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKey_compression" ):
                listener.enterKey_compression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKey_compression" ):
                listener.exitKey_compression(self)




    def key_compression(self):

        localctx = PlSqlParser.Key_compressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1556, self.RULE_key_compression)
        try:
            self.state = 14295
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1017]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14292
                self.match(PlSqlParser.NOCOMPRESS)
                pass
            elif token in [246]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14293
                self.match(PlSqlParser.COMPRESS)
                self.state = 14294
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_org_overflow_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def segment_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Segment_attributes_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_org_overflow_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_org_overflow_clause" ):
                listener.enterIndex_org_overflow_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_org_overflow_clause" ):
                listener.exitIndex_org_overflow_clause(self)




    def index_org_overflow_clause(self):

        localctx = PlSqlParser.Index_org_overflow_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1558, self.RULE_index_org_overflow_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14299
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==663:
                self.state = 14297
                self.match(PlSqlParser.INCLUDING)
                self.state = 14298
                self.column_name()


            self.state = 14301
            self.match(PlSqlParser.OVERFLOW)
            self.state = 14303
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1884,self._ctx)
            if la_ == 1:
                self.state = 14302
                self.segment_attributes_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def add_modify_drop_column_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Add_modify_drop_column_clausesContext,0)


        def rename_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Rename_column_clauseContext,0)


        def modify_collection_retrieval(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_collection_retrievalContext,0)


        def modify_lob_storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_lob_storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_column_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_clauses" ):
                listener.enterColumn_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_clauses" ):
                listener.exitColumn_clauses(self)




    def column_clauses(self):

        localctx = PlSqlParser.Column_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1560, self.RULE_column_clauses)
        try:
            self.state = 14309
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1885,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 14305
                self.add_modify_drop_column_clauses()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 14306
                self.rename_column_clause()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 14307
                self.modify_collection_retrieval()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 14308
                self.modify_lob_storage_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_collection_retrievalContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def NESTED(self):
            return self.getToken(PlSqlParser.NESTED, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def collection_item(self):
            return self.getTypedRuleContext(PlSqlParser.Collection_itemContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def LOCATOR(self):
            return self.getToken(PlSqlParser.LOCATOR, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_collection_retrieval

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_collection_retrieval" ):
                listener.enterModify_collection_retrieval(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_collection_retrieval" ):
                listener.exitModify_collection_retrieval(self)




    def modify_collection_retrieval(self):

        localctx = PlSqlParser.Modify_collection_retrievalContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1562, self.RULE_modify_collection_retrieval)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14311
            self.match(PlSqlParser.MODIFY)
            self.state = 14312
            self.match(PlSqlParser.NESTED)
            self.state = 14313
            self.match(PlSqlParser.TABLE)
            self.state = 14314
            self.collection_item()
            self.state = 14315
            self.match(PlSqlParser.RETURN)
            self.state = 14316
            self.match(PlSqlParser.AS)
            self.state = 14317
            _la = self._input.LA(1)
            if not(_la==825 or _la==2165):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Collection_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_collection_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollection_item" ):
                listener.enterCollection_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollection_item" ):
                listener.exitCollection_item(self)




    def collection_item(self):

        localctx = PlSqlParser.Collection_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1564, self.RULE_collection_item)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14319
            self.tableview_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rename_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def old_column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Old_column_nameContext,0)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def new_column_name(self):
            return self.getTypedRuleContext(PlSqlParser.New_column_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_rename_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRename_column_clause" ):
                listener.enterRename_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRename_column_clause" ):
                listener.exitRename_column_clause(self)




    def rename_column_clause(self):

        localctx = PlSqlParser.Rename_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1566, self.RULE_rename_column_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14321
            self.match(PlSqlParser.RENAME)
            self.state = 14322
            self.match(PlSqlParser.COLUMN)
            self.state = 14323
            self.old_column_name()
            self.state = 14324
            self.match(PlSqlParser.TO)
            self.state = 14325
            self.new_column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Old_column_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_old_column_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOld_column_name" ):
                listener.enterOld_column_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOld_column_name" ):
                listener.exitOld_column_name(self)




    def old_column_name(self):

        localctx = PlSqlParser.Old_column_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1568, self.RULE_old_column_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14327
            self.column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class New_column_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_new_column_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNew_column_name" ):
                listener.enterNew_column_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNew_column_name" ):
                listener.exitNew_column_name(self)




    def new_column_name(self):

        localctx = PlSqlParser.New_column_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1570, self.RULE_new_column_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14329
            self.column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_modify_drop_column_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constraint_clauses(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Constraint_clausesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Constraint_clausesContext,i)


        def add_column_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Add_column_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Add_column_clauseContext,i)


        def modify_column_clauses(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Modify_column_clausesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Modify_column_clausesContext,i)


        def drop_column_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Drop_column_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Drop_column_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_modify_drop_column_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_modify_drop_column_clauses" ):
                listener.enterAdd_modify_drop_column_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_modify_drop_column_clauses" ):
                listener.exitAdd_modify_drop_column_clauses(self)




    def add_modify_drop_column_clauses(self):

        localctx = PlSqlParser.Add_modify_drop_column_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1572, self.RULE_add_modify_drop_column_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14335 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 14335
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1886,self._ctx)
                if la_ == 1:
                    self.state = 14331
                    self.constraint_clauses()
                    pass

                elif la_ == 2:
                    self.state = 14332
                    self.add_column_clause()
                    pass

                elif la_ == 3:
                    self.state = 14333
                    self.modify_column_clauses()
                    pass

                elif la_ == 4:
                    self.state = 14334
                    self.drop_column_clause()
                    pass


                self.state = 14337 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==21 or _la==438 or _la==926 or _la==1481 or _la==1590):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def UNUSED(self):
            return self.getToken(PlSqlParser.UNUSED, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def CASCADE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CASCADE)
            else:
                return self.getToken(PlSqlParser.CASCADE, i)

        def CONSTRAINTS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONSTRAINTS)
            else:
                return self.getToken(PlSqlParser.CONSTRAINTS, i)

        def INVALIDATE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INVALIDATE)
            else:
                return self.getToken(PlSqlParser.INVALIDATE, i)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def CHECKPOINT(self):
            return self.getToken(PlSqlParser.CHECKPOINT, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def CONTINUE(self):
            return self.getToken(PlSqlParser.CONTINUE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_column_clause" ):
                listener.enterDrop_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_column_clause" ):
                listener.exitDrop_column_clause(self)




    def drop_column_clause(self):

        localctx = PlSqlParser.Drop_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1574, self.RULE_drop_column_clause)
        self._la = 0 # Token type
        try:
            self.state = 14401
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1898,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 14339
                self.match(PlSqlParser.SET)
                self.state = 14340
                self.match(PlSqlParser.UNUSED)
                self.state = 14354
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [226]:
                    self.state = 14341
                    self.match(PlSqlParser.COLUMN)
                    self.state = 14342
                    self.column_name()
                    pass
                elif token in [2347]:
                    self.state = 14343
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 14344
                    self.column_name()
                    self.state = 14349
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 14345
                        self.match(PlSqlParser.COMMA)
                        self.state = 14346
                        self.column_name()
                        self.state = 14351
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 14352
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 14361
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==171 or _la==736:
                    self.state = 14359
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [171]:
                        self.state = 14356
                        self.match(PlSqlParser.CASCADE)
                        self.state = 14357
                        self.match(PlSqlParser.CONSTRAINTS)
                        pass
                    elif token in [736]:
                        self.state = 14358
                        self.match(PlSqlParser.INVALIDATE)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 14363
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 14364
                self.match(PlSqlParser.DROP)
                self.state = 14378
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [226]:
                    self.state = 14365
                    self.match(PlSqlParser.COLUMN)
                    self.state = 14366
                    self.column_name()
                    pass
                elif token in [2347]:
                    self.state = 14367
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 14368
                    self.column_name()
                    self.state = 14373
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 14369
                        self.match(PlSqlParser.COMMA)
                        self.state = 14370
                        self.column_name()
                        self.state = 14375
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 14376
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 14385
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==171 or _la==736:
                    self.state = 14383
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [171]:
                        self.state = 14380
                        self.match(PlSqlParser.CASCADE)
                        self.state = 14381
                        self.match(PlSqlParser.CONSTRAINTS)
                        pass
                    elif token in [736]:
                        self.state = 14382
                        self.match(PlSqlParser.INVALIDATE)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 14387
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14390
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==191:
                    self.state = 14388
                    self.match(PlSqlParser.CHECKPOINT)
                    self.state = 14389
                    self.match(PlSqlParser.UNSIGNED_INTEGER)


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 14392
                self.match(PlSqlParser.DROP)
                self.state = 14397
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2111]:
                    self.state = 14393
                    self.match(PlSqlParser.UNUSED)
                    self.state = 14394
                    self.match(PlSqlParser.COLUMNS)
                    pass
                elif token in [227]:
                    self.state = 14395
                    self.match(PlSqlParser.COLUMNS)
                    self.state = 14396
                    self.match(PlSqlParser.CONTINUE)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 14399
                self.match(PlSqlParser.CHECKPOINT)
                self.state = 14400
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_column_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def modify_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Modify_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Modify_col_propertiesContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def modify_col_visibility(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Modify_col_visibilityContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Modify_col_visibilityContext,i)


        def modify_col_substitutable(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_col_substitutableContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_column_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_column_clauses" ):
                listener.enterModify_column_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_column_clauses" ):
                listener.exitModify_column_clauses(self)




    def modify_column_clauses(self):

        localctx = PlSqlParser.Modify_column_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1576, self.RULE_modify_column_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14403
            self.match(PlSqlParser.MODIFY)
            self.state = 14429
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1901,self._ctx)
            if la_ == 1:
                self.state = 14404
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14405
                self.modify_col_properties()
                self.state = 14410
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14406
                    self.match(PlSqlParser.COMMA)
                    self.state = 14407
                    self.modify_col_properties()
                    self.state = 14412
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14413
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 14415
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14416
                self.modify_col_visibility()
                self.state = 14421
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14417
                    self.match(PlSqlParser.COMMA)
                    self.state = 14418
                    self.modify_col_visibility()
                    self.state = 14423
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14424
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 3:
                self.state = 14426
                self.modify_col_properties()
                pass

            elif la_ == 4:
                self.state = 14427
                self.modify_col_visibility()
                pass

            elif la_ == 5:
                self.state = 14428
                self.modify_col_substitutable()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_col_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def datatype(self):
            return self.getTypedRuleContext(PlSqlParser.DatatypeContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def encryption_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Encryption_specContext,0)


        def DECRYPT(self):
            return self.getToken(PlSqlParser.DECRYPT, 0)

        def inline_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inline_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inline_constraintContext,i)


        def lob_storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_col_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_col_properties" ):
                listener.enterModify_col_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_col_properties" ):
                listener.exitModify_col_properties(self)




    def modify_col_properties(self):

        localctx = PlSqlParser.Modify_col_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1578, self.RULE_modify_col_properties)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14431
            self.column_name()
            self.state = 14433
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if ((((_la - 116)) & ~0x3f) == 0 and ((1 << (_la - 116)) & 68158609) != 0) or ((((_la - 185)) & ~0x3f) == 0 and ((1 << (_la - 185)) & 1048579) != 0) or ((((_la - 344)) & ~0x3f) == 0 and ((1 << (_la - 344)) & 98309) != 0) or _la==434 or _la==440 or _la==567 or _la==638 or ((((_la - 726)) & ~0x3f) == 0 and ((1 << (_la - 726)) & 385) != 0) or _la==841 or _la==904 or ((((_la - 912)) & ~0x3f) == 0 and ((1 << (_la - 912)) & 22814866800641) != 0) or ((((_la - 1164)) & ~0x3f) == 0 and ((1 << (_la - 1164)) & 35) != 0) or ((((_la - 1330)) & ~0x3f) == 0 and ((1 << (_la - 1330)) & 98305) != 0) or _la==1423 or _la==1432 or _la==1523 or _la==1558 or ((((_la - 1610)) & ~0x3f) == 0 and ((1 << (_la - 1610)) & 8195) != 0) or _la==1683 or ((((_la - 2019)) & ~0x3f) == 0 and ((1 << (_la - 2019)) & 2959) != 0) or ((((_la - 2121)) & ~0x3f) == 0 and ((1 << (_la - 2121)) & 105553116266497) != 0) or ((((_la - 2253)) & ~0x3f) == 0 and ((1 << (_la - 2253)) & 641) != 0):
                self.state = 14432
                self.datatype()


            self.state = 14437
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 14435
                self.match(PlSqlParser.DEFAULT)
                self.state = 14436
                self.expression()


            self.state = 14442
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [471]:
                self.state = 14439
                self.match(PlSqlParser.ENCRYPT)
                self.state = 14440
                self.encryption_spec()
                pass
            elif token in [366]:
                self.state = 14441
                self.match(PlSqlParser.DECRYPT)
                pass
            elif token in [-1, 21, 190, 271, 404, 438, 467, 817, 926, 1138, 1162, 1376, 1450, 1481, 1590, 2091, 2348, 2353, 2354, 2367]:
                pass
            else:
                pass
            self.state = 14447
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==190 or _la==271 or _la==1138 or _la==1162 or _la==1376 or _la==1450 or _la==2091:
                self.state = 14444
                self.inline_constraint()
                self.state = 14449
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 14451
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==817:
                self.state = 14450
                self.lob_storage_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_col_visibilityContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def VISIBLE(self):
            return self.getToken(PlSqlParser.VISIBLE, 0)

        def INVISIBLE(self):
            return self.getToken(PlSqlParser.INVISIBLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_col_visibility

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_col_visibility" ):
                listener.enterModify_col_visibility(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_col_visibility" ):
                listener.exitModify_col_visibility(self)




    def modify_col_visibility(self):

        localctx = PlSqlParser.Modify_col_visibilityContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1580, self.RULE_modify_col_visibility)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14453
            self.column_name()
            self.state = 14454
            _la = self._input.LA(1)
            if not(_la==738 or _la==2194):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_col_substitutableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def SUBSTITUTABLE(self):
            return self.getToken(PlSqlParser.SUBSTITUTABLE, 0)

        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_col_substitutable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_col_substitutable" ):
                listener.enterModify_col_substitutable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_col_substitutable" ):
                listener.exitModify_col_substitutable(self)




    def modify_col_substitutable(self):

        localctx = PlSqlParser.Modify_col_substitutableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1582, self.RULE_modify_col_substitutable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14456
            self.match(PlSqlParser.COLUMN)
            self.state = 14457
            self.column_name()
            self.state = 14459
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 14458
                self.match(PlSqlParser.NOT)


            self.state = 14461
            self.match(PlSqlParser.SUBSTITUTABLE)
            self.state = 14462
            self.match(PlSqlParser.AT)
            self.state = 14463
            self.match(PlSqlParser.ALL)
            self.state = 14464
            self.match(PlSqlParser.LEVELS)
            self.state = 14466
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==576:
                self.state = 14465
                self.match(PlSqlParser.FORCE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def column_properties(self):
            return self.getTypedRuleContext(PlSqlParser.Column_propertiesContext,0)


        def column_definition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_definitionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_definitionContext,i)


        def virtual_column_definition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Virtual_column_definitionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Virtual_column_definitionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_column_clause" ):
                listener.enterAdd_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_column_clause" ):
                listener.exitAdd_column_clause(self)




    def add_column_clause(self):

        localctx = PlSqlParser.Add_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1584, self.RULE_add_column_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14468
            self.match(PlSqlParser.ADD)
            self.state = 14490
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 14469
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14472
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1909,self._ctx)
                if la_ == 1:
                    self.state = 14470
                    self.column_definition()
                    pass

                elif la_ == 2:
                    self.state = 14471
                    self.virtual_column_definition()
                    pass


                self.state = 14481
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14474
                    self.match(PlSqlParser.COMMA)
                    self.state = 14477
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1910,self._ctx)
                    if la_ == 1:
                        self.state = 14475
                        self.column_definition()
                        pass

                    elif la_ == 2:
                        self.state = 14476
                        self.virtual_column_definition()
                        pass


                    self.state = 14483
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14484
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 14488
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1912,self._ctx)
                if la_ == 1:
                    self.state = 14486
                    self.column_definition()
                    pass

                elif la_ == 2:
                    self.state = 14487
                    self.virtual_column_definition()
                    pass


                pass
            else:
                raise NoViableAltException(self)

            self.state = 14493
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==226 or _la==817 or _la==959 or _la==2171 or _la==2253:
                self.state = 14492
                self.column_properties()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Alter_varray_col_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def VARRAY(self):
            return self.getToken(PlSqlParser.VARRAY, 0)

        def varray_item(self):
            return self.getTypedRuleContext(PlSqlParser.Varray_itemContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def modify_lob_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_lob_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_alter_varray_col_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAlter_varray_col_properties" ):
                listener.enterAlter_varray_col_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAlter_varray_col_properties" ):
                listener.exitAlter_varray_col_properties(self)




    def alter_varray_col_properties(self):

        localctx = PlSqlParser.Alter_varray_col_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1586, self.RULE_alter_varray_col_properties)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14495
            self.match(PlSqlParser.MODIFY)
            self.state = 14496
            self.match(PlSqlParser.VARRAY)
            self.state = 14497
            self.varray_item()
            self.state = 14498
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 14499
            self.modify_lob_parameters()
            self.state = 14500
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Varray_col_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VARRAY(self):
            return self.getToken(PlSqlParser.VARRAY, 0)

        def varray_item(self):
            return self.getTypedRuleContext(PlSqlParser.Varray_itemContext,0)


        def varray_storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Varray_storage_clauseContext,0)


        def substitutable_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Substitutable_column_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_varray_col_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVarray_col_properties" ):
                listener.enterVarray_col_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVarray_col_properties" ):
                listener.exitVarray_col_properties(self)




    def varray_col_properties(self):

        localctx = PlSqlParser.Varray_col_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1588, self.RULE_varray_col_properties)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14502
            self.match(PlSqlParser.VARRAY)
            self.state = 14503
            self.varray_item()
            self.state = 14509
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1916,self._ctx)
            if la_ == 1:
                self.state = 14505
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==455 or _la==740 or _la==1138 or _la==1696:
                    self.state = 14504
                    self.substitutable_column_clause()


                self.state = 14507
                self.varray_storage_clause()
                pass

            elif la_ == 2:
                self.state = 14508
                self.substitutable_column_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Varray_storage_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def LOB(self):
            return self.getToken(PlSqlParser.LOB, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def lob_storage_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_storage_parametersContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def lob_segname(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_segnameContext,0)


        def SECUREFILE(self):
            return self.getToken(PlSqlParser.SECUREFILE, 0)

        def BASICFILE(self):
            return self.getToken(PlSqlParser.BASICFILE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_varray_storage_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVarray_storage_clause" ):
                listener.enterVarray_storage_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVarray_storage_clause" ):
                listener.exitVarray_storage_clause(self)




    def varray_storage_clause(self):

        localctx = PlSqlParser.Varray_storage_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1590, self.RULE_varray_storage_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14511
            self.match(PlSqlParser.STORE)
            self.state = 14512
            self.match(PlSqlParser.AS)
            self.state = 14514
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==104 or _la==1562:
                self.state = 14513
                _la = self._input.LA(1)
                if not(_la==104 or _la==1562):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 14516
            self.match(PlSqlParser.LOB)
            self.state = 14525
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1919,self._ctx)
            if la_ == 1:
                self.state = 14518
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 36507222015) != 0) or _la==2378:
                    self.state = 14517
                    self.lob_segname()


                self.state = 14520
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14521
                self.lob_storage_parameters()
                self.state = 14522
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 14524
                self.lob_segname()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_segnameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_segname

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_segname" ):
                listener.enterLob_segname(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_segname" ):
                listener.exitLob_segname(self)




    def lob_segname(self):

        localctx = PlSqlParser.Lob_segnameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1592, self.RULE_lob_segname)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14527
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_item" ):
                listener.enterLob_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_item" ):
                listener.exitLob_item(self)




    def lob_item(self):

        localctx = PlSqlParser.Lob_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1594, self.RULE_lob_item)
        try:
            self.state = 14532
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14529
                self.regular_id()
                pass
            elif token in [2336, 2343]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14530
                self.quoted_string()
                pass
            elif token in [2344]:
                self.enterOuterAlt(localctx, 3)
                self.state = 14531
                self.match(PlSqlParser.DELIMITED_ID)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_storage_parametersContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.tablespace_name = None # Id_expressionContext

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def lob_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_parametersContext,0)


        def storage_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_storage_parameters

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_storage_parameters" ):
                listener.enterLob_storage_parameters(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_storage_parameters" ):
                listener.exitLob_storage_parameters(self)




    def lob_storage_parameters(self):

        localctx = PlSqlParser.Lob_storage_parametersContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1596, self.RULE_lob_storage_parameters)
        try:
            self.state = 14541
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1996]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14534
                self.match(PlSqlParser.TABLESPACE)
                self.state = 14535
                localctx.tablespace_name = self.id_expression()
                pass
            elif token in [158, 195, 246, 366, 367, 404, 467, 471, 586, 767, 1010, 1017, 1300, 1505]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14536
                self.lob_parameters()
                self.state = 14538
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1921,self._ctx)
                if la_ == 1:
                    self.state = 14537
                    self.storage_clause()


                pass
            elif token in [1678]:
                self.enterOuterAlt(localctx, 3)
                self.state = 14540
                self.storage_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_storage_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOB(self):
            return self.getToken(PlSqlParser.LOB, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def lob_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_itemContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def lob_segname(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_segnameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_segnameContext,i)


        def SECUREFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SECUREFILE)
            else:
                return self.getToken(PlSqlParser.SECUREFILE, i)

        def BASICFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BASICFILE)
            else:
                return self.getToken(PlSqlParser.BASICFILE, i)

        def lob_storage_parameters(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_storage_parametersContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_storage_parametersContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_storage_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_storage_clause" ):
                listener.enterLob_storage_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_storage_clause" ):
                listener.exitLob_storage_clause(self)




    def lob_storage_clause(self):

        localctx = PlSqlParser.Lob_storage_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1598, self.RULE_lob_storage_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14543
            self.match(PlSqlParser.LOB)
            self.state = 14588
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1930,self._ctx)
            if la_ == 1:
                self.state = 14544
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14545
                self.lob_item()
                self.state = 14550
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 14546
                    self.match(PlSqlParser.COMMA)
                    self.state = 14547
                    self.lob_item()
                    self.state = 14552
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14553
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 14554
                self.match(PlSqlParser.STORE)
                self.state = 14555
                self.match(PlSqlParser.AS)
                self.state = 14565 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 14565
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [104, 1562]:
                            self.state = 14556
                            _la = self._input.LA(1)
                            if not(_la==104 or _la==1562):
                                self._errHandler.recoverInline(self)
                            else:
                                self._errHandler.reportMatch(self)
                                self.consume()
                            pass
                        elif token in [2347]:
                            self.state = 14557
                            self.match(PlSqlParser.LEFT_PAREN)
                            self.state = 14561
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            while _la==158 or _la==195 or _la==246 or ((((_la - 366)) & ~0x3f) == 0 and ((1 << (_la - 366)) & 274877906947) != 0) or _la==467 or _la==471 or _la==586 or _la==767 or _la==1010 or _la==1017 or _la==1300 or _la==1505 or _la==1678 or _la==1996:
                                self.state = 14558
                                self.lob_storage_parameters()
                                self.state = 14563
                                self._errHandler.sync(self)
                                _la = self._input.LA(1)

                            self.state = 14564
                            self.match(PlSqlParser.RIGHT_PAREN)
                            pass
                        else:
                            raise NoViableAltException(self)


                    else:
                        raise NoViableAltException(self)
                    self.state = 14567 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,1926,self._ctx)

                pass

            elif la_ == 2:
                self.state = 14569
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14570
                self.lob_item()
                self.state = 14571
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 14572
                self.match(PlSqlParser.STORE)
                self.state = 14573
                self.match(PlSqlParser.AS)
                self.state = 14584 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 14584
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1928,self._ctx)
                        if la_ == 1:
                            self.state = 14574
                            _la = self._input.LA(1)
                            if not(_la==104 or _la==1562):
                                self._errHandler.recoverInline(self)
                            else:
                                self._errHandler.reportMatch(self)
                                self.consume()
                            pass

                        elif la_ == 2:
                            self.state = 14575
                            self.lob_segname()
                            pass

                        elif la_ == 3:
                            self.state = 14576
                            self.match(PlSqlParser.LEFT_PAREN)
                            self.state = 14580
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            while _la==158 or _la==195 or _la==246 or ((((_la - 366)) & ~0x3f) == 0 and ((1 << (_la - 366)) & 274877906947) != 0) or _la==467 or _la==471 or _la==586 or _la==767 or _la==1010 or _la==1017 or _la==1300 or _la==1505 or _la==1678 or _la==1996:
                                self.state = 14577
                                self.lob_storage_parameters()
                                self.state = 14582
                                self._errHandler.sync(self)
                                _la = self._input.LA(1)

                            self.state = 14583
                            self.match(PlSqlParser.RIGHT_PAREN)
                            pass



                    else:
                        raise NoViableAltException(self)
                    self.state = 14586 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,1929,self._ctx)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_lob_storage_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def LOB(self):
            return self.getToken(PlSqlParser.LOB, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def lob_item(self):
            return self.getTypedRuleContext(PlSqlParser.Lob_itemContext,0)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def modify_lob_parameters(self):
            return self.getTypedRuleContext(PlSqlParser.Modify_lob_parametersContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_lob_storage_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_lob_storage_clause" ):
                listener.enterModify_lob_storage_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_lob_storage_clause" ):
                listener.exitModify_lob_storage_clause(self)




    def modify_lob_storage_clause(self):

        localctx = PlSqlParser.Modify_lob_storage_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1600, self.RULE_modify_lob_storage_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14590
            self.match(PlSqlParser.MODIFY)
            self.state = 14591
            self.match(PlSqlParser.LOB)
            self.state = 14592
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 14593
            self.lob_item()
            self.state = 14594
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 14595
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 14596
            self.modify_lob_parameters()
            self.state = 14597
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Modify_lob_parametersContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Storage_clauseContext,i)


        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def REBUILD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.REBUILD)
            else:
                return self.getToken(PlSqlParser.REBUILD, i)

        def FREEPOOLS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FREEPOOLS)
            else:
                return self.getToken(PlSqlParser.FREEPOOLS, i)

        def lob_retention_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_retention_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_retention_clauseContext,i)


        def lob_deduplicate_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_deduplicate_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_deduplicate_clauseContext,i)


        def lob_compression_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_compression_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_compression_clauseContext,i)


        def ENCRYPT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENCRYPT)
            else:
                return self.getToken(PlSqlParser.ENCRYPT, i)

        def encryption_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Encryption_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Encryption_specContext,i)


        def DECRYPT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DECRYPT)
            else:
                return self.getToken(PlSqlParser.DECRYPT, i)

        def CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CACHE)
            else:
                return self.getToken(PlSqlParser.CACHE, i)

        def allocate_extent_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Allocate_extent_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Allocate_extent_clauseContext,i)


        def shrink_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Shrink_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Shrink_clauseContext,i)


        def deallocate_unused_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Deallocate_unused_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Deallocate_unused_clauseContext,i)


        def PCTVERSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTVERSION)
            else:
                return self.getToken(PlSqlParser.PCTVERSION, i)

        def NOCACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOCACHE)
            else:
                return self.getToken(PlSqlParser.NOCACHE, i)

        def READS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.READS)
            else:
                return self.getToken(PlSqlParser.READS, i)

        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_modify_lob_parameters

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModify_lob_parameters" ):
                listener.enterModify_lob_parameters(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModify_lob_parameters" ):
                listener.exitModify_lob_parameters(self)




    def modify_lob_parameters(self):

        localctx = PlSqlParser.Modify_lob_parametersContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1602, self.RULE_modify_lob_parameters)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14623 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 14623
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1933,self._ctx)
                if la_ == 1:
                    self.state = 14599
                    self.storage_clause()
                    pass

                elif la_ == 2:
                    self.state = 14600
                    _la = self._input.LA(1)
                    if not(_la==586 or _la==1300):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 14601
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass

                elif la_ == 3:
                    self.state = 14602
                    self.match(PlSqlParser.REBUILD)
                    self.state = 14603
                    self.match(PlSqlParser.FREEPOOLS)
                    pass

                elif la_ == 4:
                    self.state = 14604
                    self.lob_retention_clause()
                    pass

                elif la_ == 5:
                    self.state = 14605
                    self.lob_deduplicate_clause()
                    pass

                elif la_ == 6:
                    self.state = 14606
                    self.lob_compression_clause()
                    pass

                elif la_ == 7:
                    self.state = 14607
                    self.match(PlSqlParser.ENCRYPT)
                    self.state = 14608
                    self.encryption_spec()
                    pass

                elif la_ == 8:
                    self.state = 14609
                    self.match(PlSqlParser.DECRYPT)
                    pass

                elif la_ == 9:
                    self.state = 14610
                    self.match(PlSqlParser.CACHE)
                    pass

                elif la_ == 10:
                    self.state = 14615
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1931,self._ctx)
                    if la_ == 1:
                        self.state = 14611
                        self.match(PlSqlParser.CACHE)
                        pass

                    elif la_ == 2:
                        self.state = 14612
                        self.match(PlSqlParser.NOCACHE)
                        pass

                    elif la_ == 3:
                        self.state = 14613
                        self.match(PlSqlParser.CACHE)
                        self.state = 14614
                        self.match(PlSqlParser.READS)
                        pass


                    self.state = 14618
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==554 or _la==832 or _la==1057:
                        self.state = 14617
                        self.logging_clause()


                    pass

                elif la_ == 11:
                    self.state = 14620
                    self.allocate_extent_clause()
                    pass

                elif la_ == 12:
                    self.state = 14621
                    self.shrink_clause()
                    pass

                elif la_ == 13:
                    self.state = 14622
                    self.deallocate_unused_clause()
                    pass


                self.state = 14625 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==39 or _la==158 or _la==246 or ((((_la - 356)) & ~0x3f) == 0 and ((1 << (_la - 356)) & 3073) != 0) or _la==471 or _la==586 or _la==767 or _la==1010 or _la==1017 or _la==1300 or _la==1434 or _la==1505 or _la==1602 or _la==1678):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_parametersContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STORAGE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.STORAGE)
            else:
                return self.getToken(PlSqlParser.STORAGE, i)

        def IN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IN)
            else:
                return self.getToken(PlSqlParser.IN, i)

        def ROW(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ROW)
            else:
                return self.getToken(PlSqlParser.ROW, i)

        def CHUNK(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHUNK)
            else:
                return self.getToken(PlSqlParser.CHUNK, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def PCTVERSION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PCTVERSION)
            else:
                return self.getToken(PlSqlParser.PCTVERSION, i)

        def FREEPOOLS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FREEPOOLS)
            else:
                return self.getToken(PlSqlParser.FREEPOOLS, i)

        def lob_retention_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_retention_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_retention_clauseContext,i)


        def lob_deduplicate_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_deduplicate_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_deduplicate_clauseContext,i)


        def lob_compression_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_compression_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_compression_clauseContext,i)


        def ENCRYPT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENCRYPT)
            else:
                return self.getToken(PlSqlParser.ENCRYPT, i)

        def encryption_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Encryption_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Encryption_specContext,i)


        def DECRYPT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DECRYPT)
            else:
                return self.getToken(PlSqlParser.DECRYPT, i)

        def ENABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ENABLE)
            else:
                return self.getToken(PlSqlParser.ENABLE, i)

        def DISABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DISABLE)
            else:
                return self.getToken(PlSqlParser.DISABLE, i)

        def CACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CACHE)
            else:
                return self.getToken(PlSqlParser.CACHE, i)

        def NOCACHE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOCACHE)
            else:
                return self.getToken(PlSqlParser.NOCACHE, i)

        def READS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.READS)
            else:
                return self.getToken(PlSqlParser.READS, i)

        def logging_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logging_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logging_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_parameters

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_parameters" ):
                listener.enterLob_parameters(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_parameters" ):
                listener.exitLob_parameters(self)




    def lob_parameters(self):

        localctx = PlSqlParser.Lob_parametersContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1604, self.RULE_lob_parameters)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14652 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 14652
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [404, 467]:
                        self.state = 14627
                        _la = self._input.LA(1)
                        if not(_la==404 or _la==467):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 14628
                        self.match(PlSqlParser.STORAGE)
                        self.state = 14629
                        self.match(PlSqlParser.IN)
                        self.state = 14630
                        self.match(PlSqlParser.ROW)
                        pass
                    elif token in [195]:
                        self.state = 14631
                        self.match(PlSqlParser.CHUNK)
                        self.state = 14632
                        self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass
                    elif token in [1300]:
                        self.state = 14633
                        self.match(PlSqlParser.PCTVERSION)
                        self.state = 14634
                        self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass
                    elif token in [586]:
                        self.state = 14635
                        self.match(PlSqlParser.FREEPOOLS)
                        self.state = 14636
                        self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass
                    elif token in [1505]:
                        self.state = 14637
                        self.lob_retention_clause()
                        pass
                    elif token in [367, 767]:
                        self.state = 14638
                        self.lob_deduplicate_clause()
                        pass
                    elif token in [246, 1017]:
                        self.state = 14639
                        self.lob_compression_clause()
                        pass
                    elif token in [471]:
                        self.state = 14640
                        self.match(PlSqlParser.ENCRYPT)
                        self.state = 14641
                        self.encryption_spec()
                        pass
                    elif token in [366]:
                        self.state = 14642
                        self.match(PlSqlParser.DECRYPT)
                        pass
                    elif token in [158, 1010]:
                        self.state = 14647
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1935,self._ctx)
                        if la_ == 1:
                            self.state = 14643
                            self.match(PlSqlParser.CACHE)
                            pass

                        elif la_ == 2:
                            self.state = 14644
                            self.match(PlSqlParser.NOCACHE)
                            pass

                        elif la_ == 3:
                            self.state = 14645
                            self.match(PlSqlParser.CACHE)
                            self.state = 14646
                            self.match(PlSqlParser.READS)
                            pass


                        self.state = 14650
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==554 or _la==832 or _la==1057:
                            self.state = 14649
                            self.logging_clause()


                        pass
                    else:
                        raise NoViableAltException(self)


                else:
                    raise NoViableAltException(self)
                self.state = 14654 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1938,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_deduplicate_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEDUPLICATE(self):
            return self.getToken(PlSqlParser.DEDUPLICATE, 0)

        def KEEP_DUPLICATES(self):
            return self.getToken(PlSqlParser.KEEP_DUPLICATES, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_deduplicate_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_deduplicate_clause" ):
                listener.enterLob_deduplicate_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_deduplicate_clause" ):
                listener.exitLob_deduplicate_clause(self)




    def lob_deduplicate_clause(self):

        localctx = PlSqlParser.Lob_deduplicate_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1606, self.RULE_lob_deduplicate_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14656
            _la = self._input.LA(1)
            if not(_la==367 or _la==767):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_compression_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NOCOMPRESS(self):
            return self.getToken(PlSqlParser.NOCOMPRESS, 0)

        def COMPRESS(self):
            return self.getToken(PlSqlParser.COMPRESS, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def MEDIUM(self):
            return self.getToken(PlSqlParser.MEDIUM, 0)

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_compression_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_compression_clause" ):
                listener.enterLob_compression_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_compression_clause" ):
                listener.exitLob_compression_clause(self)




    def lob_compression_clause(self):

        localctx = PlSqlParser.Lob_compression_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1608, self.RULE_lob_compression_clause)
        self._la = 0 # Token type
        try:
            self.state = 14663
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1017]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14658
                self.match(PlSqlParser.NOCOMPRESS)
                pass
            elif token in [246]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14659
                self.match(PlSqlParser.COMPRESS)
                self.state = 14661
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==634 or _la==845 or _la==881:
                    self.state = 14660
                    _la = self._input.LA(1)
                    if not(_la==634 or _la==845 or _la==881):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_retention_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETENTION(self):
            return self.getToken(PlSqlParser.RETENTION, 0)

        def MAX(self):
            return self.getToken(PlSqlParser.MAX, 0)

        def MIN(self):
            return self.getToken(PlSqlParser.MIN, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def AUTO(self):
            return self.getToken(PlSqlParser.AUTO, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_retention_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_retention_clause" ):
                listener.enterLob_retention_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_retention_clause" ):
                listener.exitLob_retention_clause(self)




    def lob_retention_clause(self):

        localctx = PlSqlParser.Lob_retention_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1610, self.RULE_lob_retention_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14665
            self.match(PlSqlParser.RETENTION)
            self.state = 14671
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2306]:
                self.state = 14666
                self.match(PlSqlParser.MAX)
                pass
            elif token in [2309]:
                self.state = 14667
                self.match(PlSqlParser.MIN)
                self.state = 14668
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            elif token in [89]:
                self.state = 14669
                self.match(PlSqlParser.AUTO)
                pass
            elif token in [1071]:
                self.state = 14670
                self.match(PlSqlParser.NONE)
                pass
            elif token in [39, 158, 195, 246, 356, 366, 367, 404, 467, 471, 586, 767, 1010, 1017, 1300, 1434, 1505, 1602, 1678, 1996, 2348]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Encryption_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def IDENTIFIED(self):
            return self.getToken(PlSqlParser.IDENTIFIED, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def REGULAR_ID(self):
            return self.getToken(PlSqlParser.REGULAR_ID, 0)

        def SALT(self):
            return self.getToken(PlSqlParser.SALT, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_encryption_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEncryption_spec" ):
                listener.enterEncryption_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEncryption_spec" ):
                listener.exitEncryption_spec(self)




    def encryption_spec(self):

        localctx = PlSqlParser.Encryption_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1612, self.RULE_encryption_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14675
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 14673
                self.match(PlSqlParser.USING)
                self.state = 14674
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 14680
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 14677
                self.match(PlSqlParser.IDENTIFIED)
                self.state = 14678
                self.match(PlSqlParser.BY)
                self.state = 14679
                self.match(PlSqlParser.REGULAR_ID)


            self.state = 14683
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2343:
                self.state = 14682
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 14689
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1074 or _la==1535:
                self.state = 14686
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1074:
                    self.state = 14685
                    self.match(PlSqlParser.NO)


                self.state = 14688
                self.match(PlSqlParser.SALT)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class TablespaceContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tablespace

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTablespace" ):
                listener.enterTablespace(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTablespace" ):
                listener.exitTablespace(self)




    def tablespace(self):

        localctx = PlSqlParser.TablespaceContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1614, self.RULE_tablespace)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14691
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Varray_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_varray_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVarray_item" ):
                listener.enterVarray_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVarray_item" ):
                listener.exitVarray_item(self)




    def varray_item(self):

        localctx = PlSqlParser.Varray_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1616, self.RULE_varray_item)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14696
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1947,self._ctx)
            if la_ == 1:
                self.state = 14693
                self.id_expression()
                self.state = 14694
                self.match(PlSqlParser.PERIOD)


            self.state = 14701
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1948,self._ctx)
            if la_ == 1:
                self.state = 14698
                self.id_expression()
                self.state = 14699
                self.match(PlSqlParser.PERIOD)


            self.state = 14703
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def object_type_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_type_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_type_col_propertiesContext,i)


        def nested_table_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Nested_table_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Nested_table_col_propertiesContext,i)


        def xmltype_column_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Xmltype_column_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Xmltype_column_propertiesContext,i)


        def varray_col_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Varray_col_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Varray_col_propertiesContext,i)


        def lob_storage_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_storage_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_storage_clauseContext,i)


        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def lob_partition_storage(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_partition_storageContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_partition_storageContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_column_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_properties" ):
                listener.enterColumn_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_properties" ):
                listener.exitColumn_properties(self)




    def column_properties(self):

        localctx = PlSqlParser.Column_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1618, self.RULE_column_properties)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14725 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 14725
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [226]:
                        self.state = 14705
                        self.object_type_col_properties()
                        pass
                    elif token in [959]:
                        self.state = 14706
                        self.nested_table_col_properties()
                        pass
                    elif token in [817, 2171]:
                        self.state = 14709
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [2171]:
                            self.state = 14707
                            self.varray_col_properties()
                            pass
                        elif token in [817]:
                            self.state = 14708
                            self.lob_storage_clause()
                            pass
                        else:
                            raise NoViableAltException(self)

                        self.state = 14722
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,1951,self._ctx)
                        if la_ == 1:
                            self.state = 14711
                            self.match(PlSqlParser.LEFT_PAREN)
                            self.state = 14712
                            self.lob_partition_storage()
                            self.state = 14717
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            while _la==2353:
                                self.state = 14713
                                self.match(PlSqlParser.COMMA)
                                self.state = 14714
                                self.lob_partition_storage()
                                self.state = 14719
                                self._errHandler.sync(self)
                                _la = self._input.LA(1)

                            self.state = 14720
                            self.match(PlSqlParser.RIGHT_PAREN)


                        pass
                    elif token in [2253]:
                        self.state = 14724
                        self.xmltype_column_properties()
                        pass
                    else:
                        raise NoViableAltException(self)


                else:
                    raise NoViableAltException(self)
                self.state = 14727 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,1953,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lob_partition_storageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOB(self):
            return self.getToken(PlSqlParser.LOB, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def lob_item(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_itemContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_itemContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def lob_storage_parameters(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_storage_parametersContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_storage_parametersContext,i)


        def lob_segname(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lob_segnameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lob_segnameContext,i)


        def SECUREFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SECUREFILE)
            else:
                return self.getToken(PlSqlParser.SECUREFILE, i)

        def BASICFILE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BASICFILE)
            else:
                return self.getToken(PlSqlParser.BASICFILE, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lob_partition_storage

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLob_partition_storage" ):
                listener.enterLob_partition_storage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLob_partition_storage" ):
                listener.exitLob_partition_storage(self)




    def lob_partition_storage(self):

        localctx = PlSqlParser.Lob_partition_storageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1620, self.RULE_lob_partition_storage)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14729
            self.match(PlSqlParser.LOB)
            self.state = 14762
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1958,self._ctx)
            if la_ == 1:
                self.state = 14730
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14731
                self.lob_item()

                self.state = 14732
                self.match(PlSqlParser.COMMA)
                self.state = 14733
                self.lob_item()
                self.state = 14735
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 14736
                self.match(PlSqlParser.STORE)
                self.state = 14737
                self.match(PlSqlParser.AS)
                self.state = 14743 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14743
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [104, 1562]:
                        self.state = 14738
                        _la = self._input.LA(1)
                        if not(_la==104 or _la==1562):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [2347]:
                        self.state = 14739
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 14740
                        self.lob_storage_parameters()
                        self.state = 14741
                        self.match(PlSqlParser.RIGHT_PAREN)
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 14745 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==104 or _la==1562 or _la==2347):
                        break

                pass

            elif la_ == 2:
                self.state = 14747
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14748
                self.lob_item()
                self.state = 14749
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 14750
                self.match(PlSqlParser.STORE)
                self.state = 14751
                self.match(PlSqlParser.AS)
                self.state = 14758 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14758
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,1956,self._ctx)
                    if la_ == 1:
                        self.state = 14752
                        _la = self._input.LA(1)
                        if not(_la==104 or _la==1562):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass

                    elif la_ == 2:
                        self.state = 14753
                        self.lob_segname()
                        pass

                    elif la_ == 3:
                        self.state = 14754
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 14755
                        self.lob_storage_parameters()
                        self.state = 14756
                        self.match(PlSqlParser.RIGHT_PAREN)
                        pass


                    self.state = 14760 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 4434553733119) != 0) or _la==2378):
                        break

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Period_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def start_time_column(self):
            return self.getTypedRuleContext(PlSqlParser.Start_time_columnContext,0)


        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def end_time_column(self):
            return self.getTypedRuleContext(PlSqlParser.End_time_columnContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_period_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPeriod_definition" ):
                listener.enterPeriod_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPeriod_definition" ):
                listener.exitPeriod_definition(self)




    def period_definition(self):

        localctx = PlSqlParser.Period_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1622, self.RULE_period_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14764
            if not self.isVersion12():
                from antlr4.error.Errors import FailedPredicateException
                raise FailedPredicateException(self, "self.isVersion12()")
            self.state = 14765
            self.match(PlSqlParser.PERIOD)
            self.state = 14766
            self.match(PlSqlParser.FOR)
            self.state = 14767
            self.column_name()
            self.state = 14774
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 14768
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14769
                self.start_time_column()
                self.state = 14770
                self.match(PlSqlParser.COMMA)
                self.state = 14771
                self.end_time_column()
                self.state = 14772
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Start_time_columnContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_start_time_column

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStart_time_column" ):
                listener.enterStart_time_column(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStart_time_column" ):
                listener.exitStart_time_column(self)




    def start_time_column(self):

        localctx = PlSqlParser.Start_time_columnContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1624, self.RULE_start_time_column)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14776
            self.column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class End_time_columnContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_end_time_column

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnd_time_column" ):
                listener.enterEnd_time_column(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnd_time_column" ):
                listener.exitEnd_time_column(self)




    def end_time_column(self):

        localctx = PlSqlParser.End_time_columnContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1626, self.RULE_end_time_column)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14778
            self.column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def SORT(self):
            return self.getToken(PlSqlParser.SORT, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def identity_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Identity_clauseContext,0)


        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def encryption_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Encryption_specContext,0)


        def inline_ref_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Inline_ref_constraintContext,0)


        def VISIBLE(self):
            return self.getToken(PlSqlParser.VISIBLE, 0)

        def INVISIBLE(self):
            return self.getToken(PlSqlParser.INVISIBLE, 0)

        def datatype(self):
            return self.getTypedRuleContext(PlSqlParser.DatatypeContext,0)


        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def COLLATE(self):
            return self.getToken(PlSqlParser.COLLATE, 0)

        def column_collation_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_collation_nameContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def inline_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inline_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inline_constraintContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_column_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_definition" ):
                listener.enterColumn_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_definition" ):
                listener.exitColumn_definition(self)




    def column_definition(self):

        localctx = PlSqlParser.Column_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1628, self.RULE_column_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14780
            self.column_name()
            self.state = 14789
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1962,self._ctx)
            if la_ == 1:
                self.state = 14783
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,1960,self._ctx)
                if la_ == 1:
                    self.state = 14781
                    self.datatype()
                    pass

                elif la_ == 2:
                    self.state = 14782
                    self.regular_id()
                    pass


                self.state = 14787
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2272:
                    self.state = 14785
                    self.match(PlSqlParser.COLLATE)
                    self.state = 14786
                    self.column_collation_name()




            self.state = 14792
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1626:
                self.state = 14791
                self.match(PlSqlParser.SORT)


            self.state = 14795
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==738 or _la==2194:
                self.state = 14794
                _la = self._input.LA(1)
                if not(_la==738 or _la==2194):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 14804
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [368]:
                self.state = 14797
                self.match(PlSqlParser.DEFAULT)
                self.state = 14800
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1193:
                    self.state = 14798
                    self.match(PlSqlParser.ON)
                    self.state = 14799
                    self.match(PlSqlParser.NULL_)


                self.state = 14802
                self.expression()
                pass
            elif token in [600]:
                self.state = 14803
                self.identity_clause()
                pass
            elif token in [-1, 21, 190, 226, 271, 404, 438, 467, 471, 817, 926, 959, 1138, 1162, 1376, 1450, 1481, 1550, 1590, 2091, 2171, 2212, 2253, 2348, 2353, 2354, 2367]:
                pass
            else:
                pass
            self.state = 14808
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==471:
                self.state = 14806
                self.match(PlSqlParser.ENCRYPT)
                self.state = 14807
                self.encryption_spec()


            self.state = 14816
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1969,self._ctx)
            if la_ == 1:
                self.state = 14811 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14810
                    self.inline_constraint()
                    self.state = 14813 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==190 or _la==271 or _la==1138 or _la==1162 or _la==1376 or _la==1450 or _la==2091):
                        break


            elif la_ == 2:
                self.state = 14815
                self.inline_ref_constraint()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_collation_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_column_collation_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_collation_name" ):
                listener.enterColumn_collation_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_collation_name" ):
                listener.exitColumn_collation_name(self)




    def column_collation_name(self):

        localctx = PlSqlParser.Column_collation_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1630, self.RULE_column_collation_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14818
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identity_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GENERATED(self):
            return self.getToken(PlSqlParser.GENERATED, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def IDENTITY(self):
            return self.getToken(PlSqlParser.IDENTITY, 0)

        def ALWAYS(self):
            return self.getToken(PlSqlParser.ALWAYS, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def identity_options_parentheses(self):
            return self.getTypedRuleContext(PlSqlParser.Identity_options_parenthesesContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_identity_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentity_clause" ):
                listener.enterIdentity_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentity_clause" ):
                listener.exitIdentity_clause(self)




    def identity_clause(self):

        localctx = PlSqlParser.Identity_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1632, self.RULE_identity_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14820
            self.match(PlSqlParser.GENERATED)
            self.state = 14828
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [44]:
                self.state = 14821
                self.match(PlSqlParser.ALWAYS)
                pass
            elif token in [154]:
                self.state = 14822
                self.match(PlSqlParser.BY)
                self.state = 14823
                self.match(PlSqlParser.DEFAULT)
                self.state = 14826
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1193:
                    self.state = 14824
                    self.match(PlSqlParser.ON)
                    self.state = 14825
                    self.match(PlSqlParser.NULL_)


                pass
            elif token in [67]:
                pass
            else:
                pass
            self.state = 14830
            self.match(PlSqlParser.AS)
            self.state = 14831
            self.match(PlSqlParser.IDENTITY)
            self.state = 14833
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==158 or _la==331 or _la==665 or _la==878 or _la==906 or ((((_la - 1010)) & ~0x3f) == 0 and ((1 << (_la - 1010)) & 5066549580922881) != 0) or _la==1077 or _la==1233 or _la==1654 or _la==2347:
                self.state = 14832
                self.identity_options_parentheses()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identity_options_parenthesesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identity_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Identity_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Identity_optionsContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_identity_options_parentheses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentity_options_parentheses" ):
                listener.enterIdentity_options_parentheses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentity_options_parentheses" ):
                listener.exitIdentity_options_parentheses(self)




    def identity_options_parentheses(self):

        localctx = PlSqlParser.Identity_options_parenthesesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1634, self.RULE_identity_options_parentheses)
        self._la = 0 # Token type
        try:
            self.state = 14848
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [158, 331, 665, 878, 906, 1010, 1027, 1059, 1062, 1077, 1233, 1654]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14836 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14835
                    self.identity_options()
                    self.state = 14838 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==158 or _la==331 or _la==665 or _la==878 or _la==906 or ((((_la - 1010)) & ~0x3f) == 0 and ((1 << (_la - 1010)) & 5066549580922881) != 0) or _la==1077 or _la==1233 or _la==1654):
                        break

                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14840
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14842 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14841
                    self.identity_options()
                    self.state = 14844 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==158 or _la==331 or _la==665 or _la==878 or _la==906 or ((((_la - 1010)) & ~0x3f) == 0 and ((1 << (_la - 1010)) & 5066549580922881) != 0) or _la==1077 or _la==1233 or _la==1654):
                        break

                self.state = 14846
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Identity_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START(self):
            return self.getToken(PlSqlParser.START, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def INCREMENT(self):
            return self.getToken(PlSqlParser.INCREMENT, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def MAXVALUE(self):
            return self.getToken(PlSqlParser.MAXVALUE, 0)

        def NOMAXVALUE(self):
            return self.getToken(PlSqlParser.NOMAXVALUE, 0)

        def MINVALUE(self):
            return self.getToken(PlSqlParser.MINVALUE, 0)

        def NOMINVALUE(self):
            return self.getToken(PlSqlParser.NOMINVALUE, 0)

        def CYCLE(self):
            return self.getToken(PlSqlParser.CYCLE, 0)

        def NOCYCLE(self):
            return self.getToken(PlSqlParser.NOCYCLE, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def NOORDER(self):
            return self.getToken(PlSqlParser.NOORDER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_identity_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentity_options" ):
                listener.enterIdentity_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentity_options" ):
                listener.exitIdentity_options(self)




    def identity_options(self):

        localctx = PlSqlParser.Identity_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1636, self.RULE_identity_options)
        try:
            self.state = 14873
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1654]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14850
                self.match(PlSqlParser.START)
                self.state = 14851
                self.match(PlSqlParser.WITH)
                self.state = 14855
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2341, 2342]:
                    self.state = 14852
                    self.numeric()
                    pass
                elif token in [810]:
                    self.state = 14853
                    self.match(PlSqlParser.LIMIT)
                    self.state = 14854
                    self.match(PlSqlParser.VALUE)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [665]:
                self.enterOuterAlt(localctx, 2)
                self.state = 14857
                self.match(PlSqlParser.INCREMENT)
                self.state = 14858
                self.match(PlSqlParser.BY)
                self.state = 14859
                self.numeric()
                pass
            elif token in [878]:
                self.enterOuterAlt(localctx, 3)
                self.state = 14860
                self.match(PlSqlParser.MAXVALUE)
                self.state = 14861
                self.numeric()
                pass
            elif token in [1059]:
                self.enterOuterAlt(localctx, 4)
                self.state = 14862
                self.match(PlSqlParser.NOMAXVALUE)
                pass
            elif token in [906]:
                self.enterOuterAlt(localctx, 5)
                self.state = 14863
                self.match(PlSqlParser.MINVALUE)
                self.state = 14864
                self.numeric()
                pass
            elif token in [1062]:
                self.enterOuterAlt(localctx, 6)
                self.state = 14865
                self.match(PlSqlParser.NOMINVALUE)
                pass
            elif token in [331]:
                self.enterOuterAlt(localctx, 7)
                self.state = 14866
                self.match(PlSqlParser.CYCLE)
                pass
            elif token in [1027]:
                self.enterOuterAlt(localctx, 8)
                self.state = 14867
                self.match(PlSqlParser.NOCYCLE)
                pass
            elif token in [158]:
                self.enterOuterAlt(localctx, 9)
                self.state = 14868
                self.match(PlSqlParser.CACHE)
                self.state = 14869
                self.numeric()
                pass
            elif token in [1010]:
                self.enterOuterAlt(localctx, 10)
                self.state = 14870
                self.match(PlSqlParser.NOCACHE)
                pass
            elif token in [1233]:
                self.enterOuterAlt(localctx, 11)
                self.state = 14871
                self.match(PlSqlParser.ORDER)
                pass
            elif token in [1077]:
                self.enterOuterAlt(localctx, 12)
                self.state = 14872
                self.match(PlSqlParser.NOORDER)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Virtual_column_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def datatype(self):
            return self.getTypedRuleContext(PlSqlParser.DatatypeContext,0)


        def COLLATE(self):
            return self.getToken(PlSqlParser.COLLATE, 0)

        def column_collation_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_collation_nameContext,0)


        def autogenerated_sequence_definition(self):
            return self.getTypedRuleContext(PlSqlParser.Autogenerated_sequence_definitionContext,0)


        def VIRTUAL(self):
            return self.getToken(PlSqlParser.VIRTUAL, 0)

        def evaluation_edition_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Evaluation_edition_clauseContext,0)


        def UNUSABLE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNUSABLE)
            else:
                return self.getToken(PlSqlParser.UNUSABLE, i)

        def BEFORE(self):
            return self.getToken(PlSqlParser.BEFORE, 0)

        def BEGINNING(self):
            return self.getToken(PlSqlParser.BEGINNING, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def inline_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Inline_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Inline_constraintContext,i)


        def VISIBLE(self):
            return self.getToken(PlSqlParser.VISIBLE, 0)

        def INVISIBLE(self):
            return self.getToken(PlSqlParser.INVISIBLE, 0)

        def CURRENT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CURRENT)
            else:
                return self.getToken(PlSqlParser.CURRENT, i)

        def EDITION(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EDITION)
            else:
                return self.getToken(PlSqlParser.EDITION, i)

        def edition_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Edition_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Edition_nameContext,i)


        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_virtual_column_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVirtual_column_definition" ):
                listener.enterVirtual_column_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVirtual_column_definition" ):
                listener.exitVirtual_column_definition(self)




    def virtual_column_definition(self):

        localctx = PlSqlParser.Virtual_column_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1638, self.RULE_virtual_column_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14875
            self.column_name()
            self.state = 14880
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1978,self._ctx)
            if la_ == 1:
                self.state = 14876
                self.datatype()
                self.state = 14877
                self.match(PlSqlParser.COLLATE)
                self.state = 14878
                self.column_collation_name()


            self.state = 14883
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==738 or _la==2194:
                self.state = 14882
                _la = self._input.LA(1)
                if not(_la==738 or _la==2194):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 14886
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==600:
                self.state = 14885
                self.autogenerated_sequence_definition()


            self.state = 14889
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2192:
                self.state = 14888
                self.match(PlSqlParser.VIRTUAL)


            self.state = 14892
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==493:
                self.state = 14891
                self.evaluation_edition_clause()


            self.state = 14902
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1984,self._ctx)
            if la_ == 1:
                self.state = 14894
                self.match(PlSqlParser.UNUSABLE)
                self.state = 14895
                self.match(PlSqlParser.BEFORE)
                self.state = 14900
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [319]:
                    self.state = 14896
                    self.match(PlSqlParser.CURRENT)
                    self.state = 14897
                    self.match(PlSqlParser.EDITION)
                    pass
                elif token in [452]:
                    self.state = 14898
                    self.match(PlSqlParser.EDITION)
                    self.state = 14899
                    self.edition_name()
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 14913
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2110:
                self.state = 14904
                self.match(PlSqlParser.UNUSABLE)
                self.state = 14905
                self.match(PlSqlParser.BEGINNING)
                self.state = 14906
                self.match(PlSqlParser.WITH)
                self.state = 14911
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [319, 1162]:
                    self.state = 14907
                    _la = self._input.LA(1)
                    if not(_la==319 or _la==1162):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 14908
                    self.match(PlSqlParser.EDITION)
                    pass
                elif token in [452]:
                    self.state = 14909
                    self.match(PlSqlParser.EDITION)
                    self.state = 14910
                    self.edition_name()
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 14918
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==190 or _la==271 or _la==1138 or _la==1162 or _la==1376 or _la==1450 or _la==2091:
                self.state = 14915
                self.inline_constraint()
                self.state = 14920
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Autogenerated_sequence_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GENERATED(self):
            return self.getToken(PlSqlParser.GENERATED, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def IDENTITY(self):
            return self.getToken(PlSqlParser.IDENTITY, 0)

        def ALWAYS(self):
            return self.getToken(PlSqlParser.ALWAYS, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def sequence_start_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sequence_start_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sequence_start_clauseContext,i)


        def sequence_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Sequence_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Sequence_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_autogenerated_sequence_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAutogenerated_sequence_definition" ):
                listener.enterAutogenerated_sequence_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAutogenerated_sequence_definition" ):
                listener.exitAutogenerated_sequence_definition(self)




    def autogenerated_sequence_definition(self):

        localctx = PlSqlParser.Autogenerated_sequence_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1640, self.RULE_autogenerated_sequence_definition)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14921
            self.match(PlSqlParser.GENERATED)
            self.state = 14929
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [44]:
                self.state = 14922
                self.match(PlSqlParser.ALWAYS)
                pass
            elif token in [154]:
                self.state = 14923
                self.match(PlSqlParser.BY)
                self.state = 14924
                self.match(PlSqlParser.DEFAULT)
                self.state = 14927
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1193:
                    self.state = 14925
                    self.match(PlSqlParser.ON)
                    self.state = 14926
                    self.match(PlSqlParser.NULL_)


                pass
            elif token in [67]:
                pass
            else:
                pass
            self.state = 14931
            self.match(PlSqlParser.AS)
            self.state = 14932
            self.match(PlSqlParser.IDENTITY)
            self.state = 14942
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 14933
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14938
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==158 or _la==331 or _la==665 or _la==878 or _la==906 or ((((_la - 1010)) & ~0x3f) == 0 and ((1 << (_la - 1010)) & 5066549580922881) != 0) or _la==1077 or _la==1233 or _la==1654:
                    self.state = 14936
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1654]:
                        self.state = 14934
                        self.sequence_start_clause()
                        pass
                    elif token in [158, 331, 665, 878, 906, 1010, 1027, 1059, 1062, 1077, 1233]:
                        self.state = 14935
                        self.sequence_spec()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 14940
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 14941
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Evaluation_edition_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EVALUATE(self):
            return self.getToken(PlSqlParser.EVALUATE, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def edition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Edition_nameContext,0)


        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_evaluation_edition_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEvaluation_edition_clause" ):
                listener.enterEvaluation_edition_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEvaluation_edition_clause" ):
                listener.exitEvaluation_edition_clause(self)




    def evaluation_edition_clause(self):

        localctx = PlSqlParser.Evaluation_edition_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1642, self.RULE_evaluation_edition_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14944
            self.match(PlSqlParser.EVALUATE)
            self.state = 14945
            self.match(PlSqlParser.USING)
            self.state = 14950
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [319, 1162]:
                self.state = 14946
                _la = self._input.LA(1)
                if not(_la==319 or _la==1162):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 14947
                self.match(PlSqlParser.EDITION)
                pass
            elif token in [452]:
                self.state = 14948
                self.match(PlSqlParser.EDITION)
                self.state = 14949
                self.edition_name()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Out_of_line_part_storageContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def partition_name(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_out_of_line_part_storage

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOut_of_line_part_storage" ):
                listener.enterOut_of_line_part_storage(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOut_of_line_part_storage" ):
                listener.exitOut_of_line_part_storage(self)




    def out_of_line_part_storage(self):

        localctx = PlSqlParser.Out_of_line_part_storageContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1644, self.RULE_out_of_line_part_storage)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14952
            self.match(PlSqlParser.PARTITION)
            self.state = 14953
            self.partition_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Nested_table_col_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NESTED(self):
            return self.getToken(PlSqlParser.NESTED, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def AS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.AS)
            else:
                return self.getToken(PlSqlParser.AS, i)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def nested_item(self):
            return self.getTypedRuleContext(PlSqlParser.Nested_itemContext,0)


        def COLUMN_VALUE(self):
            return self.getToken(PlSqlParser.COLUMN_VALUE, 0)

        def substitutable_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Substitutable_column_clauseContext,0)


        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def GLOBAL(self):
            return self.getToken(PlSqlParser.GLOBAL, 0)

        def LOCATOR(self):
            return self.getToken(PlSqlParser.LOCATOR, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def object_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_propertiesContext,i)


        def physical_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Physical_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Physical_propertiesContext,i)


        def column_properties(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_propertiesContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_propertiesContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_nested_table_col_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNested_table_col_properties" ):
                listener.enterNested_table_col_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNested_table_col_properties" ):
                listener.exitNested_table_col_properties(self)




    def nested_table_col_properties(self):

        localctx = PlSqlParser.Nested_table_col_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1646, self.RULE_nested_table_col_properties)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14955
            self.match(PlSqlParser.NESTED)
            self.state = 14956
            self.match(PlSqlParser.TABLE)
            self.state = 14959
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1994,self._ctx)
            if la_ == 1:
                self.state = 14957
                self.nested_item()
                pass

            elif la_ == 2:
                self.state = 14958
                self.match(PlSqlParser.COLUMN_VALUE)
                pass


            self.state = 14962
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==455 or _la==740 or _la==1138 or _la==1696:
                self.state = 14961
                self.substitutable_column_clause()


            self.state = 14965
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==602 or _la==821:
                self.state = 14964
                _la = self._input.LA(1)
                if not(_la==602 or _la==821):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 14967
            self.match(PlSqlParser.STORE)
            self.state = 14968
            self.match(PlSqlParser.AS)
            self.state = 14969
            self.tableview_name()
            self.state = 14983
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,1999,self._ctx)
            if la_ == 1:
                self.state = 14970
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 14977 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 14977
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2347]:
                        self.state = 14971
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 14972
                        self.object_properties()
                        self.state = 14973
                        self.match(PlSqlParser.RIGHT_PAREN)
                        pass
                    elif token in [210, 246, 247, 523, 554, 701, 832, 877, 1017, 1057, 1236, 1296, 1299, 1567, 1678, 1996]:
                        self.state = 14975
                        self.physical_properties()
                        pass
                    elif token in [226, 817, 959, 2171, 2253]:
                        self.state = 14976
                        self.column_properties()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 14979 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (((((_la - 210)) & ~0x3f) == 0 and ((1 << (_la - 210)) & 206158495745) != 0) or _la==523 or _la==554 or _la==701 or ((((_la - 817)) & ~0x3f) == 0 and ((1 << (_la - 817)) & 1152921504606879745) != 0) or _la==959 or _la==1017 or _la==1057 or ((((_la - 1236)) & ~0x3f) == 0 and ((1 << (_la - 1236)) & -8070450532247928831) != 0) or _la==1567 or _la==1678 or _la==1996 or _la==2171 or _la==2253 or _la==2347):
                        break

                self.state = 14981
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 14990
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1508:
                self.state = 14985
                self.match(PlSqlParser.RETURN)
                self.state = 14987
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 14986
                    self.match(PlSqlParser.AS)


                self.state = 14989
                _la = self._input.LA(1)
                if not(_la==825 or _la==2165):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Nested_itemContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_nested_item

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNested_item" ):
                listener.enterNested_item(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNested_item" ):
                listener.exitNested_item(self)




    def nested_item(self):

        localctx = PlSqlParser.Nested_itemContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1648, self.RULE_nested_item)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 14992
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Substitutable_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ELEMENT(self):
            return self.getToken(PlSqlParser.ELEMENT, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def SUBSTITUTABLE(self):
            return self.getToken(PlSqlParser.SUBSTITUTABLE, 0)

        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_substitutable_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubstitutable_column_clause" ):
                listener.enterSubstitutable_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubstitutable_column_clause" ):
                listener.exitSubstitutable_column_clause(self)




    def substitutable_column_clause(self):

        localctx = PlSqlParser.Substitutable_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1650, self.RULE_substitutable_column_clause)
        self._la = 0 # Token type
        try:
            self.state = 15013
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [455, 740]:
                self.enterOuterAlt(localctx, 1)
                self.state = 14995
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==455:
                    self.state = 14994
                    self.match(PlSqlParser.ELEMENT)


                self.state = 14997
                self.match(PlSqlParser.IS)
                self.state = 14998
                self.match(PlSqlParser.OF)
                self.state = 15000
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2076:
                    self.state = 14999
                    self.match(PlSqlParser.TYPE)


                self.state = 15002
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15003
                self.type_name()
                self.state = 15004
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1138, 1696]:
                self.enterOuterAlt(localctx, 2)
                self.state = 15007
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1138:
                    self.state = 15006
                    self.match(PlSqlParser.NOT)


                self.state = 15009
                self.match(PlSqlParser.SUBSTITUTABLE)
                self.state = 15010
                self.match(PlSqlParser.AT)
                self.state = 15011
                self.match(PlSqlParser.ALL)
                self.state = 15012
                self.match(PlSqlParser.LEVELS)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_name" ):
                listener.enterPartition_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_name" ):
                listener.exitPartition_name(self)




    def partition_name(self):

        localctx = PlSqlParser.Partition_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1652, self.RULE_partition_name)
        try:
            self.state = 15017
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 15015
                self.regular_id()
                pass
            elif token in [2344]:
                self.enterOuterAlt(localctx, 2)
                self.state = 15016
                self.match(PlSqlParser.DELIMITED_ID)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Supplemental_logging_propsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUPPLEMENTAL(self):
            return self.getToken(PlSqlParser.SUPPLEMENTAL, 0)

        def LOG(self):
            return self.getToken(PlSqlParser.LOG, 0)

        def supplemental_log_grp_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_log_grp_clauseContext,0)


        def supplemental_id_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Supplemental_id_key_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_supplemental_logging_props

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSupplemental_logging_props" ):
                listener.enterSupplemental_logging_props(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSupplemental_logging_props" ):
                listener.exitSupplemental_logging_props(self)




    def supplemental_logging_props(self):

        localctx = PlSqlParser.Supplemental_logging_propsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1654, self.RULE_supplemental_logging_props)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15019
            self.match(PlSqlParser.SUPPLEMENTAL)
            self.state = 15020
            self.match(PlSqlParser.LOG)
            self.state = 15023
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [609]:
                self.state = 15021
                self.supplemental_log_grp_clause()
                pass
            elif token in [334]:
                self.state = 15022
                self.supplemental_id_key_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_or_attributeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_column_or_attribute

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_or_attribute" ):
                listener.enterColumn_or_attribute(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_or_attribute" ):
                listener.exitColumn_or_attribute(self)




    def column_or_attribute(self):

        localctx = PlSqlParser.Column_or_attributeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1656, self.RULE_column_or_attribute)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15025
            self.regular_id()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_type_col_propertiesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.column = None # Regular_idContext

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def substitutable_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Substitutable_column_clauseContext,0)


        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_object_type_col_properties

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_type_col_properties" ):
                listener.enterObject_type_col_properties(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_type_col_properties" ):
                listener.exitObject_type_col_properties(self)




    def object_type_col_properties(self):

        localctx = PlSqlParser.Object_type_col_propertiesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1658, self.RULE_object_type_col_properties)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15027
            self.match(PlSqlParser.COLUMN)
            self.state = 15028
            localctx.column = self.regular_id()
            self.state = 15029
            self.substitutable_column_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Constraint_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def out_of_line_constraint(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Out_of_line_constraintContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Out_of_line_constraintContext,i)


        def out_of_line_ref_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Out_of_line_ref_constraintContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def constraint_state(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_stateContext,0)


        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def old_constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Old_constraint_nameContext,0)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def new_constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.New_constraint_nameContext,0)


        def drop_constraint_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Drop_constraint_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Drop_constraint_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_constraint_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstraint_clauses" ):
                listener.enterConstraint_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstraint_clauses" ):
                listener.exitConstraint_clauses(self)




    def constraint_clauses(self):

        localctx = PlSqlParser.Constraint_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1660, self.RULE_constraint_clauses)
        self._la = 0 # Token type
        try:
            self.state = 15085
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2015,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15031
                self.match(PlSqlParser.ADD)
                self.state = 15032
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15042
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2009,self._ctx)
                if la_ == 1:
                    self.state = 15033
                    self.out_of_line_constraint()
                    self.state = 15038
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 15034
                        self.match(PlSqlParser.COMMA)
                        self.state = 15035
                        self.out_of_line_constraint()
                        self.state = 15040
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    pass

                elif la_ == 2:
                    self.state = 15041
                    self.out_of_line_ref_constraint()
                    pass


                self.state = 15044
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15046
                self.match(PlSqlParser.ADD)
                self.state = 15049
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2010,self._ctx)
                if la_ == 1:
                    self.state = 15047
                    self.out_of_line_constraint()
                    pass

                elif la_ == 2:
                    self.state = 15048
                    self.out_of_line_ref_constraint()
                    pass


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15051
                self.match(PlSqlParser.MODIFY)
                self.state = 15068
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [271]:
                    self.state = 15052
                    self.match(PlSqlParser.CONSTRAINT)
                    self.state = 15053
                    self.constraint_name()
                    pass
                elif token in [1376]:
                    self.state = 15054
                    self.match(PlSqlParser.PRIMARY)
                    self.state = 15055
                    self.match(PlSqlParser.KEY)
                    pass
                elif token in [2091]:
                    self.state = 15056
                    self.match(PlSqlParser.UNIQUE)
                    self.state = 15057
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 15058
                    self.column_name()
                    self.state = 15063
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 15059
                        self.match(PlSqlParser.COMMA)
                        self.state = 15060
                        self.column_name()
                        self.state = 15065
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 15066
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 15070
                self.constraint_state()
                self.state = 15072
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==171:
                    self.state = 15071
                    self.match(PlSqlParser.CASCADE)


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 15074
                self.match(PlSqlParser.RENAME)
                self.state = 15075
                self.match(PlSqlParser.CONSTRAINT)
                self.state = 15076
                self.old_constraint_name()
                self.state = 15077
                self.match(PlSqlParser.TO)
                self.state = 15078
                self.new_constraint_name()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 15081 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 15080
                        self.drop_constraint_clause()

                    else:
                        raise NoViableAltException(self)
                    self.state = 15083 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2014,self._ctx)

                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Old_constraint_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_old_constraint_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOld_constraint_name" ):
                listener.enterOld_constraint_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOld_constraint_name" ):
                listener.exitOld_constraint_name(self)




    def old_constraint_name(self):

        localctx = PlSqlParser.Old_constraint_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1662, self.RULE_old_constraint_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15087
            self.constraint_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class New_constraint_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_new_constraint_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNew_constraint_name" ):
                listener.enterNew_constraint_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNew_constraint_name" ):
                listener.exitNew_constraint_name(self)




    def new_constraint_name(self):

        localctx = PlSqlParser.New_constraint_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1664, self.RULE_new_constraint_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15089
            self.constraint_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_constraint_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DROP)
            else:
                return self.getToken(PlSqlParser.DROP, i)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.KEY)
            else:
                return self.getToken(PlSqlParser.KEY, i)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_constraint_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_constraint_clause" ):
                listener.enterDrop_constraint_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_constraint_clause" ):
                listener.exitDrop_constraint_clause(self)




    def drop_constraint_clause(self):

        localctx = PlSqlParser.Drop_constraint_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1666, self.RULE_drop_constraint_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15091
            self.match(PlSqlParser.DROP)
            self.state = 15108
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1376]:
                self.state = 15092
                self.match(PlSqlParser.PRIMARY)
                self.state = 15093
                self.match(PlSqlParser.KEY)
                pass
            elif token in [2091]:
                self.state = 15094
                self.match(PlSqlParser.UNIQUE)
                self.state = 15095
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15096
                self.column_name()
                self.state = 15101
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 15097
                    self.match(PlSqlParser.COMMA)
                    self.state = 15098
                    self.column_name()
                    self.state = 15103
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 15104
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [271]:
                self.state = 15106
                self.match(PlSqlParser.CONSTRAINT)
                self.state = 15107
                self.constraint_name()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15111
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==171:
                self.state = 15110
                self.match(PlSqlParser.CASCADE)


            self.state = 15115
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2019,self._ctx)
            if la_ == 1:
                self.state = 15113
                _la = self._input.LA(1)
                if not(_la==438 or _la==770):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 15114
                self.match(PlSqlParser.INDEX)


            self.state = 15118
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1190:
                self.state = 15117
                self.match(PlSqlParser.ONLINE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def add_constraint_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Add_constraint_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Add_constraint_clauseContext,i)


        def CONSTRAINT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CONSTRAINT)
            else:
                return self.getToken(PlSqlParser.CONSTRAINT, i)

        def constraint_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Constraint_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_constraint" ):
                listener.enterAdd_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_constraint" ):
                listener.exitAdd_constraint(self)




    def add_constraint(self):

        localctx = PlSqlParser.Add_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1668, self.RULE_add_constraint)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15120
            self.match(PlSqlParser.ADD)
            self.state = 15123
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==271:
                self.state = 15121
                self.match(PlSqlParser.CONSTRAINT)
                self.state = 15122
                self.constraint_name()


            self.state = 15125
            self.add_constraint_clause()
            self.state = 15132 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 15126
                self.match(PlSqlParser.COMMA)
                self.state = 15129
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==271:
                    self.state = 15127
                    self.match(PlSqlParser.CONSTRAINT)
                    self.state = 15128
                    self.constraint_name()


                self.state = 15131
                self.add_constraint_clause()
                self.state = 15134 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==2353):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_constraint_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def primary_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Primary_key_clauseContext,0)


        def foreign_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Foreign_key_clauseContext,0)


        def unique_key_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Unique_key_clauseContext,0)


        def check_constraint(self):
            return self.getTypedRuleContext(PlSqlParser.Check_constraintContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_constraint_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_constraint_clause" ):
                listener.enterAdd_constraint_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_constraint_clause" ):
                listener.exitAdd_constraint_clause(self)




    def add_constraint_clause(self):

        localctx = PlSqlParser.Add_constraint_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1670, self.RULE_add_constraint_clause)
        try:
            self.state = 15140
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1376]:
                self.enterOuterAlt(localctx, 1)
                self.state = 15136
                self.primary_key_clause()
                pass
            elif token in [578]:
                self.enterOuterAlt(localctx, 2)
                self.state = 15137
                self.foreign_key_clause()
                pass
            elif token in [2091]:
                self.enterOuterAlt(localctx, 3)
                self.state = 15138
                self.unique_key_clause()
                pass
            elif token in [190]:
                self.enterOuterAlt(localctx, 4)
                self.state = 15139
                self.check_constraint()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Check_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHECK(self):
            return self.getToken(PlSqlParser.CHECK, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_check_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCheck_constraint" ):
                listener.enterCheck_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCheck_constraint" ):
                listener.exitCheck_constraint(self)




    def check_constraint(self):

        localctx = PlSqlParser.Check_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1672, self.RULE_check_constraint)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15142
            self.match(PlSqlParser.CHECK)
            self.state = 15143
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 15144
            self.condition()
            self.state = 15145
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 15147
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2025,self._ctx)
            if la_ == 1:
                self.state = 15146
                self.match(PlSqlParser.DISABLE)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Drop_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_drop_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDrop_constraint" ):
                listener.enterDrop_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDrop_constraint" ):
                listener.exitDrop_constraint(self)




    def drop_constraint(self):

        localctx = PlSqlParser.Drop_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1674, self.RULE_drop_constraint)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15149
            self.match(PlSqlParser.DROP)
            self.state = 15150
            self.match(PlSqlParser.CONSTRAINT)
            self.state = 15151
            self.constraint_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Enable_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_enable_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterEnable_constraint" ):
                listener.enterEnable_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitEnable_constraint" ):
                listener.exitEnable_constraint(self)




    def enable_constraint(self):

        localctx = PlSqlParser.Enable_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1676, self.RULE_enable_constraint)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15153
            self.match(PlSqlParser.ENABLE)
            self.state = 15154
            self.match(PlSqlParser.CONSTRAINT)
            self.state = 15155
            self.constraint_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Disable_constraintContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_disable_constraint

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDisable_constraint" ):
                listener.enterDisable_constraint(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDisable_constraint" ):
                listener.exitDisable_constraint(self)




    def disable_constraint(self):

        localctx = PlSqlParser.Disable_constraintContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1678, self.RULE_disable_constraint)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15157
            self.match(PlSqlParser.DISABLE)
            self.state = 15158
            self.match(PlSqlParser.CONSTRAINT)
            self.state = 15159
            self.constraint_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Foreign_key_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOREIGN(self):
            return self.getToken(PlSqlParser.FOREIGN, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def references_clause(self):
            return self.getTypedRuleContext(PlSqlParser.References_clauseContext,0)


        def on_delete_clause(self):
            return self.getTypedRuleContext(PlSqlParser.On_delete_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_foreign_key_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterForeign_key_clause" ):
                listener.enterForeign_key_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitForeign_key_clause" ):
                listener.exitForeign_key_clause(self)




    def foreign_key_clause(self):

        localctx = PlSqlParser.Foreign_key_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1680, self.RULE_foreign_key_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15161
            self.match(PlSqlParser.FOREIGN)
            self.state = 15162
            self.match(PlSqlParser.KEY)
            self.state = 15163
            self.paren_column_list()
            self.state = 15164
            self.references_clause()
            self.state = 15166
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1193:
                self.state = 15165
                self.on_delete_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class References_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_references_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReferences_clause" ):
                listener.enterReferences_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReferences_clause" ):
                listener.exitReferences_clause(self)




    def references_clause(self):

        localctx = PlSqlParser.References_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1682, self.RULE_references_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15168
            self.match(PlSqlParser.REFERENCES)
            self.state = 15169
            self.tableview_name()
            self.state = 15171
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 15170
                self.paren_column_list()


            self.state = 15180
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2029,self._ctx)
            if la_ == 1:
                self.state = 15173
                self.match(PlSqlParser.ON)
                self.state = 15174
                self.match(PlSqlParser.DELETE)
                self.state = 15178
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [171]:
                    self.state = 15175
                    self.match(PlSqlParser.CASCADE)
                    pass
                elif token in [1590]:
                    self.state = 15176
                    self.match(PlSqlParser.SET)
                    self.state = 15177
                    self.match(PlSqlParser.NULL_)
                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class On_delete_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_on_delete_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOn_delete_clause" ):
                listener.enterOn_delete_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOn_delete_clause" ):
                listener.exitOn_delete_clause(self)




    def on_delete_clause(self):

        localctx = PlSqlParser.On_delete_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1684, self.RULE_on_delete_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15182
            self.match(PlSqlParser.ON)
            self.state = 15183
            self.match(PlSqlParser.DELETE)
            self.state = 15187
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [171]:
                self.state = 15184
                self.match(PlSqlParser.CASCADE)
                pass
            elif token in [1590]:
                self.state = 15185
                self.match(PlSqlParser.SET)
                self.state = 15186
                self.match(PlSqlParser.NULL_)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unique_key_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def using_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_index_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_unique_key_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnique_key_clause" ):
                listener.enterUnique_key_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnique_key_clause" ):
                listener.exitUnique_key_clause(self)




    def unique_key_clause(self):

        localctx = PlSqlParser.Unique_key_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1686, self.RULE_unique_key_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15189
            self.match(PlSqlParser.UNIQUE)
            self.state = 15190
            self.paren_column_list()
            self.state = 15192
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 15191
                self.using_index_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Primary_key_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def using_index_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_index_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_primary_key_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrimary_key_clause" ):
                listener.enterPrimary_key_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrimary_key_clause" ):
                listener.exitPrimary_key_clause(self)




    def primary_key_clause(self):

        localctx = PlSqlParser.Primary_key_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1688, self.RULE_primary_key_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15194
            self.match(PlSqlParser.PRIMARY)
            self.state = 15195
            self.match(PlSqlParser.KEY)
            self.state = 15196
            self.paren_column_list()
            self.state = 15198
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 15197
                self.using_index_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Anonymous_blockContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def seq_of_declare_specs(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_declare_specsContext,0)


        def EXCEPTION(self):
            return self.getToken(PlSqlParser.EXCEPTION, 0)

        def exception_handler(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Exception_handlerContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Exception_handlerContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_anonymous_block

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAnonymous_block" ):
                listener.enterAnonymous_block(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAnonymous_block" ):
                listener.exitAnonymous_block(self)




    def anonymous_block(self):

        localctx = PlSqlParser.Anonymous_blockContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1690, self.RULE_anonymous_block)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15202
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==361:
                self.state = 15200
                self.match(PlSqlParser.DECLARE)
                self.state = 15201
                self.seq_of_declare_specs()


            self.state = 15204
            self.match(PlSqlParser.BEGIN)
            self.state = 15205
            self.seq_of_statements()
            self.state = 15212
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==498:
                self.state = 15206
                self.match(PlSqlParser.EXCEPTION)
                self.state = 15208 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 15207
                    self.exception_handler()
                    self.state = 15210 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==2204):
                        break



            self.state = 15214
            self.match(PlSqlParser.END)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Invoker_rights_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AUTHID(self):
            return self.getToken(PlSqlParser.AUTHID, 0)

        def CURRENT_USER(self):
            return self.getToken(PlSqlParser.CURRENT_USER, 0)

        def DEFINER(self):
            return self.getToken(PlSqlParser.DEFINER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_invoker_rights_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInvoker_rights_clause" ):
                listener.enterInvoker_rights_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInvoker_rights_clause" ):
                listener.exitInvoker_rights_clause(self)




    def invoker_rights_clause(self):

        localctx = PlSqlParser.Invoker_rights_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1692, self.RULE_invoker_rights_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15216
            self.match(PlSqlParser.AUTHID)
            self.state = 15217
            _la = self._input.LA(1)
            if not(_la==324 or _la==376):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Call_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def java_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Java_specContext,0)


        def c_spec(self):
            return self.getTypedRuleContext(PlSqlParser.C_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_call_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCall_spec" ):
                listener.enterCall_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCall_spec" ):
                listener.exitCall_spec(self)




    def call_spec(self):

        localctx = PlSqlParser.Call_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1694, self.RULE_call_spec)
        try:
            self.state = 15221
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2036,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15219
                self.java_spec()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15220
                self.c_spec()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Java_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LANGUAGE(self):
            return self.getToken(PlSqlParser.LANGUAGE, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_java_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJava_spec" ):
                listener.enterJava_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJava_spec" ):
                listener.exitJava_spec(self)




    def java_spec(self):

        localctx = PlSqlParser.Java_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1696, self.RULE_java_spec)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15223
            self.match(PlSqlParser.LANGUAGE)
            self.state = 15224
            self.match(PlSqlParser.JAVA)
            self.state = 15225
            self.match(PlSqlParser.NAME)
            self.state = 15226
            self.match(PlSqlParser.CHAR_STRING)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class C_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LANGUAGE(self):
            return self.getToken(PlSqlParser.LANGUAGE, 0)

        def C_LETTER(self):
            return self.getToken(PlSqlParser.C_LETTER, 0)

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def c_agent_in_clause(self):
            return self.getTypedRuleContext(PlSqlParser.C_agent_in_clauseContext,0)


        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def c_parameters_clause(self):
            return self.getTypedRuleContext(PlSqlParser.C_parameters_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_c_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterC_spec" ):
                listener.enterC_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitC_spec" ):
                listener.exitC_spec(self)




    def c_spec(self):

        localctx = PlSqlParser.C_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1698, self.RULE_c_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15231
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [777]:
                self.state = 15228
                self.match(PlSqlParser.LANGUAGE)
                self.state = 15229
                self.match(PlSqlParser.C_LETTER)
                pass
            elif token in [523]:
                self.state = 15230
                self.match(PlSqlParser.EXTERNAL)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15244
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [943]:
                self.state = 15233
                self.match(PlSqlParser.NAME)
                self.state = 15234
                self.id_expression()
                self.state = 15235
                self.match(PlSqlParser.LIBRARY)
                self.state = 15236
                self.identifier()
                pass
            elif token in [801]:
                self.state = 15238
                self.match(PlSqlParser.LIBRARY)
                self.state = 15239
                self.identifier()
                self.state = 15242
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==943:
                    self.state = 15240
                    self.match(PlSqlParser.NAME)
                    self.state = 15241
                    self.id_expression()


                pass
            else:
                raise NoViableAltException(self)

            self.state = 15247
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==34:
                self.state = 15246
                self.c_agent_in_clause()


            self.state = 15251
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 15249
                self.match(PlSqlParser.WITH)
                self.state = 15250
                self.match(PlSqlParser.CONTEXT)


            self.state = 15254
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1263:
                self.state = 15253
                self.c_parameters_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class C_agent_in_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AGENT(self):
            return self.getToken(PlSqlParser.AGENT, 0)

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_c_agent_in_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterC_agent_in_clause" ):
                listener.enterC_agent_in_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitC_agent_in_clause" ):
                listener.exitC_agent_in_clause(self)




    def c_agent_in_clause(self):

        localctx = PlSqlParser.C_agent_in_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1700, self.RULE_c_agent_in_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15256
            self.match(PlSqlParser.AGENT)
            self.state = 15257
            self.match(PlSqlParser.IN)
            self.state = 15258
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 15259
            self.expressions()
            self.state = 15260
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class C_parameters_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def c_external_parameter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.C_external_parameterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.C_external_parameterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_c_parameters_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterC_parameters_clause" ):
                listener.enterC_parameters_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitC_parameters_clause" ):
                listener.exitC_parameters_clause(self)




    def c_parameters_clause(self):

        localctx = PlSqlParser.C_parameters_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1702, self.RULE_c_parameters_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15262
            self.match(PlSqlParser.PARAMETERS)
            self.state = 15263
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 15264
            self.c_external_parameter()
            self.state = 15269
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 15265
                self.match(PlSqlParser.COMMA)
                self.state = 15266
                self.c_external_parameter()
                self.state = 15271
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 15272
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class C_external_parameterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.external_datatype = None # Regular_idContext

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def SELF(self):
            return self.getToken(PlSqlParser.SELF, 0)

        def TDO(self):
            return self.getToken(PlSqlParser.TDO, 0)

        def c_property(self):
            return self.getTypedRuleContext(PlSqlParser.C_propertyContext,0)


        def parameter_name(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,0)


        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def REFERENCE(self):
            return self.getToken(PlSqlParser.REFERENCE, 0)

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_c_external_parameter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterC_external_parameter" ):
                listener.enterC_external_parameter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitC_external_parameter" ):
                listener.exitC_external_parameter(self)




    def c_external_parameter(self):

        localctx = PlSqlParser.C_external_parameterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1704, self.RULE_c_external_parameter)
        self._la = 0 # Token type
        try:
            self.state = 15294
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2049,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15274
                self.match(PlSqlParser.CONTEXT)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15275
                self.match(PlSqlParser.SELF)
                self.state = 15278
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2334]:
                    self.state = 15276
                    self.match(PlSqlParser.TDO)
                    pass
                elif token in [691, 796, 2326, 2327, 2328, 2330]:
                    self.state = 15277
                    self.c_property()
                    pass
                elif token in [2348, 2353]:
                    pass
                else:
                    pass
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15282
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2045,self._ctx)
                if la_ == 1:
                    self.state = 15280
                    self.parameter_name()
                    pass

                elif la_ == 2:
                    self.state = 15281
                    self.match(PlSqlParser.RETURN)
                    pass


                self.state = 15285
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2046,self._ctx)
                if la_ == 1:
                    self.state = 15284
                    self.c_property()


                self.state = 15289
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==154:
                    self.state = 15287
                    self.match(PlSqlParser.BY)
                    self.state = 15288
                    self.match(PlSqlParser.REFERENCE)


                self.state = 15292
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 36507222015) != 0) or _la==2378:
                    self.state = 15291
                    localctx.external_datatype = self.regular_id()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class C_propertyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INDICATOR(self):
            return self.getToken(PlSqlParser.INDICATOR, 0)

        def STRUCT(self):
            return self.getToken(PlSqlParser.STRUCT, 0)

        def TDO(self):
            return self.getToken(PlSqlParser.TDO, 0)

        def LENGTH(self):
            return self.getToken(PlSqlParser.LENGTH, 0)

        def DURATION(self):
            return self.getToken(PlSqlParser.DURATION, 0)

        def MAXLEN(self):
            return self.getToken(PlSqlParser.MAXLEN, 0)

        def CHARSETID(self):
            return self.getToken(PlSqlParser.CHARSETID, 0)

        def CHARSETFORM(self):
            return self.getToken(PlSqlParser.CHARSETFORM, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_c_property

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterC_property" ):
                listener.enterC_property(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitC_property" ):
                listener.exitC_property(self)




    def c_property(self):

        localctx = PlSqlParser.C_propertyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1706, self.RULE_c_property)
        self._la = 0 # Token type
        try:
            self.state = 15305
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [691]:
                self.enterOuterAlt(localctx, 1)
                self.state = 15296
                self.match(PlSqlParser.INDICATOR)
                self.state = 15298
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2050,self._ctx)
                if la_ == 1:
                    self.state = 15297
                    _la = self._input.LA(1)
                    if not(_la==2333 or _la==2334):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            elif token in [796]:
                self.enterOuterAlt(localctx, 2)
                self.state = 15300
                self.match(PlSqlParser.LENGTH)
                pass
            elif token in [2328]:
                self.enterOuterAlt(localctx, 3)
                self.state = 15301
                self.match(PlSqlParser.DURATION)
                pass
            elif token in [2330]:
                self.enterOuterAlt(localctx, 4)
                self.state = 15302
                self.match(PlSqlParser.MAXLEN)
                pass
            elif token in [2326]:
                self.enterOuterAlt(localctx, 5)
                self.state = 15303
                self.match(PlSqlParser.CHARSETID)
                pass
            elif token in [2327]:
                self.enterOuterAlt(localctx, 6)
                self.state = 15304
                self.match(PlSqlParser.CHARSETFORM)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ParameterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def parameter_name(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def default_value_part(self):
            return self.getTypedRuleContext(PlSqlParser.Default_value_partContext,0)


        def IN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IN)
            else:
                return self.getToken(PlSqlParser.IN, i)

        def OUT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OUT)
            else:
                return self.getToken(PlSqlParser.OUT, i)

        def INOUT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INOUT)
            else:
                return self.getToken(PlSqlParser.INOUT, i)

        def NOCOPY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NOCOPY)
            else:
                return self.getToken(PlSqlParser.NOCOPY, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_parameter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParameter" ):
                listener.enterParameter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParameter" ):
                listener.exitParameter(self)




    def parameter(self):

        localctx = PlSqlParser.ParameterContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1708, self.RULE_parameter)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15307
            self.parameter_name()
            self.state = 15311
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2052,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 15308
                    _la = self._input.LA(1)
                    if not(_la==696 or _la==708 or _la==1023 or _la==1247):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume() 
                self.state = 15313
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2052,self._ctx)

            self.state = 15315
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474976841729) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -134217793) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 15314
                self.type_spec()


            self.state = 15318
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368 or _la==2356:
                self.state = 15317
                self.default_value_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Default_value_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def ASSIGN_OP(self):
            return self.getToken(PlSqlParser.ASSIGN_OP, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_default_value_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDefault_value_part" ):
                listener.enterDefault_value_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDefault_value_part" ):
                listener.exitDefault_value_part(self)




    def default_value_part(self):

        localctx = PlSqlParser.Default_value_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1710, self.RULE_default_value_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15320
            _la = self._input.LA(1)
            if not(_la==368 or _la==2356):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 15321
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Seq_of_declare_specsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def declare_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Declare_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Declare_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_seq_of_declare_specs

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSeq_of_declare_specs" ):
                listener.enterSeq_of_declare_specs(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSeq_of_declare_specs" ):
                listener.exitSeq_of_declare_specs(self)




    def seq_of_declare_specs(self):

        localctx = PlSqlParser.Seq_of_declare_specsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1712, self.RULE_seq_of_declare_specs)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15324 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 15323
                    self.declare_spec()

                else:
                    raise NoViableAltException(self)
                self.state = 15326 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2055,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Declare_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def pragma_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Pragma_declarationContext,0)


        def exception_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Exception_declarationContext,0)


        def procedure_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_specContext,0)


        def function_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Function_specContext,0)


        def variable_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Variable_declarationContext,0)


        def subtype_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Subtype_declarationContext,0)


        def cursor_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_declarationContext,0)


        def type_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Type_declarationContext,0)


        def procedure_body(self):
            return self.getTypedRuleContext(PlSqlParser.Procedure_bodyContext,0)


        def function_body(self):
            return self.getTypedRuleContext(PlSqlParser.Function_bodyContext,0)


        def selection_directive(self):
            return self.getTypedRuleContext(PlSqlParser.Selection_directiveContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_declare_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDeclare_spec" ):
                listener.enterDeclare_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDeclare_spec" ):
                listener.exitDeclare_spec(self)




    def declare_spec(self):

        localctx = PlSqlParser.Declare_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1714, self.RULE_declare_spec)
        try:
            self.state = 15339
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2056,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15328
                self.pragma_declaration()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15329
                self.exception_declaration()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15330
                self.procedure_spec()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 15331
                self.function_spec()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 15332
                self.variable_declaration()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 15333
                self.subtype_declaration()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 15334
                self.cursor_declaration()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 15335
                self.type_declaration()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 15336
                self.procedure_body()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 15337
                self.function_body()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 15338
                self.selection_directive()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Variable_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def CONSTANT(self):
            return self.getToken(PlSqlParser.CONSTANT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def default_value_part(self):
            return self.getTypedRuleContext(PlSqlParser.Default_value_partContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_variable_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVariable_declaration" ):
                listener.enterVariable_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVariable_declaration" ):
                listener.exitVariable_declaration(self)




    def variable_declaration(self):

        localctx = PlSqlParser.Variable_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1716, self.RULE_variable_declaration)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15341
            self.identifier()
            self.state = 15343
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2057,self._ctx)
            if la_ == 1:
                self.state = 15342
                self.match(PlSqlParser.CONSTANT)


            self.state = 15345
            self.type_spec()
            self.state = 15350
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138 or _la==1162:
                self.state = 15347
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1138:
                    self.state = 15346
                    self.match(PlSqlParser.NOT)


                self.state = 15349
                self.match(PlSqlParser.NULL_)


            self.state = 15353
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368 or _la==2356:
                self.state = 15352
                self.default_value_part()


            self.state = 15355
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subtype_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBTYPE(self):
            return self.getToken(PlSqlParser.SUBTYPE, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def DOUBLE_PERIOD(self):
            return self.getToken(PlSqlParser.DOUBLE_PERIOD, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_subtype_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubtype_declaration" ):
                listener.enterSubtype_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubtype_declaration" ):
                listener.exitSubtype_declaration(self)




    def subtype_declaration(self):

        localctx = PlSqlParser.Subtype_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1718, self.RULE_subtype_declaration)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15357
            self.match(PlSqlParser.SUBTYPE)
            self.state = 15358
            self.identifier()
            self.state = 15359
            self.match(PlSqlParser.IS)
            self.state = 15360
            self.type_spec()
            self.state = 15366
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1420:
                self.state = 15361
                self.match(PlSqlParser.RANGE)
                self.state = 15362
                self.expression()
                self.state = 15363
                self.match(PlSqlParser.DOUBLE_PERIOD)
                self.state = 15364
                self.expression()


            self.state = 15370
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 15368
                self.match(PlSqlParser.NOT)
                self.state = 15369
                self.match(PlSqlParser.NULL_)


            self.state = 15372
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cursor_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CURSOR(self):
            return self.getToken(PlSqlParser.CURSOR, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def parameter_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Parameter_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Parameter_specContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cursor_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCursor_declaration" ):
                listener.enterCursor_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCursor_declaration" ):
                listener.exitCursor_declaration(self)




    def cursor_declaration(self):

        localctx = PlSqlParser.Cursor_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1720, self.RULE_cursor_declaration)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15374
            self.match(PlSqlParser.CURSOR)
            self.state = 15375
            self.identifier()
            self.state = 15387
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 15376
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15377
                self.parameter_spec()
                self.state = 15382
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 15378
                    self.match(PlSqlParser.COMMA)
                    self.state = 15379
                    self.parameter_spec()
                    self.state = 15384
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 15385
                self.match(PlSqlParser.RIGHT_PAREN)


            self.state = 15391
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1508:
                self.state = 15389
                self.match(PlSqlParser.RETURN)
                self.state = 15390
                self.type_spec()


            self.state = 15395
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==740:
                self.state = 15393
                self.match(PlSqlParser.IS)
                self.state = 15394
                self.select_statement()


            self.state = 15397
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Parameter_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def parameter_name(self):
            return self.getTypedRuleContext(PlSqlParser.Parameter_nameContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def default_value_part(self):
            return self.getTypedRuleContext(PlSqlParser.Default_value_partContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_parameter_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParameter_spec" ):
                listener.enterParameter_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParameter_spec" ):
                listener.exitParameter_spec(self)




    def parameter_spec(self):

        localctx = PlSqlParser.Parameter_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1722, self.RULE_parameter_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15399
            self.parameter_name()
            self.state = 15404
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474976841729) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -34359738385) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -134217793) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 15401
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==696:
                    self.state = 15400
                    self.match(PlSqlParser.IN)


                self.state = 15403
                self.type_spec()


            self.state = 15407
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368 or _la==2356:
                self.state = 15406
                self.default_value_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Exception_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def EXCEPTION(self):
            return self.getToken(PlSqlParser.EXCEPTION, 0)

        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_exception_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterException_declaration" ):
                listener.enterException_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitException_declaration" ):
                listener.exitException_declaration(self)




    def exception_declaration(self):

        localctx = PlSqlParser.Exception_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1724, self.RULE_exception_declaration)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15409
            self.identifier()
            self.state = 15410
            self.match(PlSqlParser.EXCEPTION)
            self.state = 15411
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pragma_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.id1 = None # IdentifierContext

        def PRAGMA(self):
            return self.getToken(PlSqlParser.PRAGMA, 0)

        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def SERIALLY_REUSABLE(self):
            return self.getToken(PlSqlParser.SERIALLY_REUSABLE, 0)

        def AUTONOMOUS_TRANSACTION(self):
            return self.getToken(PlSqlParser.AUTONOMOUS_TRANSACTION, 0)

        def EXCEPTION_INIT(self):
            return self.getToken(PlSqlParser.EXCEPTION_INIT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def exception_name(self):
            return self.getTypedRuleContext(PlSqlParser.Exception_nameContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def numeric_negative(self):
            return self.getTypedRuleContext(PlSqlParser.Numeric_negativeContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def INLINE(self):
            return self.getToken(PlSqlParser.INLINE, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RESTRICT_REFERENCES(self):
            return self.getToken(PlSqlParser.RESTRICT_REFERENCES, 0)

        def DEPRECATE(self):
            return self.getToken(PlSqlParser.DEPRECATE, 0)

        def identifier(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.IdentifierContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.IdentifierContext,i)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pragma_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPragma_declaration" ):
                listener.enterPragma_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPragma_declaration" ):
                listener.exitPragma_declaration(self)




    def pragma_declaration(self):

        localctx = PlSqlParser.Pragma_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1726, self.RULE_pragma_declaration)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15413
            self.match(PlSqlParser.PRAGMA)
            self.state = 15453
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1579]:
                self.state = 15414
                self.match(PlSqlParser.SERIALLY_REUSABLE)
                pass
            elif token in [94]:
                self.state = 15415
                self.match(PlSqlParser.AUTONOMOUS_TRANSACTION)
                pass
            elif token in [499]:
                self.state = 15416
                self.match(PlSqlParser.EXCEPTION_INIT)
                self.state = 15417
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15418
                self.exception_name()
                self.state = 15419
                self.match(PlSqlParser.COMMA)
                self.state = 15420
                self.numeric_negative()
                self.state = 15421
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [702]:
                self.state = 15423
                self.match(PlSqlParser.INLINE)
                self.state = 15424
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15425
                localctx.id1 = self.identifier()
                self.state = 15426
                self.match(PlSqlParser.COMMA)
                self.state = 15427
                self.expression()
                self.state = 15428
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1499]:
                self.state = 15430
                self.match(PlSqlParser.RESTRICT_REFERENCES)
                self.state = 15431
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15434
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                    self.state = 15432
                    self.identifier()
                    pass
                elif token in [368]:
                    self.state = 15433
                    self.match(PlSqlParser.DEFAULT)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 15438 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 15436
                    self.match(PlSqlParser.COMMA)
                    self.state = 15437
                    self.identifier()
                    self.state = 15440 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==2353):
                        break

                self.state = 15442
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [386]:
                self.state = 15444
                self.match(PlSqlParser.DEPRECATE)
                self.state = 15445
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15446
                self.identifier()
                self.state = 15449
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 15447
                    self.match(PlSqlParser.COMMA)
                    self.state = 15448
                    self.match(PlSqlParser.CHAR_STRING)


                self.state = 15451
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15455
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Record_type_defContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RECORD(self):
            return self.getToken(PlSqlParser.RECORD, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def field_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Field_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Field_specContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_record_type_def

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRecord_type_def" ):
                listener.enterRecord_type_def(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRecord_type_def" ):
                listener.exitRecord_type_def(self)




    def record_type_def(self):

        localctx = PlSqlParser.Record_type_defContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1728, self.RULE_record_type_def)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15457
            self.match(PlSqlParser.RECORD)
            self.state = 15458
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 15459
            self.field_spec()
            self.state = 15464
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 15460
                self.match(PlSqlParser.COMMA)
                self.state = 15461
                self.field_spec()
                self.state = 15466
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 15467
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Field_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def default_value_part(self):
            return self.getTypedRuleContext(PlSqlParser.Default_value_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_field_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterField_spec" ):
                listener.enterField_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitField_spec" ):
                listener.exitField_spec(self)




    def field_spec(self):

        localctx = PlSqlParser.Field_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1730, self.RULE_field_spec)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15469
            self.column_name()
            self.state = 15471
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474976841729) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -134217793) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 15470
                self.type_spec()


            self.state = 15475
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 15473
                self.match(PlSqlParser.NOT)
                self.state = 15474
                self.match(PlSqlParser.NULL_)


            self.state = 15478
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368 or _la==2356:
                self.state = 15477
                self.default_value_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Ref_cursor_type_defContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def CURSOR(self):
            return self.getToken(PlSqlParser.CURSOR, 0)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_ref_cursor_type_def

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRef_cursor_type_def" ):
                listener.enterRef_cursor_type_def(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRef_cursor_type_def" ):
                listener.exitRef_cursor_type_def(self)




    def ref_cursor_type_def(self):

        localctx = PlSqlParser.Ref_cursor_type_defContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1732, self.RULE_ref_cursor_type_def)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15480
            self.match(PlSqlParser.REF)
            self.state = 15481
            self.match(PlSqlParser.CURSOR)
            self.state = 15484
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1508:
                self.state = 15482
                self.match(PlSqlParser.RETURN)
                self.state = 15483
                self.type_spec()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def SEMICOLON(self):
            return self.getToken(PlSqlParser.SEMICOLON, 0)

        def table_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Table_type_defContext,0)


        def varray_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Varray_type_defContext,0)


        def record_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Record_type_defContext,0)


        def ref_cursor_type_def(self):
            return self.getTypedRuleContext(PlSqlParser.Ref_cursor_type_defContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_type_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_declaration" ):
                listener.enterType_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_declaration" ):
                listener.exitType_declaration(self)




    def type_declaration(self):

        localctx = PlSqlParser.Type_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1734, self.RULE_type_declaration)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15486
            self.match(PlSqlParser.TYPE)
            self.state = 15487
            self.identifier()
            self.state = 15488
            self.match(PlSqlParser.IS)
            self.state = 15493
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1999]:
                self.state = 15489
                self.table_type_def()
                pass
            elif token in [66, 2171, 2173]:
                self.state = 15490
                self.varray_type_def()
                pass
            elif token in [1435]:
                self.state = 15491
                self.record_type_def()
                pass
            elif token in [1452]:
                self.state = 15492
                self.ref_cursor_type_def()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15495
            self.match(PlSqlParser.SEMICOLON)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_type_defContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def table_indexed_by_part(self):
            return self.getTypedRuleContext(PlSqlParser.Table_indexed_by_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_type_def

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_type_def" ):
                listener.enterTable_type_def(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_type_def" ):
                listener.exitTable_type_def(self)




    def table_type_def(self):

        localctx = PlSqlParser.Table_type_defContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1736, self.RULE_table_type_def)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15497
            self.match(PlSqlParser.TABLE)
            self.state = 15498
            self.match(PlSqlParser.OF)
            self.state = 15499
            self.type_spec()
            self.state = 15502
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 15500
                self.match(PlSqlParser.NOT)
                self.state = 15501
                self.match(PlSqlParser.NULL_)


            self.state = 15505
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==671 or _la==675:
                self.state = 15504
                self.table_indexed_by_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_indexed_by_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.idx1 = None # Token
            self.idx2 = None # Token

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def INDEXED(self):
            return self.getToken(PlSqlParser.INDEXED, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_table_indexed_by_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_indexed_by_part" ):
                listener.enterTable_indexed_by_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_indexed_by_part" ):
                listener.exitTable_indexed_by_part(self)




    def table_indexed_by_part(self):

        localctx = PlSqlParser.Table_indexed_by_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1738, self.RULE_table_indexed_by_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15509
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [671]:
                self.state = 15507
                localctx.idx1 = self.match(PlSqlParser.INDEXED)
                pass
            elif token in [675]:
                self.state = 15508
                localctx.idx2 = self.match(PlSqlParser.INDEX)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15511
            self.match(PlSqlParser.BY)
            self.state = 15512
            self.type_spec()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Varray_type_defContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def VARRAY(self):
            return self.getToken(PlSqlParser.VARRAY, 0)

        def ARRAY(self):
            return self.getToken(PlSqlParser.ARRAY, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def VARYING(self):
            return self.getToken(PlSqlParser.VARYING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_varray_type_def

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVarray_type_def" ):
                listener.enterVarray_type_def(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVarray_type_def" ):
                listener.exitVarray_type_def(self)




    def varray_type_def(self):

        localctx = PlSqlParser.Varray_type_defContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1740, self.RULE_varray_type_def)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15519
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2171]:
                self.state = 15514
                self.match(PlSqlParser.VARRAY)
                pass
            elif token in [66, 2173]:
                self.state = 15516
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2173:
                    self.state = 15515
                    self.match(PlSqlParser.VARYING)


                self.state = 15518
                self.match(PlSqlParser.ARRAY)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15521
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 15522
            self.expression()
            self.state = 15523
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 15524
            self.match(PlSqlParser.OF)
            self.state = 15525
            self.type_spec()
            self.state = 15528
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2085,self._ctx)
            if la_ == 1:
                self.state = 15526
                self.match(PlSqlParser.NOT)
                self.state = 15527
                self.match(PlSqlParser.NULL_)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Seq_of_statementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def statement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.StatementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.StatementContext,i)


        def label_declaration(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Label_declarationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Label_declarationContext,i)


        def selection_directive(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Selection_directiveContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Selection_directiveContext,i)


        def SEMICOLON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEMICOLON)
            else:
                return self.getToken(PlSqlParser.SEMICOLON, i)

        def EOF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EOF)
            else:
                return self.getToken(PlSqlParser.EOF, i)

        def pragma_declaration(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Pragma_declarationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Pragma_declarationContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_seq_of_statements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSeq_of_statements" ):
                listener.enterSeq_of_statements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSeq_of_statements" ):
                listener.exitSeq_of_statements(self)




    def seq_of_statements(self):

        localctx = PlSqlParser.Seq_of_statementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1742, self.RULE_seq_of_statements)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15541 
            self._errHandler.sync(self)
            _alt = 1
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt == 1:
                    self.state = 15541
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2087,self._ctx)
                    if la_ == 1:
                        self.state = 15533
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,2086,self._ctx)
                        while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                            if _alt==1:
                                self.state = 15530
                                self.pragma_declaration() 
                            self.state = 15535
                            self._errHandler.sync(self)
                            _alt = self._interp.adaptivePredict(self._input,2086,self._ctx)

                        self.state = 15536
                        self.statement()
                        self.state = 15537
                        _la = self._input.LA(1)
                        if not(_la==-1 or _la==2367):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass

                    elif la_ == 2:
                        self.state = 15539
                        self.label_declaration()
                        pass

                    elif la_ == 3:
                        self.state = 15540
                        self.selection_directive()
                        pass



                else:
                    raise NoViableAltException(self)
                self.state = 15543 
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2088,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Label_declarationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ltp1 = None # Token

        def LESS_THAN_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LESS_THAN_OP)
            else:
                return self.getToken(PlSqlParser.LESS_THAN_OP, i)

        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def GREATER_THAN_OP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.GREATER_THAN_OP)
            else:
                return self.getToken(PlSqlParser.GREATER_THAN_OP, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_label_declaration

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLabel_declaration" ):
                listener.enterLabel_declaration(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLabel_declaration" ):
                listener.exitLabel_declaration(self)




    def label_declaration(self):

        localctx = PlSqlParser.Label_declarationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1744, self.RULE_label_declaration)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15545
            localctx.ltp1 = self.match(PlSqlParser.LESS_THAN_OP)
            self.state = 15546
            self.match(PlSqlParser.LESS_THAN_OP)
            self.state = 15547
            self.label_name()
            self.state = 15548
            self.match(PlSqlParser.GREATER_THAN_OP)
            self.state = 15549
            self.match(PlSqlParser.GREATER_THAN_OP)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class StatementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def block(self):
            return self.getTypedRuleContext(PlSqlParser.BlockContext,0)


        def assignment_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Assignment_statementContext,0)


        def continue_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Continue_statementContext,0)


        def exit_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Exit_statementContext,0)


        def goto_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Goto_statementContext,0)


        def if_statement(self):
            return self.getTypedRuleContext(PlSqlParser.If_statementContext,0)


        def loop_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Loop_statementContext,0)


        def forall_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Forall_statementContext,0)


        def null_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Null_statementContext,0)


        def raise_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Raise_statementContext,0)


        def return_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Return_statementContext,0)


        def case_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Case_statementContext,0)


        def sql_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Sql_statementContext,0)


        def call_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Call_statementContext,0)


        def pipe_row_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Pipe_row_statementContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStatement" ):
                listener.enterStatement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStatement" ):
                listener.exitStatement(self)




    def statement(self):

        localctx = PlSqlParser.StatementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1746, self.RULE_statement)
        try:
            self.state = 15567
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2089,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15551
                self.body()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15552
                self.block()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15553
                self.assignment_statement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 15554
                self.continue_statement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 15555
                self.exit_statement()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 15556
                self.goto_statement()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 15557
                self.if_statement()
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 15558
                self.loop_statement()
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 15559
                self.forall_statement()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 15560
                self.null_statement()
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 15561
                self.raise_statement()
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 15562
                self.return_statement()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 15563
                self.case_statement()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 15564
                self.sql_statement()
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 15565
                self.call_statement()
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 15566
                self.pipe_row_statement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Swallow_to_semiContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEMICOLON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEMICOLON)
            else:
                return self.getToken(PlSqlParser.SEMICOLON, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_swallow_to_semi

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSwallow_to_semi" ):
                listener.enterSwallow_to_semi(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSwallow_to_semi" ):
                listener.exitSwallow_to_semi(self)




    def swallow_to_semi(self):

        localctx = PlSqlParser.Swallow_to_semiContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1748, self.RULE_swallow_to_semi)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15570 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 15569
                _la = self._input.LA(1)
                if _la <= 0 or _la==2367:
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 15572 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -2) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -1) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -1) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -1) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -1) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -1) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -1) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -1) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -1) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -1) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -1) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -1) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -1) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -1) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -1) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -1) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -1) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -1) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -1) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -1) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -1) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -1) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -1) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -1) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 9223372036854775807) != 0) or ((((_la - 2368)) & ~0x3f) == 0 and ((1 << (_la - 2368)) & 8191) != 0)):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Assignment_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ASSIGN_OP(self):
            return self.getToken(PlSqlParser.ASSIGN_OP, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def general_element(self):
            return self.getTypedRuleContext(PlSqlParser.General_elementContext,0)


        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_assignment_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAssignment_statement" ):
                listener.enterAssignment_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAssignment_statement" ):
                listener.exitAssignment_statement(self)




    def assignment_statement(self):

        localctx = PlSqlParser.Assignment_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1750, self.RULE_assignment_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15576
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2347, 2372, 2378]:
                self.state = 15574
                self.general_element(0)
                pass
            elif token in [2359, 2366]:
                self.state = 15575
                self.bind_variable()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 15578
            self.match(PlSqlParser.ASSIGN_OP)
            self.state = 15579
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Continue_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONTINUE(self):
            return self.getToken(PlSqlParser.CONTINUE, 0)

        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_continue_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterContinue_statement" ):
                listener.enterContinue_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitContinue_statement" ):
                listener.exitContinue_statement(self)




    def continue_statement(self):

        localctx = PlSqlParser.Continue_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1752, self.RULE_continue_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15581
            self.match(PlSqlParser.CONTINUE)
            self.state = 15583
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2092,self._ctx)
            if la_ == 1:
                self.state = 15582
                self.label_name()


            self.state = 15587
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2204:
                self.state = 15585
                self.match(PlSqlParser.WHEN)
                self.state = 15586
                self.condition()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Exit_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXIT(self):
            return self.getToken(PlSqlParser.EXIT, 0)

        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_exit_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExit_statement" ):
                listener.enterExit_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExit_statement" ):
                listener.exitExit_statement(self)




    def exit_statement(self):

        localctx = PlSqlParser.Exit_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1754, self.RULE_exit_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15589
            self.match(PlSqlParser.EXIT)
            self.state = 15591
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2094,self._ctx)
            if la_ == 1:
                self.state = 15590
                self.label_name()


            self.state = 15595
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2204:
                self.state = 15593
                self.match(PlSqlParser.WHEN)
                self.state = 15594
                self.condition()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Goto_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GOTO(self):
            return self.getToken(PlSqlParser.GOTO, 0)

        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_goto_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGoto_statement" ):
                listener.enterGoto_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGoto_statement" ):
                listener.exitGoto_statement(self)




    def goto_statement(self):

        localctx = PlSqlParser.Goto_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1756, self.RULE_goto_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15597
            self.match(PlSqlParser.GOTO)
            self.state = 15598
            self.label_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class If_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IF)
            else:
                return self.getToken(PlSqlParser.IF, i)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def elsif_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Elsif_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Elsif_partContext,i)


        def else_part(self):
            return self.getTypedRuleContext(PlSqlParser.Else_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_if_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIf_statement" ):
                listener.enterIf_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIf_statement" ):
                listener.exitIf_statement(self)




    def if_statement(self):

        localctx = PlSqlParser.If_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1758, self.RULE_if_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15600
            self.match(PlSqlParser.IF)
            self.state = 15601
            self.condition()
            self.state = 15602
            self.match(PlSqlParser.THEN)
            self.state = 15603
            self.seq_of_statements()
            self.state = 15607
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==461:
                self.state = 15604
                self.elsif_part()
                self.state = 15609
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 15611
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==460:
                self.state = 15610
                self.else_part()


            self.state = 15613
            self.match(PlSqlParser.END)
            self.state = 15614
            self.match(PlSqlParser.IF)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Elsif_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELSIF(self):
            return self.getToken(PlSqlParser.ELSIF, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_elsif_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterElsif_part" ):
                listener.enterElsif_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitElsif_part" ):
                listener.exitElsif_part(self)




    def elsif_part(self):

        localctx = PlSqlParser.Elsif_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1760, self.RULE_elsif_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15616
            self.match(PlSqlParser.ELSIF)
            self.state = 15617
            self.condition()
            self.state = 15618
            self.match(PlSqlParser.THEN)
            self.state = 15619
            self.seq_of_statements()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Else_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELSE(self):
            return self.getToken(PlSqlParser.ELSE, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_else_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterElse_part" ):
                listener.enterElse_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitElse_part" ):
                listener.exitElse_part(self)




    def else_part(self):

        localctx = PlSqlParser.Else_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1762, self.RULE_else_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15621
            self.match(PlSqlParser.ELSE)
            self.state = 15622
            self.seq_of_statements()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Loop_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOOP(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LOOP)
            else:
                return self.getToken(PlSqlParser.LOOP, i)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def label_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Label_declarationContext,0)


        def WHILE(self):
            return self.getToken(PlSqlParser.WHILE, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def cursor_loop_param(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_loop_paramContext,0)


        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_loop_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLoop_statement" ):
                listener.enterLoop_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLoop_statement" ):
                listener.exitLoop_statement(self)




    def loop_statement(self):

        localctx = PlSqlParser.Loop_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1764, self.RULE_loop_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15625
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2365:
                self.state = 15624
                self.label_declaration()


            self.state = 15631
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2206]:
                self.state = 15627
                self.match(PlSqlParser.WHILE)
                self.state = 15628
                self.condition()
                pass
            elif token in [580]:
                self.state = 15629
                self.match(PlSqlParser.FOR)
                self.state = 15630
                self.cursor_loop_param()
                pass
            elif token in [842]:
                pass
            else:
                pass
            self.state = 15633
            self.match(PlSqlParser.LOOP)
            self.state = 15634
            self.seq_of_statements()
            self.state = 15635
            self.match(PlSqlParser.END)
            self.state = 15636
            self.match(PlSqlParser.LOOP)
            self.state = 15638
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                self.state = 15637
                self.label_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cursor_loop_paramContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.range_separator = None # Token

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def lower_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Lower_boundContext,0)


        def upper_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Upper_boundContext,0)


        def DOUBLE_PERIOD(self):
            return self.getToken(PlSqlParser.DOUBLE_PERIOD, 0)

        def REVERSE(self):
            return self.getToken(PlSqlParser.REVERSE, 0)

        def record_name(self):
            return self.getTypedRuleContext(PlSqlParser.Record_nameContext,0)


        def cursor_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cursor_loop_param

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCursor_loop_param" ):
                listener.enterCursor_loop_param(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCursor_loop_param" ):
                listener.exitCursor_loop_param(self)




    def cursor_loop_param(self):

        localctx = PlSqlParser.Cursor_loop_paramContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1766, self.RULE_cursor_loop_param)
        self._la = 0 # Token type
        try:
            self.state = 15665
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2105,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15640
                self.index_name()
                self.state = 15641
                self.match(PlSqlParser.IN)
                self.state = 15643
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2101,self._ctx)
                if la_ == 1:
                    self.state = 15642
                    self.match(PlSqlParser.REVERSE)


                self.state = 15645
                self.lower_bound()
                self.state = 15646
                localctx.range_separator = self.match(PlSqlParser.DOUBLE_PERIOD)
                self.state = 15647
                self.upper_bound()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15649
                self.record_name()
                self.state = 15650
                self.match(PlSqlParser.IN)
                self.state = 15663
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2104,self._ctx)
                if la_ == 1:
                    self.state = 15651
                    self.cursor_name()
                    self.state = 15657
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2347:
                        self.state = 15652
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 15654
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                            self.state = 15653
                            self.expressions()


                        self.state = 15656
                        self.match(PlSqlParser.RIGHT_PAREN)


                    pass

                elif la_ == 2:
                    self.state = 15659
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 15660
                    self.select_statement()
                    self.state = 15661
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Forall_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FORALL(self):
            return self.getToken(PlSqlParser.FORALL, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def bounds_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Bounds_clauseContext,0)


        def data_manipulation_language_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Data_manipulation_language_statementsContext,0)


        def SAVE(self):
            return self.getToken(PlSqlParser.SAVE, 0)

        def EXCEPTIONS(self):
            return self.getToken(PlSqlParser.EXCEPTIONS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_forall_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterForall_statement" ):
                listener.enterForall_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitForall_statement" ):
                listener.exitForall_statement(self)




    def forall_statement(self):

        localctx = PlSqlParser.Forall_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1768, self.RULE_forall_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15667
            self.match(PlSqlParser.FORALL)
            self.state = 15668
            self.index_name()
            self.state = 15669
            self.match(PlSqlParser.IN)
            self.state = 15670
            self.bounds_clause()
            self.state = 15673
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1539:
                self.state = 15671
                self.match(PlSqlParser.SAVE)
                self.state = 15672
                self.match(PlSqlParser.EXCEPTIONS)


            self.state = 15675
            self.data_manipulation_language_statements()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Bounds_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def lower_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Lower_boundContext,0)


        def DOUBLE_PERIOD(self):
            return self.getToken(PlSqlParser.DOUBLE_PERIOD, 0)

        def upper_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Upper_boundContext,0)


        def INDICES(self):
            return self.getToken(PlSqlParser.INDICES, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def general_element(self):
            return self.getTypedRuleContext(PlSqlParser.General_elementContext,0)


        def between_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Between_boundContext,0)


        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def index_name(self):
            return self.getTypedRuleContext(PlSqlParser.Index_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_bounds_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBounds_clause" ):
                listener.enterBounds_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBounds_clause" ):
                listener.exitBounds_clause(self)




    def bounds_clause(self):

        localctx = PlSqlParser.Bounds_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1770, self.RULE_bounds_clause)
        self._la = 0 # Token type
        try:
            self.state = 15690
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2108,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15677
                self.lower_bound()
                self.state = 15678
                self.match(PlSqlParser.DOUBLE_PERIOD)
                self.state = 15679
                self.upper_bound()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15681
                self.match(PlSqlParser.INDICES)
                self.state = 15682
                self.match(PlSqlParser.OF)
                self.state = 15683
                self.general_element(0)
                self.state = 15685
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==115:
                    self.state = 15684
                    self.between_bound()


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15687
                self.match(PlSqlParser.VALUES)
                self.state = 15688
                self.match(PlSqlParser.OF)
                self.state = 15689
                self.index_name()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Between_boundContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BETWEEN(self):
            return self.getToken(PlSqlParser.BETWEEN, 0)

        def lower_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Lower_boundContext,0)


        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def upper_bound(self):
            return self.getTypedRuleContext(PlSqlParser.Upper_boundContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_between_bound

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBetween_bound" ):
                listener.enterBetween_bound(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBetween_bound" ):
                listener.exitBetween_bound(self)




    def between_bound(self):

        localctx = PlSqlParser.Between_boundContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1772, self.RULE_between_bound)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15692
            self.match(PlSqlParser.BETWEEN)
            self.state = 15693
            self.lower_bound()
            self.state = 15694
            self.match(PlSqlParser.AND)
            self.state = 15695
            self.upper_bound()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lower_boundContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lower_bound

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLower_bound" ):
                listener.enterLower_bound(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLower_bound" ):
                listener.exitLower_bound(self)




    def lower_bound(self):

        localctx = PlSqlParser.Lower_boundContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1774, self.RULE_lower_bound)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15697
            self.concatenation(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Upper_boundContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_upper_bound

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpper_bound" ):
                listener.enterUpper_bound(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpper_bound" ):
                listener.exitUpper_bound(self)




    def upper_bound(self):

        localctx = PlSqlParser.Upper_boundContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1776, self.RULE_upper_bound)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15699
            self.concatenation(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Null_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_null_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNull_statement" ):
                listener.enterNull_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNull_statement" ):
                listener.exitNull_statement(self)




    def null_statement(self):

        localctx = PlSqlParser.Null_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1778, self.RULE_null_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15701
            self.match(PlSqlParser.NULL_)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Raise_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RAISE(self):
            return self.getToken(PlSqlParser.RAISE, 0)

        def exception_name(self):
            return self.getTypedRuleContext(PlSqlParser.Exception_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_raise_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRaise_statement" ):
                listener.enterRaise_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRaise_statement" ):
                listener.exitRaise_statement(self)




    def raise_statement(self):

        localctx = PlSqlParser.Raise_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1780, self.RULE_raise_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15703
            self.match(PlSqlParser.RAISE)
            self.state = 15705
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                self.state = 15704
                self.exception_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Return_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_return_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReturn_statement" ):
                listener.enterReturn_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReturn_statement" ):
                listener.exitReturn_statement(self)




    def return_statement(self):

        localctx = PlSqlParser.Return_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1782, self.RULE_return_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15707
            self.match(PlSqlParser.RETURN)
            self.state = 15709
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                self.state = 15708
                self.expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Call_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def routine_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Routine_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Routine_nameContext,i)


        def CALL(self):
            return self.getToken(PlSqlParser.CALL, 0)

        def function_argument(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Function_argumentContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Function_argumentContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_call_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCall_statement" ):
                listener.enterCall_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCall_statement" ):
                listener.exitCall_statement(self)




    def call_statement(self):

        localctx = PlSqlParser.Call_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1784, self.RULE_call_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15712
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2111,self._ctx)
            if la_ == 1:
                self.state = 15711
                self.match(PlSqlParser.CALL)


            self.state = 15714
            self.routine_name()
            self.state = 15716
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 15715
                self.function_argument()


            self.state = 15725
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 15718
                self.match(PlSqlParser.PERIOD)
                self.state = 15719
                self.routine_name()
                self.state = 15721
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 15720
                    self.function_argument()


                self.state = 15727
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 15730
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==735:
                self.state = 15728
                self.match(PlSqlParser.INTO)
                self.state = 15729
                self.bind_variable()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pipe_row_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PIPE(self):
            return self.getToken(PlSqlParser.PIPE, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pipe_row_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPipe_row_statement" ):
                listener.enterPipe_row_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPipe_row_statement" ):
                listener.exitPipe_row_statement(self)




    def pipe_row_statement(self):

        localctx = PlSqlParser.Pipe_row_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1786, self.RULE_pipe_row_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15732
            self.match(PlSqlParser.PIPE)
            self.state = 15733
            self.match(PlSqlParser.ROW)
            self.state = 15734
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 15735
            self.expression()
            self.state = 15736
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Selection_directiveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DOLLAR_IF(self):
            return self.getToken(PlSqlParser.DOLLAR_IF, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def DOLLAR_THEN(self):
            return self.getToken(PlSqlParser.DOLLAR_THEN, 0)

        def selection_directive_body(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Selection_directive_bodyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Selection_directive_bodyContext,i)


        def DOLLAR_END(self):
            return self.getToken(PlSqlParser.DOLLAR_END, 0)

        def DOLLAR_ELSIF(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DOLLAR_ELSIF)
            else:
                return self.getToken(PlSqlParser.DOLLAR_ELSIF, i)

        def DOLLAR_ELSE(self):
            return self.getToken(PlSqlParser.DOLLAR_ELSE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_selection_directive

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelection_directive" ):
                listener.enterSelection_directive(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelection_directive" ):
                listener.exitSelection_directive(self)




    def selection_directive(self):

        localctx = PlSqlParser.Selection_directiveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1788, self.RULE_selection_directive)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15738
            self.match(PlSqlParser.DOLLAR_IF)
            self.state = 15739
            self.condition()
            self.state = 15740
            self.match(PlSqlParser.DOLLAR_THEN)
            self.state = 15741
            self.selection_directive_body()
            self.state = 15746
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==426:
                self.state = 15742
                self.match(PlSqlParser.DOLLAR_ELSIF)
                self.state = 15743
                self.selection_directive_body()
                self.state = 15748
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 15751
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==425:
                self.state = 15749
                self.match(PlSqlParser.DOLLAR_ELSE)
                self.state = 15750
                self.selection_directive_body()


            self.state = 15753
            self.match(PlSqlParser.DOLLAR_END)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Error_directiveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DOLLAR_ERROR(self):
            return self.getToken(PlSqlParser.DOLLAR_ERROR, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def DOLLAR_END(self):
            return self.getToken(PlSqlParser.DOLLAR_END, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_error_directive

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterError_directive" ):
                listener.enterError_directive(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitError_directive" ):
                listener.exitError_directive(self)




    def error_directive(self):

        localctx = PlSqlParser.Error_directiveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1790, self.RULE_error_directive)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15755
            self.match(PlSqlParser.DOLLAR_ERROR)
            self.state = 15756
            self.concatenation(0)
            self.state = 15757
            self.match(PlSqlParser.DOLLAR_END)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Selection_directive_bodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def statement(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.StatementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.StatementContext,i)


        def SEMICOLON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SEMICOLON)
            else:
                return self.getToken(PlSqlParser.SEMICOLON, i)

        def variable_declaration(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Variable_declarationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Variable_declarationContext,i)


        def error_directive(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Error_directiveContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Error_directiveContext,i)


        def function_body(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Function_bodyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Function_bodyContext,i)


        def procedure_body(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Procedure_bodyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Procedure_bodyContext,i)


        def pragma_declaration(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Pragma_declarationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Pragma_declarationContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_selection_directive_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelection_directive_body" ):
                listener.enterSelection_directive_body(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelection_directive_body" ):
                listener.exitSelection_directive_body(self)




    def selection_directive_body(self):

        localctx = PlSqlParser.Selection_directive_bodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1792, self.RULE_selection_directive_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15769 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 15769
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2119,self._ctx)
                if la_ == 1:
                    self.state = 15760
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2118,self._ctx)
                    if la_ == 1:
                        self.state = 15759
                        self.pragma_declaration()


                    self.state = 15762
                    self.statement()
                    self.state = 15763
                    self.match(PlSqlParser.SEMICOLON)
                    pass

                elif la_ == 2:
                    self.state = 15765
                    self.variable_declaration()
                    pass

                elif la_ == 3:
                    self.state = 15766
                    self.error_directive()
                    pass

                elif la_ == 4:
                    self.state = 15767
                    self.function_body()
                    pass

                elif la_ == 5:
                    self.state = 15768
                    self.procedure_body()
                    pass


                self.state = 15771 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594596098165702785) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127973519527937) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135395841) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2199023255553) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4190175233) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686018427387905) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370497) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465150886821889) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0)):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BodyContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def EXCEPTION(self):
            return self.getToken(PlSqlParser.EXCEPTION, 0)

        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def exception_handler(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Exception_handlerContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Exception_handlerContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_body

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBody" ):
                listener.enterBody(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBody" ):
                listener.exitBody(self)




    def body(self):

        localctx = PlSqlParser.BodyContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1794, self.RULE_body)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15773
            self.match(PlSqlParser.BEGIN)
            self.state = 15774
            self.seq_of_statements()
            self.state = 15781
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==498:
                self.state = 15775
                self.match(PlSqlParser.EXCEPTION)
                self.state = 15777 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 15776
                    self.exception_handler()
                    self.state = 15779 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==2204):
                        break



            self.state = 15783
            self.match(PlSqlParser.END)
            self.state = 15785
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2123,self._ctx)
            if la_ == 1:
                self.state = 15784
                self.label_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Exception_handlerContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def exception_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Exception_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Exception_nameContext,i)


        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def OR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.OR)
            else:
                return self.getToken(PlSqlParser.OR, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_exception_handler

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterException_handler" ):
                listener.enterException_handler(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitException_handler" ):
                listener.exitException_handler(self)




    def exception_handler(self):

        localctx = PlSqlParser.Exception_handlerContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1796, self.RULE_exception_handler)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15787
            self.match(PlSqlParser.WHEN)
            self.state = 15788
            self.exception_name()
            self.state = 15793
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1237:
                self.state = 15789
                self.match(PlSqlParser.OR)
                self.state = 15790
                self.exception_name()
                self.state = 15795
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 15796
            self.match(PlSqlParser.THEN)
            self.state = 15797
            self.seq_of_statements()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Trigger_blockContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def declare_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Declare_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Declare_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_trigger_block

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrigger_block" ):
                listener.enterTrigger_block(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrigger_block" ):
                listener.exitTrigger_block(self)




    def trigger_block(self):

        localctx = PlSqlParser.Trigger_blockContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1798, self.RULE_trigger_block)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15806
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==361:
                self.state = 15799
                self.match(PlSqlParser.DECLARE)
                self.state = 15803
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2125,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 15800
                        self.declare_spec() 
                    self.state = 15805
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2125,self._ctx)



            self.state = 15808
            self.body()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tps_blockContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def declare_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Declare_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Declare_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tps_block

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTps_block" ):
                listener.enterTps_block(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTps_block" ):
                listener.exitTps_block(self)




    def tps_block(self):

        localctx = PlSqlParser.Tps_blockContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1800, self.RULE_tps_block)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15813
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2127,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 15810
                    self.declare_spec() 
                self.state = 15815
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2127,self._ctx)

            self.state = 15816
            self.body()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class BlockContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def body(self):
            return self.getTypedRuleContext(PlSqlParser.BodyContext,0)


        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def declare_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Declare_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Declare_specContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_block

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBlock" ):
                listener.enterBlock(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBlock" ):
                listener.exitBlock(self)




    def block(self):

        localctx = PlSqlParser.BlockContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1802, self.RULE_block)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15825
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==361:
                self.state = 15818
                self.match(PlSqlParser.DECLARE)
                self.state = 15822
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2128,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 15819
                        self.declare_spec() 
                    self.state = 15824
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2128,self._ctx)



            self.state = 15827
            self.body()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sql_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def execute_immediate(self):
            return self.getTypedRuleContext(PlSqlParser.Execute_immediateContext,0)


        def data_manipulation_language_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Data_manipulation_language_statementsContext,0)


        def cursor_manipulation_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_manipulation_statementsContext,0)


        def transaction_control_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Transaction_control_statementsContext,0)


        def collection_method_call(self):
            return self.getTypedRuleContext(PlSqlParser.Collection_method_callContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_statement" ):
                listener.enterSql_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_statement" ):
                listener.exitSql_statement(self)




    def sql_statement(self):

        localctx = PlSqlParser.Sql_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1804, self.RULE_sql_statement)
        try:
            self.state = 15834
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2130,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15829
                self.execute_immediate()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15830
                self.data_manipulation_language_statements()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15831
                self.cursor_manipulation_statements()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 15832
                self.transaction_control_statements()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 15833
                self.collection_method_call()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Execute_immediateContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def into_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Into_clauseContext,0)


        def using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_clauseContext,0)


        def dynamic_returning_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dynamic_returning_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_execute_immediate

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExecute_immediate" ):
                listener.enterExecute_immediate(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExecute_immediate" ):
                listener.exitExecute_immediate(self)




    def execute_immediate(self):

        localctx = PlSqlParser.Execute_immediateContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1806, self.RULE_execute_immediate)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15836
            self.match(PlSqlParser.EXECUTE)
            self.state = 15837
            self.match(PlSqlParser.IMMEDIATE)
            self.state = 15838
            self.expression()
            self.state = 15848
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [153, 735]:
                self.state = 15839
                self.into_clause()
                self.state = 15841
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 15840
                    self.using_clause()


                pass
            elif token in [2153]:
                self.state = 15843
                self.using_clause()
                self.state = 15845
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1507 or _la==1508:
                    self.state = 15844
                    self.dynamic_returning_clause()


                pass
            elif token in [1507, 1508]:
                self.state = 15847
                self.dynamic_returning_clause()
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dynamic_returning_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def into_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Into_clauseContext,0)


        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_dynamic_returning_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDynamic_returning_clause" ):
                listener.enterDynamic_returning_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDynamic_returning_clause" ):
                listener.exitDynamic_returning_clause(self)




    def dynamic_returning_clause(self):

        localctx = PlSqlParser.Dynamic_returning_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1808, self.RULE_dynamic_returning_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15850
            _la = self._input.LA(1)
            if not(_la==1507 or _la==1508):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 15851
            self.into_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Data_manipulation_language_statementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def merge_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_statementContext,0)


        def lock_table_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Lock_table_statementContext,0)


        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def update_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Update_statementContext,0)


        def delete_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Delete_statementContext,0)


        def insert_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Insert_statementContext,0)


        def explain_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Explain_statementContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_data_manipulation_language_statements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterData_manipulation_language_statements" ):
                listener.enterData_manipulation_language_statements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitData_manipulation_language_statements" ):
                listener.exitData_manipulation_language_statements(self)




    def data_manipulation_language_statements(self):

        localctx = PlSqlParser.Data_manipulation_language_statementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1810, self.RULE_data_manipulation_language_statements)
        try:
            self.state = 15860
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [892]:
                self.enterOuterAlt(localctx, 1)
                self.state = 15853
                self.merge_statement()
                pass
            elif token in [829]:
                self.enterOuterAlt(localctx, 2)
                self.state = 15854
                self.lock_table_statement()
                pass
            elif token in [1569, 2212, 2347]:
                self.enterOuterAlt(localctx, 3)
                self.state = 15855
                self.select_statement()
                pass
            elif token in [2114]:
                self.enterOuterAlt(localctx, 4)
                self.state = 15856
                self.update_statement()
                pass
            elif token in [381]:
                self.enterOuterAlt(localctx, 5)
                self.state = 15857
                self.delete_statement()
                pass
            elif token in [713]:
                self.enterOuterAlt(localctx, 6)
                self.state = 15858
                self.insert_statement()
                pass
            elif token in [515]:
                self.enterOuterAlt(localctx, 7)
                self.state = 15859
                self.explain_statement()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cursor_manipulation_statementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def close_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Close_statementContext,0)


        def open_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Open_statementContext,0)


        def fetch_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Fetch_statementContext,0)


        def open_for_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Open_for_statementContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cursor_manipulation_statements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCursor_manipulation_statements" ):
                listener.enterCursor_manipulation_statements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCursor_manipulation_statements" ):
                listener.exitCursor_manipulation_statements(self)




    def cursor_manipulation_statements(self):

        localctx = PlSqlParser.Cursor_manipulation_statementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1812, self.RULE_cursor_manipulation_statements)
        try:
            self.state = 15866
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2135,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15862
                self.close_statement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15863
                self.open_statement()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15864
                self.fetch_statement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 15865
                self.open_for_statement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Close_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CLOSE(self):
            return self.getToken(PlSqlParser.CLOSE, 0)

        def cursor_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_close_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterClose_statement" ):
                listener.enterClose_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitClose_statement" ):
                listener.exitClose_statement(self)




    def close_statement(self):

        localctx = PlSqlParser.Close_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1814, self.RULE_close_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15868
            self.match(PlSqlParser.CLOSE)
            self.state = 15869
            self.cursor_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Open_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OPEN(self):
            return self.getToken(PlSqlParser.OPEN, 0)

        def cursor_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_open_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOpen_statement" ):
                listener.enterOpen_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOpen_statement" ):
                listener.exitOpen_statement(self)




    def open_statement(self):

        localctx = PlSqlParser.Open_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1816, self.RULE_open_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15871
            self.match(PlSqlParser.OPEN)
            self.state = 15872
            self.cursor_name()
            self.state = 15878
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 15873
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 15875
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                    self.state = 15874
                    self.expressions()


                self.state = 15877
                self.match(PlSqlParser.RIGHT_PAREN)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Fetch_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.it1 = None # Token

        def FETCH(self):
            return self.getToken(PlSqlParser.FETCH, 0)

        def cursor_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_nameContext,0)


        def variable_or_collection(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Variable_or_collectionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Variable_or_collectionContext,i)


        def BULK(self):
            return self.getToken(PlSqlParser.BULK, 0)

        def COLLECT(self):
            return self.getToken(PlSqlParser.COLLECT, 0)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_fetch_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFetch_statement" ):
                listener.enterFetch_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFetch_statement" ):
                listener.exitFetch_statement(self)




    def fetch_statement(self):

        localctx = PlSqlParser.Fetch_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1818, self.RULE_fetch_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15880
            self.match(PlSqlParser.FETCH)
            self.state = 15881
            self.cursor_name()
            self.state = 15909
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [735]:
                self.state = 15882
                localctx.it1 = self.match(PlSqlParser.INTO)
                self.state = 15883
                self.variable_or_collection()
                self.state = 15888
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 15884
                    self.match(PlSqlParser.COMMA)
                    self.state = 15885
                    self.variable_or_collection()
                    self.state = 15890
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [153]:
                self.state = 15891
                self.match(PlSqlParser.BULK)
                self.state = 15892
                self.match(PlSqlParser.COLLECT)
                self.state = 15893
                self.match(PlSqlParser.INTO)
                self.state = 15894
                self.variable_or_collection()
                self.state = 15899
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 15895
                    self.match(PlSqlParser.COMMA)
                    self.state = 15896
                    self.variable_or_collection()
                    self.state = 15901
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 15907
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==810:
                    self.state = 15902
                    self.match(PlSqlParser.LIMIT)
                    self.state = 15905
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2341, 2342]:
                        self.state = 15903
                        self.numeric()
                        pass
                    elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2359, 2366, 2372, 2378]:
                        self.state = 15904
                        self.variable_or_collection()
                        pass
                    else:
                        raise NoViableAltException(self)



                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Variable_or_collectionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def variable_name(self):
            return self.getTypedRuleContext(PlSqlParser.Variable_nameContext,0)


        def collection_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Collection_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_variable_or_collection

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVariable_or_collection" ):
                listener.enterVariable_or_collection(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVariable_or_collection" ):
                listener.exitVariable_or_collection(self)




    def variable_or_collection(self):

        localctx = PlSqlParser.Variable_or_collectionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1820, self.RULE_variable_or_collection)
        try:
            self.state = 15913
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2143,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15911
                self.variable_name()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15912
                self.collection_expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Open_for_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OPEN(self):
            return self.getToken(PlSqlParser.OPEN, 0)

        def variable_name(self):
            return self.getTypedRuleContext(PlSqlParser.Variable_nameContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_open_for_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOpen_for_statement" ):
                listener.enterOpen_for_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOpen_for_statement" ):
                listener.exitOpen_for_statement(self)




    def open_for_statement(self):

        localctx = PlSqlParser.Open_for_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1822, self.RULE_open_for_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15915
            self.match(PlSqlParser.OPEN)
            self.state = 15916
            self.variable_name()
            self.state = 15917
            self.match(PlSqlParser.FOR)
            self.state = 15920
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2144,self._ctx)
            if la_ == 1:
                self.state = 15918
                self.select_statement()
                pass

            elif la_ == 2:
                self.state = 15919
                self.expression()
                pass


            self.state = 15923
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2153:
                self.state = 15922
                self.using_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Transaction_control_statementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def set_transaction_command(self):
            return self.getTypedRuleContext(PlSqlParser.Set_transaction_commandContext,0)


        def set_constraint_command(self):
            return self.getTypedRuleContext(PlSqlParser.Set_constraint_commandContext,0)


        def commit_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Commit_statementContext,0)


        def rollback_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Rollback_statementContext,0)


        def savepoint_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Savepoint_statementContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_transaction_control_statements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTransaction_control_statements" ):
                listener.enterTransaction_control_statements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTransaction_control_statements" ):
                listener.exitTransaction_control_statements(self)




    def transaction_control_statements(self):

        localctx = PlSqlParser.Transaction_control_statementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1824, self.RULE_transaction_control_statements)
        try:
            self.state = 15930
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2146,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 15925
                self.set_transaction_command()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 15926
                self.set_constraint_command()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 15927
                self.commit_statement()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 15928
                self.rollback_statement()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 15929
                self.savepoint_statement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_transaction_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def TRANSACTION(self):
            return self.getToken(PlSqlParser.TRANSACTION, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def ISOLATION(self):
            return self.getToken(PlSqlParser.ISOLATION, 0)

        def LEVEL(self):
            return self.getToken(PlSqlParser.LEVEL, 0)

        def USE(self):
            return self.getToken(PlSqlParser.USE, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def rollback_segment_name(self):
            return self.getTypedRuleContext(PlSqlParser.Rollback_segment_nameContext,0)


        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def SERIALIZABLE(self):
            return self.getToken(PlSqlParser.SERIALIZABLE, 0)

        def COMMITTED(self):
            return self.getToken(PlSqlParser.COMMITTED, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_set_transaction_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_transaction_command" ):
                listener.enterSet_transaction_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_transaction_command" ):
                listener.exitSet_transaction_command(self)




    def set_transaction_command(self):

        localctx = PlSqlParser.Set_transaction_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1826, self.RULE_set_transaction_command)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15932
            self.match(PlSqlParser.SET)
            self.state = 15933
            self.match(PlSqlParser.TRANSACTION)
            self.state = 15947
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1429]:
                self.state = 15934
                self.match(PlSqlParser.READ)
                self.state = 15935
                _la = self._input.LA(1)
                if not(_la==1192 or _la==2216):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [742]:
                self.state = 15936
                self.match(PlSqlParser.ISOLATION)
                self.state = 15937
                self.match(PlSqlParser.LEVEL)
                self.state = 15941
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1578]:
                    self.state = 15938
                    self.match(PlSqlParser.SERIALIZABLE)
                    pass
                elif token in [1429]:
                    self.state = 15939
                    self.match(PlSqlParser.READ)
                    self.state = 15940
                    self.match(PlSqlParser.COMMITTED)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [2148]:
                self.state = 15943
                self.match(PlSqlParser.USE)
                self.state = 15944
                self.match(PlSqlParser.ROLLBACK)
                self.state = 15945
                self.match(PlSqlParser.SEGMENT)
                self.state = 15946
                self.rollback_segment_name()
                pass
            elif token in [-1, 943, 2354, 2367]:
                pass
            else:
                pass
            self.state = 15951
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==943:
                self.state = 15949
                self.match(PlSqlParser.NAME)
                self.state = 15950
                self.quoted_string()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_constraint_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def CONSTRAINTS(self):
            return self.getToken(PlSqlParser.CONSTRAINTS, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def DEFERRED(self):
            return self.getToken(PlSqlParser.DEFERRED, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def constraint_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Constraint_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_set_constraint_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_constraint_command" ):
                listener.enterSet_constraint_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_constraint_command" ):
                listener.exitSet_constraint_command(self)




    def set_constraint_command(self):

        localctx = PlSqlParser.Set_constraint_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1828, self.RULE_set_constraint_command)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15953
            self.match(PlSqlParser.SET)
            self.state = 15954
            _la = self._input.LA(1)
            if not(_la==271 or _la==272):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 15964
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [38]:
                self.state = 15955
                self.match(PlSqlParser.ALL)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 15956
                self.constraint_name()
                self.state = 15961
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 15957
                    self.match(PlSqlParser.COMMA)
                    self.state = 15958
                    self.constraint_name()
                    self.state = 15963
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            else:
                raise NoViableAltException(self)

            self.state = 15966
            _la = self._input.LA(1)
            if not(_la==373 or _la==656):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Commit_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def WORK(self):
            return self.getToken(PlSqlParser.WORK, 0)

        def write_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Write_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Write_clauseContext,i)


        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def CORRUPT_XID(self):
            return self.getToken(PlSqlParser.CORRUPT_XID, 0)

        def CORRUPT_XID_ALL(self):
            return self.getToken(PlSqlParser.CORRUPT_XID_ALL, 0)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_commit_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCommit_statement" ):
                listener.enterCommit_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCommit_statement" ):
                listener.exitCommit_statement(self)




    def commit_statement(self):

        localctx = PlSqlParser.Commit_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1830, self.RULE_commit_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15968
            self.match(PlSqlParser.COMMIT)
            self.state = 15970
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2213:
                self.state = 15969
                self.match(PlSqlParser.WORK)


            self.state = 15973
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2216:
                self.state = 15972
                self.write_clause()


            self.state = 15991
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [230]:
                self.state = 15975
                self.match(PlSqlParser.COMMENT)
                self.state = 15976
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 15978
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2216:
                    self.state = 15977
                    self.write_clause()


                pass
            elif token in [576]:
                self.state = 15980
                self.match(PlSqlParser.FORCE)
                self.state = 15989
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2343]:
                    self.state = 15981
                    self.match(PlSqlParser.CHAR_STRING)
                    self.state = 15984
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 15982
                        self.match(PlSqlParser.COMMA)
                        self.state = 15983
                        self.numeric()


                    pass
                elif token in [293]:
                    self.state = 15986
                    self.match(PlSqlParser.CORRUPT_XID)
                    self.state = 15987
                    self.match(PlSqlParser.CHAR_STRING)
                    pass
                elif token in [292]:
                    self.state = 15988
                    self.match(PlSqlParser.CORRUPT_XID_ALL)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Write_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def NOWAIT(self):
            return self.getToken(PlSqlParser.NOWAIT, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def BATCH(self):
            return self.getToken(PlSqlParser.BATCH, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_write_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWrite_clause" ):
                listener.enterWrite_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWrite_clause" ):
                listener.exitWrite_clause(self)




    def write_clause(self):

        localctx = PlSqlParser.Write_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1832, self.RULE_write_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 15993
            self.match(PlSqlParser.WRITE)
            self.state = 15995
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1153 or _la==2197:
                self.state = 15994
                _la = self._input.LA(1)
                if not(_la==1153 or _la==2197):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 15998
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==105 or _la==656:
                self.state = 15997
                _la = self._input.LA(1)
                if not(_la==105 or _la==656):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rollback_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def WORK(self):
            return self.getToken(PlSqlParser.WORK, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def savepoint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Savepoint_nameContext,0)


        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def SAVEPOINT(self):
            return self.getToken(PlSqlParser.SAVEPOINT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_rollback_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRollback_statement" ):
                listener.enterRollback_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRollback_statement" ):
                listener.exitRollback_statement(self)




    def rollback_statement(self):

        localctx = PlSqlParser.Rollback_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1834, self.RULE_rollback_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16000
            self.match(PlSqlParser.ROLLBACK)
            self.state = 16002
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2213:
                self.state = 16001
                self.match(PlSqlParser.WORK)


            self.state = 16011
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2052]:
                self.state = 16004
                self.match(PlSqlParser.TO)
                self.state = 16006
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2161,self._ctx)
                if la_ == 1:
                    self.state = 16005
                    self.match(PlSqlParser.SAVEPOINT)


                self.state = 16008
                self.savepoint_name()
                pass
            elif token in [576]:
                self.state = 16009
                self.match(PlSqlParser.FORCE)
                self.state = 16010
                self.quoted_string()
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Savepoint_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SAVEPOINT(self):
            return self.getToken(PlSqlParser.SAVEPOINT, 0)

        def savepoint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Savepoint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_savepoint_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSavepoint_statement" ):
                listener.enterSavepoint_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSavepoint_statement" ):
                listener.exitSavepoint_statement(self)




    def savepoint_statement(self):

        localctx = PlSqlParser.Savepoint_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1836, self.RULE_savepoint_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16013
            self.match(PlSqlParser.SAVEPOINT)
            self.state = 16014
            self.savepoint_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Collection_method_callContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self._expression = None # ExpressionContext
            self.index = list() # of ExpressionContexts

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def TRIM(self):
            return self.getToken(PlSqlParser.TRIM, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def EXTEND(self):
            return self.getToken(PlSqlParser.EXTEND, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_collection_method_call

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollection_method_call" ):
                listener.enterCollection_method_call(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollection_method_call" ):
                listener.exitCollection_method_call(self)




    def collection_method_call(self):

        localctx = PlSqlParser.Collection_method_callContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1838, self.RULE_collection_method_call)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16016
            self.expression()
            self.state = 16017
            self.match(PlSqlParser.PERIOD)
            self.state = 16039
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [381, 2329]:
                self.state = 16018
                _la = self._input.LA(1)
                if not(_la==381 or _la==2329):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 16030
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 16019
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 16020
                    localctx._expression = self.expression()
                    localctx.index.append(localctx._expression)
                    self.state = 16025
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 16021
                        self.match(PlSqlParser.COMMA)
                        self.state = 16022
                        localctx._expression = self.expression()
                        localctx.index.append(localctx._expression)
                        self.state = 16027
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 16028
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [2318]:
                self.state = 16032
                self.match(PlSqlParser.TRIM)
                self.state = 16037
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 16033
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 16034
                    localctx._expression = self.expression()
                    localctx.index.append(localctx._expression)
                    self.state = 16035
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Explain_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXPLAIN(self):
            return self.getToken(PlSqlParser.EXPLAIN, 0)

        def PLAN(self):
            return self.getToken(PlSqlParser.PLAN, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def update_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Update_statementContext,0)


        def delete_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Delete_statementContext,0)


        def insert_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Insert_statementContext,0)


        def merge_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_statementContext,0)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def STATEMENT_ID(self):
            return self.getToken(PlSqlParser.STATEMENT_ID, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_explain_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExplain_statement" ):
                listener.enterExplain_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExplain_statement" ):
                listener.exitExplain_statement(self)




    def explain_statement(self):

        localctx = PlSqlParser.Explain_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1840, self.RULE_explain_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16041
            self.match(PlSqlParser.EXPLAIN)
            self.state = 16042
            self.match(PlSqlParser.PLAN)
            self.state = 16047
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1590:
                self.state = 16043
                self.match(PlSqlParser.SET)
                self.state = 16044
                self.match(PlSqlParser.STATEMENT_ID)
                self.state = 16045
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 16046
                self.quoted_string()


            self.state = 16051
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==735:
                self.state = 16049
                self.match(PlSqlParser.INTO)
                self.state = 16050
                self.tableview_name()


            self.state = 16053
            self.match(PlSqlParser.FOR)
            self.state = 16059
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1569, 2212, 2347]:
                self.state = 16054
                self.select_statement()
                pass
            elif token in [2114]:
                self.state = 16055
                self.update_statement()
                pass
            elif token in [381]:
                self.state = 16056
                self.delete_statement()
                pass
            elif token in [713]:
                self.state = 16057
                self.insert_statement()
                pass
            elif token in [892]:
                self.state = 16058
                self.merge_statement()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Select_only_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def with_clause(self):
            return self.getTypedRuleContext(PlSqlParser.With_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_select_only_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelect_only_statement" ):
                listener.enterSelect_only_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelect_only_statement" ):
                listener.exitSelect_only_statement(self)




    def select_only_statement(self):

        localctx = PlSqlParser.Select_only_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1842, self.RULE_select_only_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16062
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 16061
                self.with_clause()


            self.state = 16064
            self.subquery()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Select_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def select_only_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_only_statementContext,0)


        def for_update_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.For_update_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.For_update_clauseContext,i)


        def order_by_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Order_by_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,i)


        def offset_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Offset_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Offset_clauseContext,i)


        def fetch_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Fetch_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Fetch_clauseContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_select_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelect_statement" ):
                listener.enterSelect_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelect_statement" ):
                listener.exitSelect_statement(self)




    def select_statement(self):

        localctx = PlSqlParser.Select_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1844, self.RULE_select_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16066
            self.select_only_statement()
            self.state = 16073
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==549 or _la==580 or _la==1179 or _la==1233:
                self.state = 16071
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [580]:
                    self.state = 16067
                    self.for_update_clause()
                    pass
                elif token in [1233]:
                    self.state = 16068
                    self.order_by_clause()
                    pass
                elif token in [1179]:
                    self.state = 16069
                    self.offset_clause()
                    pass
                elif token in [549]:
                    self.state = 16070
                    self.fetch_clause()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 16075
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class With_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def with_factoring_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.With_factoring_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.With_factoring_clauseContext,i)


        def function_body(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Function_bodyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Function_bodyContext,i)


        def procedure_body(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Procedure_bodyContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Procedure_bodyContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_with_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWith_clause" ):
                listener.enterWith_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWith_clause" ):
                listener.exitWith_clause(self)




    def with_clause(self):

        localctx = PlSqlParser.With_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1846, self.RULE_with_clause)
        self._la = 0 # Token type
        try:
            self.state = 16109
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2180,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16076
                self.match(PlSqlParser.WITH)
                self.state = 16081
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2174,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 16079
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [592]:
                            self.state = 16077
                            self.function_body()
                            pass
                        elif token in [1386]:
                            self.state = 16078
                            self.procedure_body()
                            pass
                        else:
                            raise NoViableAltException(self)
                 
                    self.state = 16083
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2174,self._ctx)

                self.state = 16084
                self.with_factoring_clause()
                self.state = 16089
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 16085
                    self.match(PlSqlParser.COMMA)
                    self.state = 16086
                    self.with_factoring_clause()
                    self.state = 16091
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16092
                self.match(PlSqlParser.WITH)
                self.state = 16095 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 16095
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [592]:
                            self.state = 16093
                            self.function_body()
                            pass
                        elif token in [1386]:
                            self.state = 16094
                            self.procedure_body()
                            pass
                        else:
                            raise NoViableAltException(self)


                    else:
                        raise NoViableAltException(self)
                    self.state = 16097 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2177,self._ctx)

                self.state = 16107
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2372 or _la==2378:
                    self.state = 16099
                    self.with_factoring_clause()
                    self.state = 16104
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 16100
                        self.match(PlSqlParser.COMMA)
                        self.state = 16101
                        self.with_factoring_clause()
                        self.state = 16106
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)



                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class With_factoring_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def subquery_factoring_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Subquery_factoring_clauseContext,0)


        def subav_factoring_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Subav_factoring_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_with_factoring_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWith_factoring_clause" ):
                listener.enterWith_factoring_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWith_factoring_clause" ):
                listener.exitWith_factoring_clause(self)




    def with_factoring_clause(self):

        localctx = PlSqlParser.With_factoring_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1848, self.RULE_with_factoring_clause)
        try:
            self.state = 16113
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2181,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16111
                self.subquery_factoring_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16112
                self.subav_factoring_clause()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subquery_factoring_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def query_name(self):
            return self.getTypedRuleContext(PlSqlParser.Query_nameContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def search_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Search_clauseContext,0)


        def cycle_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Cycle_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subquery_factoring_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubquery_factoring_clause" ):
                listener.enterSubquery_factoring_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubquery_factoring_clause" ):
                listener.exitSubquery_factoring_clause(self)




    def subquery_factoring_clause(self):

        localctx = PlSqlParser.Subquery_factoring_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1850, self.RULE_subquery_factoring_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16115
            self.query_name()
            self.state = 16117
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 16116
                self.paren_column_list()


            self.state = 16119
            self.match(PlSqlParser.AS)
            self.state = 16120
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16121
            self.subquery()
            self.state = 16123
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1233:
                self.state = 16122
                self.order_by_clause()


            self.state = 16125
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 16127
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1557:
                self.state = 16126
                self.search_clause()


            self.state = 16130
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==331:
                self.state = 16129
                self.cycle_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Search_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEARCH(self):
            return self.getToken(PlSqlParser.SEARCH, 0)

        def FIRST(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.FIRST)
            else:
                return self.getToken(PlSqlParser.FIRST, i)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def DEPTH(self):
            return self.getToken(PlSqlParser.DEPTH, 0)

        def BREADTH(self):
            return self.getToken(PlSqlParser.BREADTH, 0)

        def ASC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ASC)
            else:
                return self.getToken(PlSqlParser.ASC, i)

        def DESC(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DESC)
            else:
                return self.getToken(PlSqlParser.DESC, i)

        def NULLS(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULLS)
            else:
                return self.getToken(PlSqlParser.NULLS, i)

        def LAST(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LAST)
            else:
                return self.getToken(PlSqlParser.LAST, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_search_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSearch_clause" ):
                listener.enterSearch_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSearch_clause" ):
                listener.exitSearch_clause(self)




    def search_clause(self):

        localctx = PlSqlParser.Search_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1852, self.RULE_search_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16132
            self.match(PlSqlParser.SEARCH)
            self.state = 16133
            _la = self._input.LA(1)
            if not(_la==146 or _la==387):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 16134
            self.match(PlSqlParser.FIRST)
            self.state = 16135
            self.match(PlSqlParser.BY)
            self.state = 16136
            self.column_name()
            self.state = 16138
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==68:
                self.state = 16137
                self.match(PlSqlParser.ASC)


            self.state = 16141
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==391:
                self.state = 16140
                self.match(PlSqlParser.DESC)


            self.state = 16145
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2188,self._ctx)
            if la_ == 1:
                self.state = 16143
                self.match(PlSqlParser.NULLS)
                self.state = 16144
                self.match(PlSqlParser.FIRST)


            self.state = 16149
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1163:
                self.state = 16147
                self.match(PlSqlParser.NULLS)
                self.state = 16148
                self.match(PlSqlParser.LAST)


            self.state = 16169
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16151
                self.match(PlSqlParser.COMMA)
                self.state = 16152
                self.column_name()
                self.state = 16154
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==68:
                    self.state = 16153
                    self.match(PlSqlParser.ASC)


                self.state = 16157
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==391:
                    self.state = 16156
                    self.match(PlSqlParser.DESC)


                self.state = 16161
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2192,self._ctx)
                if la_ == 1:
                    self.state = 16159
                    self.match(PlSqlParser.NULLS)
                    self.state = 16160
                    self.match(PlSqlParser.FIRST)


                self.state = 16165
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1163:
                    self.state = 16163
                    self.match(PlSqlParser.NULLS)
                    self.state = 16164
                    self.match(PlSqlParser.LAST)


                self.state = 16171
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16172
            self.match(PlSqlParser.SET)
            self.state = 16173
            self.column_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cycle_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CYCLE(self):
            return self.getToken(PlSqlParser.CYCLE, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cycle_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCycle_clause" ):
                listener.enterCycle_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCycle_clause" ):
                listener.exitCycle_clause(self)




    def cycle_clause(self):

        localctx = PlSqlParser.Cycle_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1854, self.RULE_cycle_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16175
            self.match(PlSqlParser.CYCLE)
            self.state = 16176
            self.column_list()
            self.state = 16177
            self.match(PlSqlParser.SET)
            self.state = 16178
            self.column_name()
            self.state = 16179
            self.match(PlSqlParser.TO)
            self.state = 16180
            self.expression()
            self.state = 16181
            self.match(PlSqlParser.DEFAULT)
            self.state = 16182
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subav_factoring_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.subav_name = None # Id_expressionContext

        def ANALYTIC(self):
            return self.getToken(PlSqlParser.ANALYTIC, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subav_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Subav_clauseContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subav_factoring_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubav_factoring_clause" ):
                listener.enterSubav_factoring_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubav_factoring_clause" ):
                listener.exitSubav_factoring_clause(self)




    def subav_factoring_clause(self):

        localctx = PlSqlParser.Subav_factoring_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1856, self.RULE_subav_factoring_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16184
            localctx.subav_name = self.id_expression()
            self.state = 16185
            self.match(PlSqlParser.ANALYTIC)
            self.state = 16186
            self.match(PlSqlParser.VIEW)
            self.state = 16187
            self.match(PlSqlParser.AS)
            self.state = 16188
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16189
            self.subav_clause()
            self.state = 16190
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subav_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.subav_name = None # Object_nameContext

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Object_nameContext,0)


        def hierarchies_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Hierarchies_clauseContext,0)


        def filter_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Filter_clausesContext,0)


        def add_calcs_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Add_calcs_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subav_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubav_clause" ):
                listener.enterSubav_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubav_clause" ):
                listener.exitSubav_clause(self)




    def subav_clause(self):

        localctx = PlSqlParser.Subav_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1858, self.RULE_subav_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16192
            self.match(PlSqlParser.USING)
            self.state = 16193
            localctx.subav_name = self.object_name()
            self.state = 16195
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==632:
                self.state = 16194
                self.hierarchies_clause()


            self.state = 16198
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==555:
                self.state = 16197
                self.filter_clauses()


            self.state = 16201
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==21:
                self.state = 16200
                self.add_calcs_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hierarchies_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self._object_name = None # Object_nameContext
            self.hier_alias = list() # of Object_nameContexts

        def HIERARCHIES(self):
            return self.getToken(PlSqlParser.HIERARCHIES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def object_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Object_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Object_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_hierarchies_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHierarchies_clause" ):
                listener.enterHierarchies_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHierarchies_clause" ):
                listener.exitHierarchies_clause(self)




    def hierarchies_clause(self):

        localctx = PlSqlParser.Hierarchies_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1860, self.RULE_hierarchies_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16203
            self.match(PlSqlParser.HIERARCHIES)
            self.state = 16204
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16205
            localctx._object_name = self.object_name()
            localctx.hier_alias.append(localctx._object_name)
            self.state = 16210
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16206
                self.match(PlSqlParser.COMMA)
                self.state = 16207
                localctx._object_name = self.object_name()
                localctx.hier_alias.append(localctx._object_name)
                self.state = 16212
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16213
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Filter_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FILTER(self):
            return self.getToken(PlSqlParser.FILTER, 0)

        def FACT(self):
            return self.getToken(PlSqlParser.FACT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def filter_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Filter_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Filter_clauseContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_filter_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFilter_clauses" ):
                listener.enterFilter_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFilter_clauses" ):
                listener.exitFilter_clauses(self)




    def filter_clauses(self):

        localctx = PlSqlParser.Filter_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1862, self.RULE_filter_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16215
            self.match(PlSqlParser.FILTER)
            self.state = 16216
            self.match(PlSqlParser.FACT)
            self.state = 16217
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16218
            self.filter_clause()
            self.state = 16223
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16219
                self.match(PlSqlParser.COMMA)
                self.state = 16220
                self.filter_clause()
                self.state = 16225
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16226
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Filter_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.hier_alias = None # Object_nameContext

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def MEASURES(self):
            return self.getToken(PlSqlParser.MEASURES, 0)

        def object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Object_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_filter_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFilter_clause" ):
                listener.enterFilter_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFilter_clause" ):
                listener.exitFilter_clause(self)




    def filter_clause(self):

        localctx = PlSqlParser.Filter_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1864, self.RULE_filter_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16230
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2200,self._ctx)
            if la_ == 1:
                self.state = 16228
                self.match(PlSqlParser.MEASURES)
                pass

            elif la_ == 2:
                self.state = 16229
                localctx.hier_alias = self.object_name()
                pass


            self.state = 16232
            self.match(PlSqlParser.TO)
            self.state = 16233
            self.condition()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_calcs_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def MEASURES(self):
            return self.getToken(PlSqlParser.MEASURES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def add_calc_meas_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Add_calc_meas_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Add_calc_meas_clauseContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_add_calcs_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_calcs_clause" ):
                listener.enterAdd_calcs_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_calcs_clause" ):
                listener.exitAdd_calcs_clause(self)




    def add_calcs_clause(self):

        localctx = PlSqlParser.Add_calcs_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1866, self.RULE_add_calcs_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16235
            self.match(PlSqlParser.ADD)
            self.state = 16236
            self.match(PlSqlParser.MEASURES)
            self.state = 16237
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16238
            self.add_calc_meas_clause()
            self.state = 16243
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16239
                self.match(PlSqlParser.COMMA)
                self.state = 16240
                self.add_calc_meas_clause()
                self.state = 16245
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16246
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Add_calc_meas_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.meas_name = None # Id_expressionContext

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_add_calc_meas_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAdd_calc_meas_clause" ):
                listener.enterAdd_calc_meas_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAdd_calc_meas_clause" ):
                listener.exitAdd_calc_meas_clause(self)




    def add_calc_meas_clause(self):

        localctx = PlSqlParser.Add_calc_meas_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1868, self.RULE_add_calc_meas_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16248
            localctx.meas_name = self.id_expression()
            self.state = 16249
            self.match(PlSqlParser.AS)
            self.state = 16250
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16251
            self.expression()
            self.state = 16252
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class SubqueryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def subquery_basic_elements(self):
            return self.getTypedRuleContext(PlSqlParser.Subquery_basic_elementsContext,0)


        def subquery_operation_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Subquery_operation_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Subquery_operation_partContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subquery

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubquery" ):
                listener.enterSubquery(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubquery" ):
                listener.exitSubquery(self)




    def subquery(self):

        localctx = PlSqlParser.SubqueryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1870, self.RULE_subquery)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16254
            self.subquery_basic_elements()
            self.state = 16258
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==732 or _la==902 or _la==2090:
                self.state = 16255
                self.subquery_operation_part()
                self.state = 16260
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subquery_basic_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def query_block(self):
            return self.getTypedRuleContext(PlSqlParser.Query_blockContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_subquery_basic_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubquery_basic_elements" ):
                listener.enterSubquery_basic_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubquery_basic_elements" ):
                listener.exitSubquery_basic_elements(self)




    def subquery_basic_elements(self):

        localctx = PlSqlParser.Subquery_basic_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1872, self.RULE_subquery_basic_elements)
        try:
            self.state = 16266
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1569]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16261
                self.query_block()
                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16262
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16263
                self.subquery()
                self.state = 16264
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subquery_operation_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def subquery_basic_elements(self):
            return self.getTypedRuleContext(PlSqlParser.Subquery_basic_elementsContext,0)


        def UNION(self):
            return self.getToken(PlSqlParser.UNION, 0)

        def INTERSECT(self):
            return self.getToken(PlSqlParser.INTERSECT, 0)

        def MINUS(self):
            return self.getToken(PlSqlParser.MINUS, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_subquery_operation_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubquery_operation_part" ):
                listener.enterSubquery_operation_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubquery_operation_part" ):
                listener.exitSubquery_operation_part(self)




    def subquery_operation_part(self):

        localctx = PlSqlParser.Subquery_operation_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1874, self.RULE_subquery_operation_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16274
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2090]:
                self.state = 16268
                self.match(PlSqlParser.UNION)
                self.state = 16270
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==38:
                    self.state = 16269
                    self.match(PlSqlParser.ALL)


                pass
            elif token in [732]:
                self.state = 16272
                self.match(PlSqlParser.INTERSECT)
                pass
            elif token in [902]:
                self.state = 16273
                self.match(PlSqlParser.MINUS)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 16276
            self.subquery_basic_elements()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Query_blockContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SELECT(self):
            return self.getToken(PlSqlParser.SELECT, 0)

        def selected_list(self):
            return self.getTypedRuleContext(PlSqlParser.Selected_listContext,0)


        def into_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Into_clauseContext,0)


        def from_clause(self):
            return self.getTypedRuleContext(PlSqlParser.From_clauseContext,0)


        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def hierarchical_query_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Hierarchical_query_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Hierarchical_query_clauseContext,i)


        def group_by_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Group_by_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Group_by_clauseContext,i)


        def model_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Model_clauseContext,0)


        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def offset_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Offset_clauseContext,0)


        def fetch_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Fetch_clauseContext,0)


        def DISTINCT(self):
            return self.getToken(PlSqlParser.DISTINCT, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_query_block

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuery_block" ):
                listener.enterQuery_block(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuery_block" ):
                listener.exitQuery_block(self)




    def query_block(self):

        localctx = PlSqlParser.Query_blockContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1876, self.RULE_query_block)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16278
            self.match(PlSqlParser.SELECT)
            self.state = 16280
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2206,self._ctx)
            if la_ == 1:
                self.state = 16279
                _la = self._input.LA(1)
                if not(_la==38 or _la==417 or _la==2091):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 16282
            self.selected_list()
            self.state = 16284
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2207,self._ctx)
            if la_ == 1:
                self.state = 16283
                self.into_clause()


            self.state = 16287
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2208,self._ctx)
            if la_ == 1:
                self.state = 16286
                self.from_clause()


            self.state = 16290
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2209,self._ctx)
            if la_ == 1:
                self.state = 16289
                self.where_clause()


            self.state = 16296
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2211,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 16294
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [265, 1654]:
                        self.state = 16292
                        self.hierarchical_query_clause()
                        pass
                    elif token in [609, 622]:
                        self.state = 16293
                        self.group_by_clause()
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 16298
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2211,self._ctx)

            self.state = 16300
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2212,self._ctx)
            if la_ == 1:
                self.state = 16299
                self.model_clause()


            self.state = 16303
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2213,self._ctx)
            if la_ == 1:
                self.state = 16302
                self.order_by_clause()


            self.state = 16306
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2214,self._ctx)
            if la_ == 1:
                self.state = 16305
                self.offset_clause()


            self.state = 16309
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2215,self._ctx)
            if la_ == 1:
                self.state = 16308
                self.fetch_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Selected_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def select_list_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Select_list_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Select_list_elementsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_selected_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelected_list" ):
                listener.enterSelected_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelected_list" ):
                listener.exitSelected_list(self)




    def selected_list(self):

        localctx = PlSqlParser.Selected_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1878, self.RULE_selected_list)
        try:
            self.state = 16320
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2350]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16311
                self.match(PlSqlParser.ASTERISK)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16312
                self.select_list_elements()
                self.state = 16317
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2216,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 16313
                        self.match(PlSqlParser.COMMA)
                        self.state = 16314
                        self.select_list_elements() 
                    self.state = 16319
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2216,self._ctx)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class From_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def table_ref_list(self):
            return self.getTypedRuleContext(PlSqlParser.Table_ref_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_from_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFrom_clause" ):
                listener.enterFrom_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFrom_clause" ):
                listener.exitFrom_clause(self)




    def from_clause(self):

        localctx = PlSqlParser.From_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1880, self.RULE_from_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16322
            self.match(PlSqlParser.FROM)
            self.state = 16323
            self.table_ref_list()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Select_list_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def column_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_select_list_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelect_list_elements" ):
                listener.enterSelect_list_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelect_list_elements" ):
                listener.exitSelect_list_elements(self)




    def select_list_elements(self):

        localctx = PlSqlParser.Select_list_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1882, self.RULE_select_list_elements)
        try:
            self.state = 16333
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2219,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16325
                self.tableview_name()
                self.state = 16326
                self.match(PlSqlParser.PERIOD)
                self.state = 16327
                self.match(PlSqlParser.ASTERISK)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16329
                self.expression()
                self.state = 16331
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2218,self._ctx)
                if la_ == 1:
                    self.state = 16330
                    self.column_alias()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_ref_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_ref(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Table_refContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Table_refContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_table_ref_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_ref_list" ):
                listener.enterTable_ref_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_ref_list" ):
                listener.exitTable_ref_list(self)




    def table_ref_list(self):

        localctx = PlSqlParser.Table_ref_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1884, self.RULE_table_ref_list)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16335
            self.table_ref()
            self.state = 16340
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2220,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 16336
                    self.match(PlSqlParser.COMMA)
                    self.state = 16337
                    self.table_ref() 
                self.state = 16342
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2220,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_refContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_ref_aux(self):
            return self.getTypedRuleContext(PlSqlParser.Table_ref_auxContext,0)


        def join_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Join_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Join_clauseContext,i)


        def pivot_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_clauseContext,0)


        def unpivot_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Unpivot_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_ref

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_ref" ):
                listener.enterTable_ref(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_ref" ):
                listener.exitTable_ref(self)




    def table_ref(self):

        localctx = PlSqlParser.Table_refContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1886, self.RULE_table_ref)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16343
            self.table_ref_aux()
            self.state = 16347
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2221,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 16344
                    self.join_clause() 
                self.state = 16349
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2221,self._ctx)

            self.state = 16352
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2222,self._ctx)
            if la_ == 1:
                self.state = 16350
                self.pivot_clause()

            elif la_ == 2:
                self.state = 16351
                self.unpivot_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_ref_auxContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_ref_aux_internal(self):
            return self.getTypedRuleContext(PlSqlParser.Table_ref_aux_internalContext,0)


        def flashback_query_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Flashback_query_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Flashback_query_clauseContext,i)


        def table_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_ref_aux

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_ref_aux" ):
                listener.enterTable_ref_aux(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_ref_aux" ):
                listener.exitTable_ref_aux(self)




    def table_ref_aux(self):

        localctx = PlSqlParser.Table_ref_auxContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1888, self.RULE_table_ref_aux)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16354
            self.table_ref_aux_internal()
            self.state = 16358
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2223,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 16355
                    self.flashback_query_clause() 
                self.state = 16360
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2223,self._ctx)

            self.state = 16362
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2224,self._ctx)
            if la_ == 1:
                self.state = 16361
                self.table_alias()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_ref_aux_internalContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_ref_aux_internal

     
        def copyFrom(self, ctx:ParserRuleContext):
            super().copyFrom(ctx)



    class Table_ref_aux_internal_oneContext(Table_ref_aux_internalContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a PlSqlParser.Table_ref_aux_internalContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def dml_table_expression_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dml_table_expression_clauseContext,0)

        def pivot_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_clauseContext,0)

        def unpivot_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Unpivot_clauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_ref_aux_internal_one" ):
                listener.enterTable_ref_aux_internal_one(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_ref_aux_internal_one" ):
                listener.exitTable_ref_aux_internal_one(self)


    class Table_ref_aux_internal_threContext(Table_ref_aux_internalContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a PlSqlParser.Table_ref_aux_internalContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)
        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)
        def dml_table_expression_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dml_table_expression_clauseContext,0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_ref_aux_internal_thre" ):
                listener.enterTable_ref_aux_internal_thre(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_ref_aux_internal_thre" ):
                listener.exitTable_ref_aux_internal_thre(self)


    class Table_ref_aux_internal_twoContext(Table_ref_aux_internalContext):

        def __init__(self, parser, ctx:ParserRuleContext): # actually a PlSqlParser.Table_ref_aux_internalContext
            super().__init__(parser)
            self.copyFrom(ctx)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)
        def table_ref(self):
            return self.getTypedRuleContext(PlSqlParser.Table_refContext,0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)
        def subquery_operation_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Subquery_operation_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Subquery_operation_partContext,i)

        def pivot_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_clauseContext,0)

        def unpivot_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Unpivot_clauseContext,0)


        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_ref_aux_internal_two" ):
                listener.enterTable_ref_aux_internal_two(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_ref_aux_internal_two" ):
                listener.exitTable_ref_aux_internal_two(self)



    def table_ref_aux_internal(self):

        localctx = PlSqlParser.Table_ref_aux_internalContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1890, self.RULE_table_ref_aux_internal)
        self._la = 0 # Token type
        try:
            self.state = 16387
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2228,self._ctx)
            if la_ == 1:
                localctx = PlSqlParser.Table_ref_aux_internal_oneContext(self, localctx)
                self.enterOuterAlt(localctx, 1)
                self.state = 16364
                self.dml_table_expression_clause()
                self.state = 16367
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2225,self._ctx)
                if la_ == 1:
                    self.state = 16365
                    self.pivot_clause()

                elif la_ == 2:
                    self.state = 16366
                    self.unpivot_clause()


                pass

            elif la_ == 2:
                localctx = PlSqlParser.Table_ref_aux_internal_twoContext(self, localctx)
                self.enterOuterAlt(localctx, 2)
                self.state = 16369
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16370
                self.table_ref()
                self.state = 16374
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==732 or _la==902 or _la==2090:
                    self.state = 16371
                    self.subquery_operation_part()
                    self.state = 16376
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 16377
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 16380
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2227,self._ctx)
                if la_ == 1:
                    self.state = 16378
                    self.pivot_clause()

                elif la_ == 2:
                    self.state = 16379
                    self.unpivot_clause()


                pass

            elif la_ == 3:
                localctx = PlSqlParser.Table_ref_aux_internal_threContext(self, localctx)
                self.enterOuterAlt(localctx, 3)
                self.state = 16382
                self.match(PlSqlParser.ONLY)
                self.state = 16383
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16384
                self.dml_table_expression_clause()
                self.state = 16385
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Join_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def table_ref_aux(self):
            return self.getTypedRuleContext(PlSqlParser.Table_ref_auxContext,0)


        def query_partition_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Query_partition_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Query_partition_clauseContext,i)


        def INNER(self):
            return self.getToken(PlSqlParser.INNER, 0)

        def outer_join_type(self):
            return self.getTypedRuleContext(PlSqlParser.Outer_join_typeContext,0)


        def join_on_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Join_on_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Join_on_partContext,i)


        def join_using_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Join_using_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Join_using_partContext,i)


        def CROSS(self):
            return self.getToken(PlSqlParser.CROSS, 0)

        def NATURAL(self):
            return self.getToken(PlSqlParser.NATURAL, 0)

        def APPLY(self):
            return self.getToken(PlSqlParser.APPLY, 0)

        def OUTER(self):
            return self.getToken(PlSqlParser.OUTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_join_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoin_clause" ):
                listener.enterJoin_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoin_clause" ):
                listener.exitJoin_clause(self)




    def join_clause(self):

        localctx = PlSqlParser.Join_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1892, self.RULE_join_clause)
        self._la = 0 # Token type
        try:
            self.state = 16414
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2235,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16390
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1275:
                    self.state = 16389
                    self.query_partition_clause()


                self.state = 16393
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==311 or _la==950:
                    self.state = 16392
                    _la = self._input.LA(1)
                    if not(_la==311 or _la==950):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 16397
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [707]:
                    self.state = 16395
                    self.match(PlSqlParser.INNER)
                    pass
                elif token in [590, 791, 1514]:
                    self.state = 16396
                    self.outer_join_type()
                    pass
                elif token in [748]:
                    pass
                else:
                    pass
                self.state = 16399
                self.match(PlSqlParser.JOIN)
                self.state = 16400
                self.table_ref_aux()
                self.state = 16402
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2232,self._ctx)
                if la_ == 1:
                    self.state = 16401
                    self.query_partition_clause()


                self.state = 16408
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2234,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 16406
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [1193]:
                            self.state = 16404
                            self.join_on_part()
                            pass
                        elif token in [2153]:
                            self.state = 16405
                            self.join_using_part()
                            pass
                        else:
                            raise NoViableAltException(self)
                 
                    self.state = 16410
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2234,self._ctx)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16411
                _la = self._input.LA(1)
                if not(_la==311 or _la==1243):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 16412
                self.match(PlSqlParser.APPLY)
                self.state = 16413
                self.table_ref_aux()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Join_on_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_join_on_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoin_on_part" ):
                listener.enterJoin_on_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoin_on_part" ):
                listener.exitJoin_on_part(self)




    def join_on_part(self):

        localctx = PlSqlParser.Join_on_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1894, self.RULE_join_on_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16416
            self.match(PlSqlParser.ON)
            self.state = 16417
            self.condition()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Join_using_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_join_using_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJoin_using_part" ):
                listener.enterJoin_using_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJoin_using_part" ):
                listener.exitJoin_using_part(self)




    def join_using_part(self):

        localctx = PlSqlParser.Join_using_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1896, self.RULE_join_using_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16419
            self.match(PlSqlParser.USING)
            self.state = 16420
            self.paren_column_list()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Outer_join_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FULL(self):
            return self.getToken(PlSqlParser.FULL, 0)

        def LEFT(self):
            return self.getToken(PlSqlParser.LEFT, 0)

        def RIGHT(self):
            return self.getToken(PlSqlParser.RIGHT, 0)

        def OUTER(self):
            return self.getToken(PlSqlParser.OUTER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_outer_join_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOuter_join_type" ):
                listener.enterOuter_join_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOuter_join_type" ):
                listener.exitOuter_join_type(self)




    def outer_join_type(self):

        localctx = PlSqlParser.Outer_join_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1898, self.RULE_outer_join_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16422
            _la = self._input.LA(1)
            if not(_la==590 or _la==791 or _la==1514):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 16424
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1243:
                self.state = 16423
                self.match(PlSqlParser.OUTER)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Query_partition_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_query_partition_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuery_partition_clause" ):
                listener.enterQuery_partition_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuery_partition_clause" ):
                listener.exitQuery_partition_clause(self)




    def query_partition_clause(self):

        localctx = PlSqlParser.Query_partition_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1900, self.RULE_query_partition_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16426
            self.match(PlSqlParser.PARTITION)
            self.state = 16427
            self.match(PlSqlParser.BY)
            self.state = 16435
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2238,self._ctx)
            if la_ == 1:
                self.state = 16428
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16431
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2237,self._ctx)
                if la_ == 1:
                    self.state = 16429
                    self.subquery()

                elif la_ == 2:
                    self.state = 16430
                    self.expressions()


                self.state = 16433
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 16434
                self.expressions()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Flashback_query_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VERSIONS(self):
            return self.getToken(PlSqlParser.VERSIONS, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def PERIOD_KEYWORD(self):
            return self.getToken(PlSqlParser.PERIOD_KEYWORD, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def BETWEEN(self):
            return self.getToken(PlSqlParser.BETWEEN, 0)

        def SCN(self):
            return self.getToken(PlSqlParser.SCN, 0)

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def SNAPSHOT(self):
            return self.getToken(PlSqlParser.SNAPSHOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_flashback_query_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFlashback_query_clause" ):
                listener.enterFlashback_query_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFlashback_query_clause" ):
                listener.exitFlashback_query_clause(self)




    def flashback_query_clause(self):

        localctx = PlSqlParser.Flashback_query_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1902, self.RULE_flashback_query_clause)
        self._la = 0 # Token type
        try:
            self.state = 16462
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2187]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16437
                self.match(PlSqlParser.VERSIONS)
                self.state = 16445
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1313]:
                    self.state = 16438
                    self.match(PlSqlParser.PERIOD_KEYWORD)
                    self.state = 16439
                    self.match(PlSqlParser.FOR)
                    self.state = 16440
                    self.column_name()
                    self.state = 16441
                    self.match(PlSqlParser.BETWEEN)
                    pass
                elif token in [115]:
                    self.state = 16443
                    self.match(PlSqlParser.BETWEEN)
                    self.state = 16444
                    _la = self._input.LA(1)
                    if not(_la==1549 or _la==2020):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 16447
                self.expression()
                self.state = 16448
                self.match(PlSqlParser.AND)
                self.state = 16449
                self.expression()
                pass
            elif token in [67]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16451
                self.match(PlSqlParser.AS)
                self.state = 16452
                self.match(PlSqlParser.OF)
                self.state = 16460
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1549, 1624, 2020]:
                    self.state = 16453
                    _la = self._input.LA(1)
                    if not(_la==1549 or _la==1624 or _la==2020):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 16454
                    self.expression()
                    pass
                elif token in [1313]:
                    self.state = 16455
                    self.match(PlSqlParser.PERIOD_KEYWORD)
                    self.state = 16456
                    self.match(PlSqlParser.FOR)
                    self.state = 16457
                    self.column_name()
                    self.state = 16458
                    self.expression()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pivot_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PIVOT(self):
            return self.getToken(PlSqlParser.PIVOT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def pivot_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Pivot_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Pivot_elementContext,i)


        def pivot_for_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_for_clauseContext,0)


        def pivot_in_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_in_clauseContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def XML(self):
            return self.getToken(PlSqlParser.XML, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pivot_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPivot_clause" ):
                listener.enterPivot_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPivot_clause" ):
                listener.exitPivot_clause(self)




    def pivot_clause(self):

        localctx = PlSqlParser.Pivot_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1904, self.RULE_pivot_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16464
            self.match(PlSqlParser.PIVOT)
            self.state = 16466
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2254:
                self.state = 16465
                self.match(PlSqlParser.XML)


            self.state = 16468
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16469
            self.pivot_element()
            self.state = 16474
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16470
                self.match(PlSqlParser.COMMA)
                self.state = 16471
                self.pivot_element()
                self.state = 16476
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16477
            self.pivot_for_clause()
            self.state = 16478
            self.pivot_in_clause()
            self.state = 16479
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pivot_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def numeric_function(self):
            return self.getTypedRuleContext(PlSqlParser.Numeric_functionContext,0)


        def aggregate_function_name(self):
            return self.getTypedRuleContext(PlSqlParser.Aggregate_function_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def column_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_pivot_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPivot_element" ):
                listener.enterPivot_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPivot_element" ):
                listener.exitPivot_element(self)




    def pivot_element(self):

        localctx = PlSqlParser.Pivot_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1906, self.RULE_pivot_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16487
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2244,self._ctx)
            if la_ == 1:
                self.state = 16481
                self.numeric_function()
                pass

            elif la_ == 2:
                self.state = 16482
                self.aggregate_function_name()
                self.state = 16483
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16484
                self.expression()
                self.state = 16485
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


            self.state = 16490
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                self.state = 16489
                self.column_alias()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pivot_for_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_pivot_for_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPivot_for_clause" ):
                listener.enterPivot_for_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPivot_for_clause" ):
                listener.exitPivot_for_clause(self)




    def pivot_for_clause(self):

        localctx = PlSqlParser.Pivot_for_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1908, self.RULE_pivot_for_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16492
            self.match(PlSqlParser.FOR)
            self.state = 16495
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 16493
                self.column_name()
                pass
            elif token in [2347]:
                self.state = 16494
                self.paren_column_list()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pivot_in_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def ANY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ANY)
            else:
                return self.getToken(PlSqlParser.ANY, i)

        def pivot_in_clause_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Pivot_in_clause_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Pivot_in_clause_elementContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_pivot_in_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPivot_in_clause" ):
                listener.enterPivot_in_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPivot_in_clause" ):
                listener.exitPivot_in_clause(self)




    def pivot_in_clause(self):

        localctx = PlSqlParser.Pivot_in_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1910, self.RULE_pivot_in_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16497
            self.match(PlSqlParser.IN)
            self.state = 16498
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16516
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2249,self._ctx)
            if la_ == 1:
                self.state = 16499
                self.subquery()
                pass

            elif la_ == 2:
                self.state = 16500
                self.match(PlSqlParser.ANY)
                self.state = 16505
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 16501
                    self.match(PlSqlParser.COMMA)
                    self.state = 16502
                    self.match(PlSqlParser.ANY)
                    self.state = 16507
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                self.state = 16508
                self.pivot_in_clause_element()
                self.state = 16513
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 16509
                    self.match(PlSqlParser.COMMA)
                    self.state = 16510
                    self.pivot_in_clause_element()
                    self.state = 16515
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass


            self.state = 16518
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pivot_in_clause_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def pivot_in_clause_elements(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_in_clause_elementsContext,0)


        def column_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_pivot_in_clause_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPivot_in_clause_element" ):
                listener.enterPivot_in_clause_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPivot_in_clause_element" ):
                listener.exitPivot_in_clause_element(self)




    def pivot_in_clause_element(self):

        localctx = PlSqlParser.Pivot_in_clause_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1912, self.RULE_pivot_in_clause_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16520
            self.pivot_in_clause_elements()
            self.state = 16522
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                self.state = 16521
                self.column_alias()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Pivot_in_clause_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_pivot_in_clause_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPivot_in_clause_elements" ):
                listener.enterPivot_in_clause_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPivot_in_clause_elements" ):
                listener.exitPivot_in_clause_elements(self)




    def pivot_in_clause_elements(self):

        localctx = PlSqlParser.Pivot_in_clause_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1914, self.RULE_pivot_in_clause_elements)
        self._la = 0 # Token type
        try:
            self.state = 16530
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2252,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16524
                self.expression()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16525
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16527
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                    self.state = 16526
                    self.expressions()


                self.state = 16529
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unpivot_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNPIVOT(self):
            return self.getToken(PlSqlParser.UNPIVOT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def pivot_for_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Pivot_for_clauseContext,0)


        def unpivot_in_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Unpivot_in_clauseContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def NULLS(self):
            return self.getToken(PlSqlParser.NULLS, 0)

        def INCLUDE(self):
            return self.getToken(PlSqlParser.INCLUDE, 0)

        def EXCLUDE(self):
            return self.getToken(PlSqlParser.EXCLUDE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_unpivot_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnpivot_clause" ):
                listener.enterUnpivot_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnpivot_clause" ):
                listener.exitUnpivot_clause(self)




    def unpivot_clause(self):

        localctx = PlSqlParser.Unpivot_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1916, self.RULE_unpivot_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16532
            self.match(PlSqlParser.UNPIVOT)
            self.state = 16535
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==502 or _la==661:
                self.state = 16533
                _la = self._input.LA(1)
                if not(_la==502 or _la==661):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 16534
                self.match(PlSqlParser.NULLS)


            self.state = 16537
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16540
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 16538
                self.column_name()
                pass
            elif token in [2347]:
                self.state = 16539
                self.paren_column_list()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 16542
            self.pivot_for_clause()
            self.state = 16543
            self.unpivot_in_clause()
            self.state = 16544
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unpivot_in_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def unpivot_in_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Unpivot_in_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Unpivot_in_elementsContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_unpivot_in_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnpivot_in_clause" ):
                listener.enterUnpivot_in_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnpivot_in_clause" ):
                listener.exitUnpivot_in_clause(self)




    def unpivot_in_clause(self):

        localctx = PlSqlParser.Unpivot_in_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1918, self.RULE_unpivot_in_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16546
            self.match(PlSqlParser.IN)
            self.state = 16547
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16548
            self.unpivot_in_elements()
            self.state = 16553
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16549
                self.match(PlSqlParser.COMMA)
                self.state = 16550
                self.unpivot_in_elements()
                self.state = 16555
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16556
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unpivot_in_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def constant(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConstantContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConstantContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_unpivot_in_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnpivot_in_elements" ):
                listener.enterUnpivot_in_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnpivot_in_elements" ):
                listener.exitUnpivot_in_elements(self)




    def unpivot_in_elements(self):

        localctx = PlSqlParser.Unpivot_in_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1920, self.RULE_unpivot_in_elements)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16560
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 16558
                self.column_name()
                pass
            elif token in [2347]:
                self.state = 16559
                self.paren_column_list()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 16577
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 16562
                self.match(PlSqlParser.AS)
                self.state = 16575
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [344, 352, 368, 538, 733, 878, 906, 1162, 1588, 2020, 2068, 2336, 2341, 2342, 2343]:
                    self.state = 16563
                    self.constant()
                    pass
                elif token in [2347]:
                    self.state = 16564
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 16565
                    self.constant()
                    self.state = 16570
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    while _la==2353:
                        self.state = 16566
                        self.match(PlSqlParser.COMMA)
                        self.state = 16567
                        self.constant()
                        self.state = 16572
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)

                    self.state = 16573
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Hierarchical_query_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CONNECT(self):
            return self.getToken(PlSqlParser.CONNECT, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def NOCYCLE(self):
            return self.getToken(PlSqlParser.NOCYCLE, 0)

        def start_part(self):
            return self.getTypedRuleContext(PlSqlParser.Start_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_hierarchical_query_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHierarchical_query_clause" ):
                listener.enterHierarchical_query_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHierarchical_query_clause" ):
                listener.exitHierarchical_query_clause(self)




    def hierarchical_query_clause(self):

        localctx = PlSqlParser.Hierarchical_query_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1922, self.RULE_hierarchical_query_clause)
        try:
            self.state = 16596
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [265]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16579
                self.match(PlSqlParser.CONNECT)
                self.state = 16580
                self.match(PlSqlParser.BY)
                self.state = 16582
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2260,self._ctx)
                if la_ == 1:
                    self.state = 16581
                    self.match(PlSqlParser.NOCYCLE)


                self.state = 16584
                self.condition()
                self.state = 16586
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2261,self._ctx)
                if la_ == 1:
                    self.state = 16585
                    self.start_part()


                pass
            elif token in [1654]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16588
                self.start_part()
                self.state = 16589
                self.match(PlSqlParser.CONNECT)
                self.state = 16590
                self.match(PlSqlParser.BY)
                self.state = 16592
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2262,self._ctx)
                if la_ == 1:
                    self.state = 16591
                    self.match(PlSqlParser.NOCYCLE)


                self.state = 16594
                self.condition()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Start_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START(self):
            return self.getToken(PlSqlParser.START, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_start_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStart_part" ):
                listener.enterStart_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStart_part" ):
                listener.exitStart_part(self)




    def start_part(self):

        localctx = PlSqlParser.Start_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1924, self.RULE_start_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16598
            self.match(PlSqlParser.START)
            self.state = 16599
            self.match(PlSqlParser.WITH)
            self.state = 16600
            self.condition()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Group_by_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def group_by_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Group_by_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Group_by_elementsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def having_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Having_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_group_by_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGroup_by_clause" ):
                listener.enterGroup_by_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGroup_by_clause" ):
                listener.exitGroup_by_clause(self)




    def group_by_clause(self):

        localctx = PlSqlParser.Group_by_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1926, self.RULE_group_by_clause)
        try:
            self.state = 16628
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [609]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16602
                self.match(PlSqlParser.GROUP)
                self.state = 16603
                self.match(PlSqlParser.BY)
                self.state = 16604
                self.group_by_elements()
                self.state = 16609
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2264,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 16605
                        self.match(PlSqlParser.COMMA)
                        self.state = 16606
                        self.group_by_elements() 
                    self.state = 16611
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2264,self._ctx)

                self.state = 16613
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2265,self._ctx)
                if la_ == 1:
                    self.state = 16612
                    self.having_clause()


                pass
            elif token in [622]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16615
                self.having_clause()
                self.state = 16626
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2267,self._ctx)
                if la_ == 1:
                    self.state = 16616
                    self.match(PlSqlParser.GROUP)
                    self.state = 16617
                    self.match(PlSqlParser.BY)
                    self.state = 16618
                    self.group_by_elements()
                    self.state = 16623
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2266,self._ctx)
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt==1:
                            self.state = 16619
                            self.match(PlSqlParser.COMMA)
                            self.state = 16620
                            self.group_by_elements() 
                        self.state = 16625
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,2266,self._ctx)



                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Group_by_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def grouping_sets_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Grouping_sets_clauseContext,0)


        def rollup_cube_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Rollup_cube_clauseContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_group_by_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGroup_by_elements" ):
                listener.enterGroup_by_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGroup_by_elements" ):
                listener.exitGroup_by_elements(self)




    def group_by_elements(self):

        localctx = PlSqlParser.Group_by_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1928, self.RULE_group_by_elements)
        try:
            self.state = 16633
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2269,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16630
                self.grouping_sets_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16631
                self.rollup_cube_clause()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 16632
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rollup_cube_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def grouping_sets_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Grouping_sets_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Grouping_sets_elementsContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def ROLLUP(self):
            return self.getToken(PlSqlParser.ROLLUP, 0)

        def CUBE(self):
            return self.getToken(PlSqlParser.CUBE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_rollup_cube_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRollup_cube_clause" ):
                listener.enterRollup_cube_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRollup_cube_clause" ):
                listener.exitRollup_cube_clause(self)




    def rollup_cube_clause(self):

        localctx = PlSqlParser.Rollup_cube_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1930, self.RULE_rollup_cube_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16635
            _la = self._input.LA(1)
            if not(_la==315 or _la==1520):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 16636
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16637
            self.grouping_sets_elements()
            self.state = 16642
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16638
                self.match(PlSqlParser.COMMA)
                self.state = 16639
                self.grouping_sets_elements()
                self.state = 16644
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16645
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Grouping_sets_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def GROUPING(self):
            return self.getToken(PlSqlParser.GROUPING, 0)

        def SETS(self):
            return self.getToken(PlSqlParser.SETS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def grouping_sets_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Grouping_sets_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Grouping_sets_elementsContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_grouping_sets_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrouping_sets_clause" ):
                listener.enterGrouping_sets_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrouping_sets_clause" ):
                listener.exitGrouping_sets_clause(self)




    def grouping_sets_clause(self):

        localctx = PlSqlParser.Grouping_sets_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1932, self.RULE_grouping_sets_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16647
            self.match(PlSqlParser.GROUPING)
            self.state = 16648
            self.match(PlSqlParser.SETS)
            self.state = 16649
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16650
            self.grouping_sets_elements()
            self.state = 16655
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16651
                self.match(PlSqlParser.COMMA)
                self.state = 16652
                self.grouping_sets_elements()
                self.state = 16657
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16658
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Grouping_sets_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def rollup_cube_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Rollup_cube_clauseContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_grouping_sets_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrouping_sets_elements" ):
                listener.enterGrouping_sets_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrouping_sets_elements" ):
                listener.exitGrouping_sets_elements(self)




    def grouping_sets_elements(self):

        localctx = PlSqlParser.Grouping_sets_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1934, self.RULE_grouping_sets_elements)
        self._la = 0 # Token type
        try:
            self.state = 16667
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2273,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 16660
                self.rollup_cube_clause()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 16661
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16663
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                    self.state = 16662
                    self.expressions()


                self.state = 16665
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 16666
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Having_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def HAVING(self):
            return self.getToken(PlSqlParser.HAVING, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_having_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterHaving_clause" ):
                listener.enterHaving_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitHaving_clause" ):
                listener.exitHaving_clause(self)




    def having_clause(self):

        localctx = PlSqlParser.Having_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1936, self.RULE_having_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16669
            self.match(PlSqlParser.HAVING)
            self.state = 16670
            self.condition()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def main_model(self):
            return self.getTypedRuleContext(PlSqlParser.Main_modelContext,0)


        def cell_reference_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Cell_reference_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Cell_reference_optionsContext,i)


        def return_rows_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Return_rows_clauseContext,0)


        def reference_model(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Reference_modelContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Reference_modelContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_model_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_clause" ):
                listener.enterModel_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_clause" ):
                listener.exitModel_clause(self)




    def model_clause(self):

        localctx = PlSqlParser.Model_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1938, self.RULE_model_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16672
            self.match(PlSqlParser.MODEL)
            self.state = 16676
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==651 or _la==768 or _la==2091:
                self.state = 16673
                self.cell_reference_options()
                self.state = 16678
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16680
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1508:
                self.state = 16679
                self.return_rows_clause()


            self.state = 16685
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==1449:
                self.state = 16682
                self.reference_model()
                self.state = 16687
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16688
            self.main_model()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cell_reference_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NAV(self):
            return self.getToken(PlSqlParser.NAV, 0)

        def IGNORE(self):
            return self.getToken(PlSqlParser.IGNORE, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def SINGLE(self):
            return self.getToken(PlSqlParser.SINGLE, 0)

        def REFERENCE(self):
            return self.getToken(PlSqlParser.REFERENCE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cell_reference_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCell_reference_options" ):
                listener.enterCell_reference_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCell_reference_options" ):
                listener.exitCell_reference_options(self)




    def cell_reference_options(self):

        localctx = PlSqlParser.Cell_reference_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1940, self.RULE_cell_reference_options)
        self._la = 0 # Token type
        try:
            self.state = 16698
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [651, 768]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16690
                _la = self._input.LA(1)
                if not(_la==651 or _la==768):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 16691
                self.match(PlSqlParser.NAV)
                pass
            elif token in [2091]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16692
                self.match(PlSqlParser.UNIQUE)
                self.state = 16696
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [398]:
                    self.state = 16693
                    self.match(PlSqlParser.DIMENSION)
                    pass
                elif token in [1613]:
                    self.state = 16694
                    self.match(PlSqlParser.SINGLE)
                    self.state = 16695
                    self.match(PlSqlParser.REFERENCE)
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Return_rows_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def UPDATED(self):
            return self.getToken(PlSqlParser.UPDATED, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_return_rows_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReturn_rows_clause" ):
                listener.enterReturn_rows_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReturn_rows_clause" ):
                listener.exitReturn_rows_clause(self)




    def return_rows_clause(self):

        localctx = PlSqlParser.Return_rows_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1942, self.RULE_return_rows_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16700
            self.match(PlSqlParser.RETURN)
            self.state = 16701
            _la = self._input.LA(1)
            if not(_la==38 or _la==2113):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 16702
            self.match(PlSqlParser.ROWS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Reference_modelContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REFERENCE(self):
            return self.getToken(PlSqlParser.REFERENCE, 0)

        def reference_model_name(self):
            return self.getTypedRuleContext(PlSqlParser.Reference_model_nameContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def model_column_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Model_column_clausesContext,0)


        def cell_reference_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Cell_reference_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Cell_reference_optionsContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_reference_model

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReference_model" ):
                listener.enterReference_model(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReference_model" ):
                listener.exitReference_model(self)




    def reference_model(self):

        localctx = PlSqlParser.Reference_modelContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1944, self.RULE_reference_model)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16704
            self.match(PlSqlParser.REFERENCE)
            self.state = 16705
            self.reference_model_name()
            self.state = 16706
            self.match(PlSqlParser.ON)
            self.state = 16707
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16708
            self.subquery()
            self.state = 16709
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 16710
            self.model_column_clauses()
            self.state = 16714
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==651 or _la==768 or _la==2091:
                self.state = 16711
                self.cell_reference_options()
                self.state = 16716
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Main_modelContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def model_column_clauses(self):
            return self.getTypedRuleContext(PlSqlParser.Model_column_clausesContext,0)


        def model_rules_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Model_rules_clauseContext,0)


        def MAIN(self):
            return self.getToken(PlSqlParser.MAIN, 0)

        def main_model_name(self):
            return self.getTypedRuleContext(PlSqlParser.Main_model_nameContext,0)


        def cell_reference_options(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Cell_reference_optionsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Cell_reference_optionsContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_main_model

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMain_model" ):
                listener.enterMain_model(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMain_model" ):
                listener.exitMain_model(self)




    def main_model(self):

        localctx = PlSqlParser.Main_modelContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1946, self.RULE_main_model)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16719
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==849:
                self.state = 16717
                self.match(PlSqlParser.MAIN)
                self.state = 16718
                self.main_model_name()


            self.state = 16721
            self.model_column_clauses()
            self.state = 16725
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==651 or _la==768 or _la==2091:
                self.state = 16722
                self.cell_reference_options()
                self.state = 16727
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16728
            self.model_rules_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_column_clausesContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def model_column_list(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Model_column_listContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Model_column_listContext,i)


        def MEASURES(self):
            return self.getToken(PlSqlParser.MEASURES, 0)

        def model_column_partition_part(self):
            return self.getTypedRuleContext(PlSqlParser.Model_column_partition_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_model_column_clauses

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_column_clauses" ):
                listener.enterModel_column_clauses(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_column_clauses" ):
                listener.exitModel_column_clauses(self)




    def model_column_clauses(self):

        localctx = PlSqlParser.Model_column_clausesContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1948, self.RULE_model_column_clauses)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16731
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1275:
                self.state = 16730
                self.model_column_partition_part()


            self.state = 16733
            self.match(PlSqlParser.DIMENSION)
            self.state = 16734
            self.match(PlSqlParser.BY)
            self.state = 16735
            self.model_column_list()
            self.state = 16736
            self.match(PlSqlParser.MEASURES)
            self.state = 16737
            self.model_column_list()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_column_partition_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def model_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Model_column_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_model_column_partition_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_column_partition_part" ):
                listener.enterModel_column_partition_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_column_partition_part" ):
                listener.exitModel_column_partition_part(self)




    def model_column_partition_part(self):

        localctx = PlSqlParser.Model_column_partition_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1950, self.RULE_model_column_partition_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16739
            self.match(PlSqlParser.PARTITION)
            self.state = 16740
            self.match(PlSqlParser.BY)
            self.state = 16741
            self.model_column_list()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_column_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def model_column(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Model_columnContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Model_columnContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_model_column_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_column_list" ):
                listener.enterModel_column_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_column_list" ):
                listener.exitModel_column_list(self)




    def model_column_list(self):

        localctx = PlSqlParser.Model_column_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1952, self.RULE_model_column_list)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16743
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16744
            self.model_column()
            self.state = 16749
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 16745
                self.match(PlSqlParser.COMMA)
                self.state = 16746
                self.model_column()
                self.state = 16751
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 16752
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_columnContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def query_block(self):
            return self.getTypedRuleContext(PlSqlParser.Query_blockContext,0)


        def column_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_model_column

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_column" ):
                listener.enterModel_column(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_column" ):
                listener.exitModel_column(self)




    def model_column(self):

        localctx = PlSqlParser.Model_columnContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1954, self.RULE_model_column)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16756
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                self.state = 16754
                self.expression()
                pass
            elif token in [1569]:
                self.state = 16755
                self.query_block()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 16759
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                self.state = 16758
                self.column_alias()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_rules_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def model_rules_part(self):
            return self.getTypedRuleContext(PlSqlParser.Model_rules_partContext,0)


        def model_rules_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Model_rules_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Model_rules_elementContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_model_rules_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_rules_clause" ):
                listener.enterModel_rules_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_rules_clause" ):
                listener.exitModel_rules_clause(self)




    def model_rules_clause(self):

        localctx = PlSqlParser.Model_rules_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1956, self.RULE_model_rules_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16762
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1533:
                self.state = 16761
                self.model_rules_part()


            self.state = 16764
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16773
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370497) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                self.state = 16765
                self.model_rules_element()
                self.state = 16770
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 16766
                    self.match(PlSqlParser.COMMA)
                    self.state = 16767
                    self.model_rules_element()
                    self.state = 16772
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 16775
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_rules_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RULES(self):
            return self.getToken(PlSqlParser.RULES, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def UPSERT(self):
            return self.getToken(PlSqlParser.UPSERT, 0)

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def model_iterate_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Model_iterate_clauseContext,0)


        def AUTOMATIC(self):
            return self.getToken(PlSqlParser.AUTOMATIC, 0)

        def SEQUENTIAL(self):
            return self.getToken(PlSqlParser.SEQUENTIAL, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_model_rules_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_rules_part" ):
                listener.enterModel_rules_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_rules_part" ):
                listener.exitModel_rules_part(self)




    def model_rules_part(self):

        localctx = PlSqlParser.Model_rules_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1958, self.RULE_model_rules_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16777
            self.match(PlSqlParser.RULES)
            self.state = 16783
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2114]:
                self.state = 16778
                self.match(PlSqlParser.UPDATE)
                pass
            elif token in [2120]:
                self.state = 16779
                self.match(PlSqlParser.UPSERT)
                self.state = 16781
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==38:
                    self.state = 16780
                    self.match(PlSqlParser.ALL)


                pass
            elif token in [93, 744, 1576, 2347]:
                pass
            else:
                pass
            self.state = 16787
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==93 or _la==1576:
                self.state = 16785
                _la = self._input.LA(1)
                if not(_la==93 or _la==1576):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 16786
                self.match(PlSqlParser.ORDER)


            self.state = 16790
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==744:
                self.state = 16789
                self.model_iterate_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_rules_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def cell_assignment(self):
            return self.getTypedRuleContext(PlSqlParser.Cell_assignmentContext,0)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def UPSERT(self):
            return self.getToken(PlSqlParser.UPSERT, 0)

        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_model_rules_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_rules_element" ):
                listener.enterModel_rules_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_rules_element" ):
                listener.exitModel_rules_element(self)




    def model_rules_element(self):

        localctx = PlSqlParser.Model_rules_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1960, self.RULE_model_rules_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16797
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2294,self._ctx)
            if la_ == 1:
                self.state = 16792
                self.match(PlSqlParser.UPDATE)

            elif la_ == 2:
                self.state = 16793
                self.match(PlSqlParser.UPSERT)
                self.state = 16795
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2293,self._ctx)
                if la_ == 1:
                    self.state = 16794
                    self.match(PlSqlParser.ALL)




            self.state = 16799
            self.cell_assignment()
            self.state = 16801
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1233:
                self.state = 16800
                self.order_by_clause()


            self.state = 16803
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 16804
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cell_assignmentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def model_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Model_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cell_assignment

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCell_assignment" ):
                listener.enterCell_assignment(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCell_assignment" ):
                listener.exitCell_assignment(self)




    def cell_assignment(self):

        localctx = PlSqlParser.Cell_assignmentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1962, self.RULE_cell_assignment)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16806
            self.model_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_iterate_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ITERATE(self):
            return self.getToken(PlSqlParser.ITERATE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def until_part(self):
            return self.getTypedRuleContext(PlSqlParser.Until_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_model_iterate_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_iterate_clause" ):
                listener.enterModel_iterate_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_iterate_clause" ):
                listener.exitModel_iterate_clause(self)




    def model_iterate_clause(self):

        localctx = PlSqlParser.Model_iterate_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1964, self.RULE_model_iterate_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16808
            self.match(PlSqlParser.ITERATE)
            self.state = 16809
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16810
            self.expression()
            self.state = 16811
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 16813
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2109:
                self.state = 16812
                self.until_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Until_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_until_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUntil_part" ):
                listener.enterUntil_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUntil_part" ):
                listener.exitUntil_part(self)




    def until_part(self):

        localctx = PlSqlParser.Until_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1966, self.RULE_until_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16815
            self.match(PlSqlParser.UNTIL)
            self.state = 16816
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 16817
            self.condition()
            self.state = 16818
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Order_by_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def order_by_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Order_by_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Order_by_elementsContext,i)


        def SIBLINGS(self):
            return self.getToken(PlSqlParser.SIBLINGS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_order_by_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOrder_by_clause" ):
                listener.enterOrder_by_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOrder_by_clause" ):
                listener.exitOrder_by_clause(self)




    def order_by_clause(self):

        localctx = PlSqlParser.Order_by_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1968, self.RULE_order_by_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16820
            self.match(PlSqlParser.ORDER)
            self.state = 16822
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1604:
                self.state = 16821
                self.match(PlSqlParser.SIBLINGS)


            self.state = 16824
            self.match(PlSqlParser.BY)
            self.state = 16825
            self.order_by_elements()
            self.state = 16830
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2298,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 16826
                    self.match(PlSqlParser.COMMA)
                    self.state = 16827
                    self.order_by_elements() 
                self.state = 16832
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2298,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Order_by_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def NULLS(self):
            return self.getToken(PlSqlParser.NULLS, 0)

        def ASC(self):
            return self.getToken(PlSqlParser.ASC, 0)

        def DESC(self):
            return self.getToken(PlSqlParser.DESC, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def LAST(self):
            return self.getToken(PlSqlParser.LAST, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_order_by_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOrder_by_elements" ):
                listener.enterOrder_by_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOrder_by_elements" ):
                listener.exitOrder_by_elements(self)




    def order_by_elements(self):

        localctx = PlSqlParser.Order_by_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1970, self.RULE_order_by_elements)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16833
            self.expression()
            self.state = 16835
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2299,self._ctx)
            if la_ == 1:
                self.state = 16834
                _la = self._input.LA(1)
                if not(_la==68 or _la==391):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 16839
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2300,self._ctx)
            if la_ == 1:
                self.state = 16837
                self.match(PlSqlParser.NULLS)
                self.state = 16838
                _la = self._input.LA(1)
                if not(_la==559 or _la==779):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Offset_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OFFSET(self):
            return self.getToken(PlSqlParser.OFFSET, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_offset_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOffset_clause" ):
                listener.enterOffset_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOffset_clause" ):
                listener.exitOffset_clause(self)




    def offset_clause(self):

        localctx = PlSqlParser.Offset_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1972, self.RULE_offset_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16841
            self.match(PlSqlParser.OFFSET)
            self.state = 16842
            self.expression()
            self.state = 16843
            _la = self._input.LA(1)
            if not(_la==1528 or _la==1529):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Fetch_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FETCH(self):
            return self.getToken(PlSqlParser.FETCH, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def NEXT(self):
            return self.getToken(PlSqlParser.NEXT, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def TIES(self):
            return self.getToken(PlSqlParser.TIES, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def PERCENT_KEYWORD(self):
            return self.getToken(PlSqlParser.PERCENT_KEYWORD, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_fetch_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFetch_clause" ):
                listener.enterFetch_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFetch_clause" ):
                listener.exitFetch_clause(self)




    def fetch_clause(self):

        localctx = PlSqlParser.Fetch_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1974, self.RULE_fetch_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16845
            self.match(PlSqlParser.FETCH)
            self.state = 16846
            _la = self._input.LA(1)
            if not(_la==559 or _la==970):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 16851
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2302,self._ctx)
            if la_ == 1:
                self.state = 16847
                self.expression()
                self.state = 16849
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1305:
                    self.state = 16848
                    self.match(PlSqlParser.PERCENT_KEYWORD)




            self.state = 16853
            _la = self._input.LA(1)
            if not(_la==1528 or _la==1529):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 16857
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1192]:
                self.state = 16854
                self.match(PlSqlParser.ONLY)
                pass
            elif token in [2212]:
                self.state = 16855
                self.match(PlSqlParser.WITH)
                self.state = 16856
                self.match(PlSqlParser.TIES)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class For_update_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def for_update_of_part(self):
            return self.getTypedRuleContext(PlSqlParser.For_update_of_partContext,0)


        def for_update_options(self):
            return self.getTypedRuleContext(PlSqlParser.For_update_optionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_for_update_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFor_update_clause" ):
                listener.enterFor_update_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFor_update_clause" ):
                listener.exitFor_update_clause(self)




    def for_update_clause(self):

        localctx = PlSqlParser.For_update_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1976, self.RULE_for_update_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16859
            self.match(PlSqlParser.FOR)
            self.state = 16860
            self.match(PlSqlParser.UPDATE)
            self.state = 16862
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1180:
                self.state = 16861
                self.for_update_of_part()


            self.state = 16865
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1153 or _la==1619 or _la==2197:
                self.state = 16864
                self.for_update_options()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class For_update_of_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_for_update_of_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFor_update_of_part" ):
                listener.enterFor_update_of_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFor_update_of_part" ):
                listener.exitFor_update_of_part(self)




    def for_update_of_part(self):

        localctx = PlSqlParser.For_update_of_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1978, self.RULE_for_update_of_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16867
            self.match(PlSqlParser.OF)
            self.state = 16868
            self.column_list()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class For_update_optionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SKIP_(self):
            return self.getToken(PlSqlParser.SKIP_, 0)

        def LOCKED(self):
            return self.getToken(PlSqlParser.LOCKED, 0)

        def NOWAIT(self):
            return self.getToken(PlSqlParser.NOWAIT, 0)

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_for_update_options

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFor_update_options" ):
                listener.enterFor_update_options(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFor_update_options" ):
                listener.exitFor_update_options(self)




    def for_update_options(self):

        localctx = PlSqlParser.For_update_optionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1980, self.RULE_for_update_options)
        try:
            self.state = 16875
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1619]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16870
                self.match(PlSqlParser.SKIP_)
                self.state = 16871
                self.match(PlSqlParser.LOCKED)
                pass
            elif token in [1153]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16872
                self.match(PlSqlParser.NOWAIT)
                pass
            elif token in [2197]:
                self.enterOuterAlt(localctx, 3)
                self.state = 16873
                self.match(PlSqlParser.WAIT)
                self.state = 16874
                self.expression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def general_table_ref(self):
            return self.getTypedRuleContext(PlSqlParser.General_table_refContext,0)


        def update_set_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Update_set_clauseContext,0)


        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def static_returning_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Static_returning_clauseContext,0)


        def error_logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_update_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_statement" ):
                listener.enterUpdate_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_statement" ):
                listener.exitUpdate_statement(self)




    def update_statement(self):

        localctx = PlSqlParser.Update_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1982, self.RULE_update_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16877
            self.match(PlSqlParser.UPDATE)
            self.state = 16878
            self.general_table_ref()
            self.state = 16879
            self.update_set_clause()
            self.state = 16881
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2205:
                self.state = 16880
                self.where_clause()


            self.state = 16884
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1507 or _la==1508:
                self.state = 16883
                self.static_returning_clause()


            self.state = 16887
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==836:
                self.state = 16886
                self.error_logging_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Update_set_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def column_based_update_set_clause(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_based_update_set_clauseContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_based_update_set_clauseContext,i)


        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_update_set_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUpdate_set_clause" ):
                listener.enterUpdate_set_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUpdate_set_clause" ):
                listener.exitUpdate_set_clause(self)




    def update_set_clause(self):

        localctx = PlSqlParser.Update_set_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1984, self.RULE_update_set_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16889
            self.match(PlSqlParser.SET)
            self.state = 16905
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2311,self._ctx)
            if la_ == 1:
                self.state = 16890
                self.column_based_update_set_clause()
                self.state = 16895
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 16891
                    self.match(PlSqlParser.COMMA)
                    self.state = 16892
                    self.column_based_update_set_clause()
                    self.state = 16897
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.state = 16898
                self.match(PlSqlParser.VALUE)
                self.state = 16899
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16900
                self.identifier()
                self.state = 16901
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 16902
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 16903
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_based_update_set_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_column_based_update_set_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_based_update_set_clause" ):
                listener.enterColumn_based_update_set_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_based_update_set_clause" ):
                listener.exitColumn_based_update_set_clause(self)




    def column_based_update_set_clause(self):

        localctx = PlSqlParser.Column_based_update_set_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1986, self.RULE_column_based_update_set_clause)
        try:
            self.state = 16915
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 16907
                self.column_name()
                self.state = 16908
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 16909
                self.expression()
                pass
            elif token in [2347]:
                self.enterOuterAlt(localctx, 2)
                self.state = 16911
                self.paren_column_list()
                self.state = 16912
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 16913
                self.subquery()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Delete_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def general_table_ref(self):
            return self.getTypedRuleContext(PlSqlParser.General_table_refContext,0)


        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def static_returning_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Static_returning_clauseContext,0)


        def error_logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_delete_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDelete_statement" ):
                listener.enterDelete_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDelete_statement" ):
                listener.exitDelete_statement(self)




    def delete_statement(self):

        localctx = PlSqlParser.Delete_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1988, self.RULE_delete_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16917
            self.match(PlSqlParser.DELETE)
            self.state = 16919
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==588:
                self.state = 16918
                self.match(PlSqlParser.FROM)


            self.state = 16921
            self.general_table_ref()
            self.state = 16923
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2205:
                self.state = 16922
                self.where_clause()


            self.state = 16926
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1507 or _la==1508:
                self.state = 16925
                self.static_returning_clause()


            self.state = 16929
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==836:
                self.state = 16928
                self.error_logging_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Insert_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def single_table_insert(self):
            return self.getTypedRuleContext(PlSqlParser.Single_table_insertContext,0)


        def multi_table_insert(self):
            return self.getTypedRuleContext(PlSqlParser.Multi_table_insertContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_insert_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInsert_statement" ):
                listener.enterInsert_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInsert_statement" ):
                listener.exitInsert_statement(self)




    def insert_statement(self):

        localctx = PlSqlParser.Insert_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1990, self.RULE_insert_statement)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16931
            self.match(PlSqlParser.INSERT)
            self.state = 16934
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [735]:
                self.state = 16932
                self.single_table_insert()
                pass
            elif token in [38, 559, 2204]:
                self.state = 16933
                self.multi_table_insert()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Single_table_insertContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def insert_into_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Insert_into_clauseContext,0)


        def values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Values_clauseContext,0)


        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def error_logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_clauseContext,0)


        def static_returning_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Static_returning_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_single_table_insert

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSingle_table_insert" ):
                listener.enterSingle_table_insert(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSingle_table_insert" ):
                listener.exitSingle_table_insert(self)




    def single_table_insert(self):

        localctx = PlSqlParser.Single_table_insertContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1992, self.RULE_single_table_insert)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16936
            self.insert_into_clause()
            self.state = 16942
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2164]:
                self.state = 16937
                self.values_clause()
                self.state = 16939
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1507 or _la==1508:
                    self.state = 16938
                    self.static_returning_clause()


                pass
            elif token in [1569, 2212, 2347]:
                self.state = 16941
                self.select_statement()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 16945
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==836:
                self.state = 16944
                self.error_logging_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Multi_table_insertContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def conditional_insert_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Conditional_insert_clauseContext,0)


        def multi_table_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Multi_table_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Multi_table_elementContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_multi_table_insert

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMulti_table_insert" ):
                listener.enterMulti_table_insert(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMulti_table_insert" ):
                listener.exitMulti_table_insert(self)




    def multi_table_insert(self):

        localctx = PlSqlParser.Multi_table_insertContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1994, self.RULE_multi_table_insert)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16954
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2322,self._ctx)
            if la_ == 1:
                self.state = 16947
                self.match(PlSqlParser.ALL)
                self.state = 16949 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while True:
                    self.state = 16948
                    self.multi_table_element()
                    self.state = 16951 
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if not (_la==735):
                        break

                pass

            elif la_ == 2:
                self.state = 16953
                self.conditional_insert_clause()
                pass


            self.state = 16956
            self.select_statement()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Multi_table_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def insert_into_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Insert_into_clauseContext,0)


        def values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Values_clauseContext,0)


        def error_logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_multi_table_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMulti_table_element" ):
                listener.enterMulti_table_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMulti_table_element" ):
                listener.exitMulti_table_element(self)




    def multi_table_element(self):

        localctx = PlSqlParser.Multi_table_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1996, self.RULE_multi_table_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16958
            self.insert_into_clause()
            self.state = 16960
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2164:
                self.state = 16959
                self.values_clause()


            self.state = 16963
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==836:
                self.state = 16962
                self.error_logging_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Conditional_insert_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def conditional_insert_when_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Conditional_insert_when_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Conditional_insert_when_partContext,i)


        def conditional_insert_else_part(self):
            return self.getTypedRuleContext(PlSqlParser.Conditional_insert_else_partContext,0)


        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_conditional_insert_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConditional_insert_clause" ):
                listener.enterConditional_insert_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConditional_insert_clause" ):
                listener.exitConditional_insert_clause(self)




    def conditional_insert_clause(self):

        localctx = PlSqlParser.Conditional_insert_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 1998, self.RULE_conditional_insert_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16966
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==38 or _la==559:
                self.state = 16965
                _la = self._input.LA(1)
                if not(_la==38 or _la==559):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 16969 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 16968
                self.conditional_insert_when_part()
                self.state = 16971 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==2204):
                    break

            self.state = 16974
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==460:
                self.state = 16973
                self.conditional_insert_else_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Conditional_insert_when_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def multi_table_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Multi_table_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Multi_table_elementContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_conditional_insert_when_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConditional_insert_when_part" ):
                listener.enterConditional_insert_when_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConditional_insert_when_part" ):
                listener.exitConditional_insert_when_part(self)




    def conditional_insert_when_part(self):

        localctx = PlSqlParser.Conditional_insert_when_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2000, self.RULE_conditional_insert_when_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16976
            self.match(PlSqlParser.WHEN)
            self.state = 16977
            self.condition()
            self.state = 16978
            self.match(PlSqlParser.THEN)
            self.state = 16980 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 16979
                self.multi_table_element()
                self.state = 16982 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==735):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Conditional_insert_else_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELSE(self):
            return self.getToken(PlSqlParser.ELSE, 0)

        def multi_table_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Multi_table_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Multi_table_elementContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_conditional_insert_else_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConditional_insert_else_part" ):
                listener.enterConditional_insert_else_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConditional_insert_else_part" ):
                listener.exitConditional_insert_else_part(self)




    def conditional_insert_else_part(self):

        localctx = PlSqlParser.Conditional_insert_else_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2002, self.RULE_conditional_insert_else_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16984
            self.match(PlSqlParser.ELSE)
            self.state = 16986 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 16985
                self.multi_table_element()
                self.state = 16988 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==735):
                    break

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Insert_into_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def general_table_ref(self):
            return self.getTypedRuleContext(PlSqlParser.General_table_refContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_insert_into_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInsert_into_clause" ):
                listener.enterInsert_into_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInsert_into_clause" ):
                listener.exitInsert_into_clause(self)




    def insert_into_clause(self):

        localctx = PlSqlParser.Insert_into_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2004, self.RULE_insert_into_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16990
            self.match(PlSqlParser.INTO)
            self.state = 16991
            self.general_table_ref()
            self.state = 16993
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2330,self._ctx)
            if la_ == 1:
                self.state = 16992
                self.paren_column_list()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Values_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def REGULAR_ID(self):
            return self.getToken(PlSqlParser.REGULAR_ID, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def collection_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Collection_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_values_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterValues_clause" ):
                listener.enterValues_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitValues_clause" ):
                listener.exitValues_clause(self)




    def values_clause(self):

        localctx = PlSqlParser.Values_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2006, self.RULE_values_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 16995
            self.match(PlSqlParser.VALUES)
            self.state = 17002
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2331,self._ctx)
            if la_ == 1:
                self.state = 16996
                self.match(PlSqlParser.REGULAR_ID)
                pass

            elif la_ == 2:
                self.state = 16997
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 16998
                self.expressions()
                self.state = 16999
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 3:
                self.state = 17001
                self.collection_expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def selected_tableview(self):
            return self.getTypedRuleContext(PlSqlParser.Selected_tableviewContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def table_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,0)


        def merge_update_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_update_clauseContext,0)


        def merge_insert_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_insert_clauseContext,0)


        def error_logging_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_statement" ):
                listener.enterMerge_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_statement" ):
                listener.exitMerge_statement(self)




    def merge_statement(self):

        localctx = PlSqlParser.Merge_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2008, self.RULE_merge_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17004
            self.match(PlSqlParser.MERGE)
            self.state = 17005
            self.match(PlSqlParser.INTO)
            self.state = 17006
            self.tableview_name()
            self.state = 17008
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2332,self._ctx)
            if la_ == 1:
                self.state = 17007
                self.table_alias()


            self.state = 17010
            self.match(PlSqlParser.USING)
            self.state = 17011
            self.selected_tableview()
            self.state = 17012
            self.match(PlSqlParser.ON)
            self.state = 17013
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 17014
            self.condition()
            self.state = 17015
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 17024
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2335,self._ctx)
            if la_ == 1:
                self.state = 17016
                self.merge_update_clause()
                self.state = 17018
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2204:
                    self.state = 17017
                    self.merge_insert_clause()



            elif la_ == 2:
                self.state = 17020
                self.merge_insert_clause()
                self.state = 17022
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2204:
                    self.state = 17021
                    self.merge_update_clause()




            self.state = 17027
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==836:
                self.state = 17026
                self.error_logging_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_update_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def MATCHED(self):
            return self.getToken(PlSqlParser.MATCHED, 0)

        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def merge_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Merge_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Merge_elementContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def merge_update_delete_part(self):
            return self.getTypedRuleContext(PlSqlParser.Merge_update_delete_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_update_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_update_clause" ):
                listener.enterMerge_update_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_update_clause" ):
                listener.exitMerge_update_clause(self)




    def merge_update_clause(self):

        localctx = PlSqlParser.Merge_update_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2010, self.RULE_merge_update_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17029
            self.match(PlSqlParser.WHEN)
            self.state = 17030
            self.match(PlSqlParser.MATCHED)
            self.state = 17031
            self.match(PlSqlParser.THEN)
            self.state = 17032
            self.match(PlSqlParser.UPDATE)
            self.state = 17033
            self.match(PlSqlParser.SET)
            self.state = 17034
            self.merge_element()
            self.state = 17039
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 17035
                self.match(PlSqlParser.COMMA)
                self.state = 17036
                self.merge_element()
                self.state = 17041
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 17043
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2205:
                self.state = 17042
                self.where_clause()


            self.state = 17046
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==381:
                self.state = 17045
                self.merge_update_delete_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_element" ):
                listener.enterMerge_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_element" ):
                listener.exitMerge_element(self)




    def merge_element(self):

        localctx = PlSqlParser.Merge_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2012, self.RULE_merge_element)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17048
            self.column_name()
            self.state = 17049
            self.match(PlSqlParser.EQUALS_OP)
            self.state = 17050
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_update_delete_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_update_delete_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_update_delete_part" ):
                listener.enterMerge_update_delete_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_update_delete_part" ):
                listener.exitMerge_update_delete_part(self)




    def merge_update_delete_part(self):

        localctx = PlSqlParser.Merge_update_delete_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2014, self.RULE_merge_update_delete_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17052
            self.match(PlSqlParser.DELETE)
            self.state = 17053
            self.where_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Merge_insert_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def MATCHED(self):
            return self.getToken(PlSqlParser.MATCHED, 0)

        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def values_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Values_clauseContext,0)


        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def where_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Where_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_merge_insert_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMerge_insert_clause" ):
                listener.enterMerge_insert_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMerge_insert_clause" ):
                listener.exitMerge_insert_clause(self)




    def merge_insert_clause(self):

        localctx = PlSqlParser.Merge_insert_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2016, self.RULE_merge_insert_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17055
            self.match(PlSqlParser.WHEN)
            self.state = 17056
            self.match(PlSqlParser.NOT)
            self.state = 17057
            self.match(PlSqlParser.MATCHED)
            self.state = 17058
            self.match(PlSqlParser.THEN)
            self.state = 17059
            self.match(PlSqlParser.INSERT)
            self.state = 17061
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2347:
                self.state = 17060
                self.paren_column_list()


            self.state = 17063
            self.values_clause()
            self.state = 17065
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2205:
                self.state = 17064
                self.where_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Selected_tableviewContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def table_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_selected_tableview

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSelected_tableview" ):
                listener.enterSelected_tableview(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSelected_tableview" ):
                listener.exitSelected_tableview(self)




    def selected_tableview(self):

        localctx = PlSqlParser.Selected_tableviewContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2018, self.RULE_selected_tableview)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17072
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 17067
                self.tableview_name()
                pass
            elif token in [2347]:
                self.state = 17068
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17069
                self.select_statement()
                self.state = 17070
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 17075
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                self.state = 17074
                self.table_alias()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lock_table_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def lock_table_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Lock_table_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Lock_table_elementContext,i)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def lock_mode(self):
            return self.getTypedRuleContext(PlSqlParser.Lock_modeContext,0)


        def MODE(self):
            return self.getToken(PlSqlParser.MODE, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def wait_nowait_part(self):
            return self.getTypedRuleContext(PlSqlParser.Wait_nowait_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lock_table_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLock_table_statement" ):
                listener.enterLock_table_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLock_table_statement" ):
                listener.exitLock_table_statement(self)




    def lock_table_statement(self):

        localctx = PlSqlParser.Lock_table_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2020, self.RULE_lock_table_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17077
            self.match(PlSqlParser.LOCK)
            self.state = 17078
            self.match(PlSqlParser.TABLE)
            self.state = 17079
            self.lock_table_element()
            self.state = 17084
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 17080
                self.match(PlSqlParser.COMMA)
                self.state = 17081
                self.lock_table_element()
                self.state = 17086
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 17087
            self.match(PlSqlParser.IN)
            self.state = 17088
            self.lock_mode()
            self.state = 17089
            self.match(PlSqlParser.MODE)
            self.state = 17091
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1153 or _la==2197:
                self.state = 17090
                self.wait_nowait_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Wait_nowait_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def NOWAIT(self):
            return self.getToken(PlSqlParser.NOWAIT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_wait_nowait_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWait_nowait_part" ):
                listener.enterWait_nowait_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWait_nowait_part" ):
                listener.exitWait_nowait_part(self)




    def wait_nowait_part(self):

        localctx = PlSqlParser.Wait_nowait_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2022, self.RULE_wait_nowait_part)
        try:
            self.state = 17096
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2197]:
                self.enterOuterAlt(localctx, 1)
                self.state = 17093
                self.match(PlSqlParser.WAIT)
                self.state = 17094
                self.expression()
                pass
            elif token in [1153]:
                self.enterOuterAlt(localctx, 2)
                self.state = 17095
                self.match(PlSqlParser.NOWAIT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lock_table_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def partition_extension_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_extension_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_lock_table_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLock_table_element" ):
                listener.enterLock_table_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLock_table_element" ):
                listener.exitLock_table_element(self)




    def lock_table_element(self):

        localctx = PlSqlParser.Lock_table_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2024, self.RULE_lock_table_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17098
            self.tableview_name()
            self.state = 17100
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1275 or _la==1691:
                self.state = 17099
                self.partition_extension_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Lock_modeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def SHARE(self):
            return self.getToken(PlSqlParser.SHARE, 0)

        def EXCLUSIVE(self):
            return self.getToken(PlSqlParser.EXCLUSIVE, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_lock_mode

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLock_mode" ):
                listener.enterLock_mode(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLock_mode" ):
                listener.exitLock_mode(self)




    def lock_mode(self):

        localctx = PlSqlParser.Lock_modeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2026, self.RULE_lock_mode)
        self._la = 0 # Token type
        try:
            self.state = 17114
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2349,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17102
                self.match(PlSqlParser.ROW)
                self.state = 17103
                self.match(PlSqlParser.SHARE)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17104
                self.match(PlSqlParser.ROW)
                self.state = 17105
                self.match(PlSqlParser.EXCLUSIVE)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17106
                self.match(PlSqlParser.SHARE)
                self.state = 17108
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2114:
                    self.state = 17107
                    self.match(PlSqlParser.UPDATE)


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 17110
                self.match(PlSqlParser.SHARE)
                self.state = 17111
                self.match(PlSqlParser.ROW)
                self.state = 17112
                self.match(PlSqlParser.EXCLUSIVE)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 17113
                self.match(PlSqlParser.EXCLUSIVE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class General_table_refContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def dml_table_expression_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Dml_table_expression_clauseContext,0)


        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def table_alias(self):
            return self.getTypedRuleContext(PlSqlParser.Table_aliasContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_general_table_ref

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGeneral_table_ref" ):
                listener.enterGeneral_table_ref(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGeneral_table_ref" ):
                listener.exitGeneral_table_ref(self)




    def general_table_ref(self):

        localctx = PlSqlParser.General_table_refContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2028, self.RULE_general_table_ref)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17122
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2350,self._ctx)
            if la_ == 1:
                self.state = 17116
                self.dml_table_expression_clause()
                pass

            elif la_ == 2:
                self.state = 17117
                self.match(PlSqlParser.ONLY)
                self.state = 17118
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17119
                self.dml_table_expression_clause()
                self.state = 17120
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


            self.state = 17125
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2351,self._ctx)
            if la_ == 1:
                self.state = 17124
                self.table_alias()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Static_returning_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def into_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Into_clauseContext,0)


        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_static_returning_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStatic_returning_clause" ):
                listener.enterStatic_returning_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStatic_returning_clause" ):
                listener.exitStatic_returning_clause(self)




    def static_returning_clause(self):

        localctx = PlSqlParser.Static_returning_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2030, self.RULE_static_returning_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17127
            _la = self._input.LA(1)
            if not(_la==1507 or _la==1508):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 17128
            self.expressions()
            self.state = 17129
            self.into_clause()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Error_logging_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LOG(self):
            return self.getToken(PlSqlParser.LOG, 0)

        def ERRORS(self):
            return self.getToken(PlSqlParser.ERRORS, 0)

        def error_logging_into_part(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_into_partContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def error_logging_reject_part(self):
            return self.getTypedRuleContext(PlSqlParser.Error_logging_reject_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_error_logging_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterError_logging_clause" ):
                listener.enterError_logging_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitError_logging_clause" ):
                listener.exitError_logging_clause(self)




    def error_logging_clause(self):

        localctx = PlSqlParser.Error_logging_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2032, self.RULE_error_logging_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17131
            self.match(PlSqlParser.LOG)
            self.state = 17132
            self.match(PlSqlParser.ERRORS)
            self.state = 17134
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2352,self._ctx)
            if la_ == 1:
                self.state = 17133
                self.error_logging_into_part()


            self.state = 17137
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2353,self._ctx)
            if la_ == 1:
                self.state = 17136
                self.expression()


            self.state = 17140
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1471:
                self.state = 17139
                self.error_logging_reject_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Error_logging_into_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_error_logging_into_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterError_logging_into_part" ):
                listener.enterError_logging_into_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitError_logging_into_part" ):
                listener.exitError_logging_into_part(self)




    def error_logging_into_part(self):

        localctx = PlSqlParser.Error_logging_into_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2034, self.RULE_error_logging_into_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17142
            self.match(PlSqlParser.INTO)
            self.state = 17143
            self.tableview_name()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Error_logging_reject_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REJECT(self):
            return self.getToken(PlSqlParser.REJECT, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_error_logging_reject_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterError_logging_reject_part" ):
                listener.enterError_logging_reject_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitError_logging_reject_part" ):
                listener.exitError_logging_reject_part(self)




    def error_logging_reject_part(self):

        localctx = PlSqlParser.Error_logging_reject_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2036, self.RULE_error_logging_reject_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17145
            self.match(PlSqlParser.REJECT)
            self.state = 17146
            self.match(PlSqlParser.LIMIT)
            self.state = 17149
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2355,self._ctx)
            if la_ == 1:
                self.state = 17147
                self.match(PlSqlParser.UNLIMITED)
                pass

            elif la_ == 2:
                self.state = 17148
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dml_table_expression_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def table_collection_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Table_collection_expressionContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def select_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_statementContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def subquery_restriction_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Subquery_restriction_clauseContext,0)


        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def hierarchies_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Hierarchies_clauseContext,0)


        def sample_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Sample_clauseContext,0)


        def json_table_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_table_clauseContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def LATERAL(self):
            return self.getToken(PlSqlParser.LATERAL, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dml_table_expression_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDml_table_expression_clause" ):
                listener.enterDml_table_expression_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDml_table_expression_clause" ):
                listener.exitDml_table_expression_clause(self)




    def dml_table_expression_clause(self):

        localctx = PlSqlParser.Dml_table_expression_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2038, self.RULE_dml_table_expression_clause)
        self._la = 0 # Token type
        try:
            self.state = 17179
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2361,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17151
                self.table_collection_expression()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17152
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17153
                self.select_statement()
                self.state = 17155
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2212:
                    self.state = 17154
                    self.subquery_restriction_clause()


                self.state = 17157
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17159
                self.tableview_name()
                self.state = 17161
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2357,self._ctx)
                if la_ == 1:
                    self.state = 17160
                    self.hierarchies_clause()


                self.state = 17164
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2358,self._ctx)
                if la_ == 1:
                    self.state = 17163
                    self.sample_clause()


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 17166
                self.json_table_clause()
                self.state = 17169
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2359,self._ctx)
                if la_ == 1:
                    self.state = 17167
                    self.match(PlSqlParser.AS)
                    self.state = 17168
                    self.identifier()


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 17171
                self.match(PlSqlParser.LATERAL)
                self.state = 17172
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17173
                self.subquery()
                self.state = 17175
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2212:
                    self.state = 17174
                    self.subquery_restriction_clause()


                self.state = 17177
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_collection_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def THE(self):
            return self.getToken(PlSqlParser.THE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def outer_join_sign(self):
            return self.getTypedRuleContext(PlSqlParser.Outer_join_signContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_collection_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_collection_expression" ):
                listener.enterTable_collection_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_collection_expression" ):
                listener.exitTable_collection_expression(self)




    def table_collection_expression(self):

        localctx = PlSqlParser.Table_collection_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2040, self.RULE_table_collection_expression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17181
            _la = self._input.LA(1)
            if not(_la==1999 or _la==2013):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 17192
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2363,self._ctx)
            if la_ == 1:
                self.state = 17182
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17183
                self.subquery()
                self.state = 17184
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 17186
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17187
                self.expression()
                self.state = 17188
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 17190
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2362,self._ctx)
                if la_ == 1:
                    self.state = 17189
                    self.outer_join_sign()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Subquery_restriction_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def CHECK(self):
            return self.getToken(PlSqlParser.CHECK, 0)

        def OPTION(self):
            return self.getToken(PlSqlParser.OPTION, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def constraint_name(self):
            return self.getTypedRuleContext(PlSqlParser.Constraint_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_subquery_restriction_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSubquery_restriction_clause" ):
                listener.enterSubquery_restriction_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSubquery_restriction_clause" ):
                listener.exitSubquery_restriction_clause(self)




    def subquery_restriction_clause(self):

        localctx = PlSqlParser.Subquery_restriction_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2042, self.RULE_subquery_restriction_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17194
            self.match(PlSqlParser.WITH)
            self.state = 17203
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1429]:
                self.state = 17195
                self.match(PlSqlParser.READ)
                self.state = 17196
                self.match(PlSqlParser.ONLY)
                pass
            elif token in [190]:
                self.state = 17197
                self.match(PlSqlParser.CHECK)
                self.state = 17198
                self.match(PlSqlParser.OPTION)
                self.state = 17201
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==271:
                    self.state = 17199
                    self.match(PlSqlParser.CONSTRAINT)
                    self.state = 17200
                    self.constraint_name()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sample_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SAMPLE(self):
            return self.getToken(PlSqlParser.SAMPLE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def BLOCK(self):
            return self.getToken(PlSqlParser.BLOCK, 0)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def seed_part(self):
            return self.getTypedRuleContext(PlSqlParser.Seed_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_sample_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSample_clause" ):
                listener.enterSample_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSample_clause" ):
                listener.exitSample_clause(self)




    def sample_clause(self):

        localctx = PlSqlParser.Sample_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2044, self.RULE_sample_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17205
            self.match(PlSqlParser.SAMPLE)
            self.state = 17207
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==137:
                self.state = 17206
                self.match(PlSqlParser.BLOCK)


            self.state = 17209
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 17210
            self.expression()
            self.state = 17213
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2353:
                self.state = 17211
                self.match(PlSqlParser.COMMA)
                self.state = 17212
                self.expression()


            self.state = 17215
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 17217
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2368,self._ctx)
            if la_ == 1:
                self.state = 17216
                self.seed_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Seed_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SEED(self):
            return self.getToken(PlSqlParser.SEED, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_seed_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSeed_part" ):
                listener.enterSeed_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSeed_part" ):
                listener.exitSeed_part(self)




    def seed_part(self):

        localctx = PlSqlParser.Seed_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2046, self.RULE_seed_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17219
            self.match(PlSqlParser.SEED)
            self.state = 17220
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 17221
            self.expression()
            self.state = 17222
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConditionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def JSON_EQUAL(self):
            return self.getToken(PlSqlParser.JSON_EQUAL, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_condition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCondition" ):
                listener.enterCondition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCondition" ):
                listener.exitCondition(self)




    def condition(self):

        localctx = PlSqlParser.ConditionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2048, self.RULE_condition)
        try:
            self.state = 17230
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2369,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17224
                self.expression()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17225
                self.match(PlSqlParser.JSON_EQUAL)
                self.state = 17226
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17227
                self.expressions()
                self.state = 17228
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExpressionsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_expressions

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExpressions" ):
                listener.enterExpressions(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExpressions" ):
                listener.exitExpressions(self)




    def expressions(self):

        localctx = PlSqlParser.ExpressionsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2050, self.RULE_expressions)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17232
            self.expression()
            self.state = 17237
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2370,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 17233
                    self.match(PlSqlParser.COMMA)
                    self.state = 17234
                    self.expression() 
                self.state = 17239
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2370,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ExpressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def cursor_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_expressionContext,0)


        def logical_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Logical_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterExpression" ):
                listener.enterExpression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitExpression" ):
                listener.exitExpression(self)




    def expression(self):

        localctx = PlSqlParser.ExpressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2052, self.RULE_expression)
        try:
            self.state = 17242
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2371,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17240
                self.cursor_expression()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17241
                self.logical_expression(0)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cursor_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CURSOR(self):
            return self.getToken(PlSqlParser.CURSOR, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_cursor_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCursor_expression" ):
                listener.enterCursor_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCursor_expression" ):
                listener.exitCursor_expression(self)




    def cursor_expression(self):

        localctx = PlSqlParser.Cursor_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2054, self.RULE_cursor_expression)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17244
            self.match(PlSqlParser.CURSOR)
            self.state = 17245
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 17246
            self.subquery()
            self.state = 17247
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logical_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def unary_logical_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Unary_logical_expressionContext,0)


        def logical_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Logical_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Logical_expressionContext,i)


        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def OR(self):
            return self.getToken(PlSqlParser.OR, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_logical_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogical_expression" ):
                listener.enterLogical_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogical_expression" ):
                listener.exitLogical_expression(self)



    def logical_expression(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.Logical_expressionContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2056
        self.enterRecursionRule(localctx, 2056, self.RULE_logical_expression, _p)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17250
            self.unary_logical_expression()
            self._ctx.stop = self._input.LT(-1)
            self.state = 17260
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2373,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    self.state = 17258
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2372,self._ctx)
                    if la_ == 1:
                        localctx = PlSqlParser.Logical_expressionContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_logical_expression)
                        self.state = 17252
                        if not self.precpred(self._ctx, 2):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 2)")
                        self.state = 17253
                        self.match(PlSqlParser.AND)
                        self.state = 17254
                        self.logical_expression(3)
                        pass

                    elif la_ == 2:
                        localctx = PlSqlParser.Logical_expressionContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_logical_expression)
                        self.state = 17255
                        if not self.precpred(self._ctx, 1):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 1)")
                        self.state = 17256
                        self.match(PlSqlParser.OR)
                        self.state = 17257
                        self.logical_expression(2)
                        pass

             
                self.state = 17262
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2373,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class Unary_logical_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def multiset_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Multiset_expressionContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def unary_logical_operation(self):
            return self.getTypedRuleContext(PlSqlParser.Unary_logical_operationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_unary_logical_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnary_logical_expression" ):
                listener.enterUnary_logical_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnary_logical_expression" ):
                listener.exitUnary_logical_expression(self)




    def unary_logical_expression(self):

        localctx = PlSqlParser.Unary_logical_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2058, self.RULE_unary_logical_expression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17264
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 17263
                self.match(PlSqlParser.NOT)


            self.state = 17266
            self.multiset_expression(0)
            self.state = 17268
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2375,self._ctx)
            if la_ == 1:
                self.state = 17267
                self.unary_logical_operation()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unary_logical_operationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def logical_operation(self):
            return self.getTypedRuleContext(PlSqlParser.Logical_operationContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_unary_logical_operation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnary_logical_operation" ):
                listener.enterUnary_logical_operation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnary_logical_operation" ):
                listener.exitUnary_logical_operation(self)




    def unary_logical_operation(self):

        localctx = PlSqlParser.Unary_logical_operationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2060, self.RULE_unary_logical_operation)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17270
            self.match(PlSqlParser.IS)
            self.state = 17272
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1138:
                self.state = 17271
                self.match(PlSqlParser.NOT)


            self.state = 17274
            self.logical_operation()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Logical_operationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def NAN(self):
            return self.getToken(PlSqlParser.NAN, 0)

        def PRESENT(self):
            return self.getToken(PlSqlParser.PRESENT, 0)

        def INFINITE(self):
            return self.getToken(PlSqlParser.INFINITE, 0)

        def A_LETTER(self):
            return self.getToken(PlSqlParser.A_LETTER, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def EMPTY_(self):
            return self.getToken(PlSqlParser.EMPTY_, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def type_spec(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Type_specContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Type_specContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def JSON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.JSON)
            else:
                return self.getToken(PlSqlParser.JSON, i)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def STRICT(self):
            return self.getToken(PlSqlParser.STRICT, 0)

        def LAX(self):
            return self.getToken(PlSqlParser.LAX, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_logical_operation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLogical_operation" ):
                listener.enterLogical_operation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLogical_operation" ):
                listener.exitLogical_operation(self)




    def logical_operation(self):

        localctx = PlSqlParser.Logical_operationContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2062, self.RULE_logical_operation)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17314
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1162]:
                self.state = 17276
                self.match(PlSqlParser.NULL_)
                pass
            elif token in [945]:
                self.state = 17277
                self.match(PlSqlParser.NAN)
                pass
            elif token in [1369]:
                self.state = 17278
                self.match(PlSqlParser.PRESENT)
                pass
            elif token in [693]:
                self.state = 17279
                self.match(PlSqlParser.INFINITE)
                pass
            elif token in [36]:
                self.state = 17280
                self.match(PlSqlParser.A_LETTER)
                self.state = 17281
                self.match(PlSqlParser.SET)
                pass
            elif token in [465]:
                self.state = 17282
                self.match(PlSqlParser.EMPTY_)
                pass
            elif token in [1180]:
                self.state = 17283
                self.match(PlSqlParser.OF)
                self.state = 17285
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2076:
                    self.state = 17284
                    self.match(PlSqlParser.TYPE)


                self.state = 17287
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17289
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2378,self._ctx)
                if la_ == 1:
                    self.state = 17288
                    self.match(PlSqlParser.ONLY)


                self.state = 17291
                self.type_spec()
                self.state = 17296
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17292
                    self.match(PlSqlParser.COMMA)
                    self.state = 17293
                    self.type_spec()
                    self.state = 17298
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 17299
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [755]:
                self.state = 17301
                self.match(PlSqlParser.JSON)
                self.state = 17304
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2380,self._ctx)
                if la_ == 1:
                    self.state = 17302
                    self.match(PlSqlParser.FORMAT)
                    self.state = 17303
                    self.match(PlSqlParser.JSON)


                self.state = 17307
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2381,self._ctx)
                if la_ == 1:
                    self.state = 17306
                    _la = self._input.LA(1)
                    if not(_la==782 or _la==1682):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 17312
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2382,self._ctx)
                if la_ == 1:
                    self.state = 17309
                    _la = self._input.LA(1)
                    if not(_la==2210 or _la==2212):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 17310
                    self.match(PlSqlParser.UNIQUE)
                    self.state = 17311
                    self.match(PlSqlParser.KEYS)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Multiset_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.multiset_type = None # Token
            self.multiset_operator = None # Token

        def relational_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Relational_expressionContext,0)


        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def SUBMULTISET(self):
            return self.getToken(PlSqlParser.SUBMULTISET, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def multiset_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Multiset_expressionContext,0)


        def MULTISET(self):
            return self.getToken(PlSqlParser.MULTISET, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def INTERSECT(self):
            return self.getToken(PlSqlParser.INTERSECT, 0)

        def UNION(self):
            return self.getToken(PlSqlParser.UNION, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def DISTINCT(self):
            return self.getToken(PlSqlParser.DISTINCT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_multiset_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMultiset_expression" ):
                listener.enterMultiset_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMultiset_expression" ):
                listener.exitMultiset_expression(self)



    def multiset_expression(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.Multiset_expressionContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2064
        self.enterRecursionRule(localctx, 2064, self.RULE_multiset_expression, _p)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17317
            self.relational_expression(0)
            self.state = 17323
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2385,self._ctx)
            if la_ == 1:
                self.state = 17318
                localctx.multiset_type = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==882 or _la==1688):
                    localctx.multiset_type = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 17320
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1180:
                    self.state = 17319
                    self.match(PlSqlParser.OF)


                self.state = 17322
                self.concatenation(0)


            self._ctx.stop = self._input.LT(-1)
            self.state = 17334
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2387,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    localctx = PlSqlParser.Multiset_expressionContext(self, _parentctx, _parentState)
                    self.pushNewRecursionContext(localctx, _startState, self.RULE_multiset_expression)
                    self.state = 17325
                    if not self.precpred(self._ctx, 1):
                        from antlr4.error.Errors import FailedPredicateException
                        raise FailedPredicateException(self, "self.precpred(self._ctx, 1)")
                    self.state = 17326
                    self.match(PlSqlParser.MULTISET)
                    self.state = 17327
                    localctx.multiset_operator = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(_la==497 or _la==732 or _la==2090):
                        localctx.multiset_operator = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 17329
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2386,self._ctx)
                    if la_ == 1:
                        self.state = 17328
                        _la = self._input.LA(1)
                        if not(_la==38 or _la==417):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 17331
                    self.relational_expression(0) 
                self.state = 17336
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2387,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class Relational_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def compound_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Compound_expressionContext,0)


        def relational_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Relational_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Relational_expressionContext,i)


        def relational_operator(self):
            return self.getTypedRuleContext(PlSqlParser.Relational_operatorContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_relational_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRelational_expression" ):
                listener.enterRelational_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRelational_expression" ):
                listener.exitRelational_expression(self)



    def relational_expression(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.Relational_expressionContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2066
        self.enterRecursionRule(localctx, 2066, self.RULE_relational_expression, _p)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17338
            self.compound_expression()
            self._ctx.stop = self._input.LT(-1)
            self.state = 17346
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2388,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    localctx = PlSqlParser.Relational_expressionContext(self, _parentctx, _parentState)
                    self.pushNewRecursionContext(localctx, _startState, self.RULE_relational_expression)
                    self.state = 17340
                    if not self.precpred(self._ctx, 2):
                        from antlr4.error.Errors import FailedPredicateException
                        raise FailedPredicateException(self, "self.precpred(self._ctx, 2)")
                    self.state = 17341
                    self.relational_operator()
                    self.state = 17342
                    self.relational_expression(3) 
                self.state = 17348
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2388,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class Compound_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.like_type = None # Token

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def in_elements(self):
            return self.getTypedRuleContext(PlSqlParser.In_elementsContext,0)


        def BETWEEN(self):
            return self.getToken(PlSqlParser.BETWEEN, 0)

        def between_elements(self):
            return self.getTypedRuleContext(PlSqlParser.Between_elementsContext,0)


        def NOT(self):
            return self.getToken(PlSqlParser.NOT, 0)

        def LIKE(self):
            return self.getToken(PlSqlParser.LIKE, 0)

        def LIKEC(self):
            return self.getToken(PlSqlParser.LIKEC, 0)

        def LIKE2(self):
            return self.getToken(PlSqlParser.LIKE2, 0)

        def LIKE4(self):
            return self.getToken(PlSqlParser.LIKE4, 0)

        def ESCAPE(self):
            return self.getToken(PlSqlParser.ESCAPE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_compound_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCompound_expression" ):
                listener.enterCompound_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCompound_expression" ):
                listener.exitCompound_expression(self)




    def compound_expression(self):

        localctx = PlSqlParser.Compound_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2068, self.RULE_compound_expression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17349
            self.concatenation(0)
            self.state = 17365
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2392,self._ctx)
            if la_ == 1:
                self.state = 17351
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1138:
                    self.state = 17350
                    self.match(PlSqlParser.NOT)


                self.state = 17363
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [696]:
                    self.state = 17353
                    self.match(PlSqlParser.IN)
                    self.state = 17354
                    self.in_elements()
                    pass
                elif token in [115]:
                    self.state = 17355
                    self.match(PlSqlParser.BETWEEN)
                    self.state = 17356
                    self.between_elements()
                    pass
                elif token in [805, 806, 807, 809]:
                    self.state = 17357
                    localctx.like_type = self._input.LT(1)
                    _la = self._input.LA(1)
                    if not(((((_la - 805)) & ~0x3f) == 0 and ((1 << (_la - 805)) & 23) != 0)):
                        localctx.like_type = self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 17358
                    self.concatenation(0)
                    self.state = 17361
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2390,self._ctx)
                    if la_ == 1:
                        self.state = 17359
                        self.match(PlSqlParser.ESCAPE)
                        self.state = 17360
                        self.concatenation(0)


                    pass
                else:
                    raise NoViableAltException(self)



        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Relational_operatorContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def NOT_EQUAL_OP(self):
            return self.getToken(PlSqlParser.NOT_EQUAL_OP, 0)

        def LESS_THAN_OP(self):
            return self.getToken(PlSqlParser.LESS_THAN_OP, 0)

        def GREATER_THAN_OP(self):
            return self.getToken(PlSqlParser.GREATER_THAN_OP, 0)

        def EXCLAMATION_OPERATOR_PART(self):
            return self.getToken(PlSqlParser.EXCLAMATION_OPERATOR_PART, 0)

        def CARRET_OPERATOR_PART(self):
            return self.getToken(PlSqlParser.CARRET_OPERATOR_PART, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_relational_operator

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRelational_operator" ):
                listener.enterRelational_operator(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRelational_operator" ):
                listener.exitRelational_operator(self)




    def relational_operator(self):

        localctx = PlSqlParser.Relational_operatorContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2070, self.RULE_relational_operator)
        self._la = 0 # Token type
        try:
            self.state = 17381
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2395,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17367
                self.match(PlSqlParser.EQUALS_OP)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17375
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2360]:
                    self.state = 17368
                    self.match(PlSqlParser.NOT_EQUAL_OP)
                    pass
                elif token in [2365]:
                    self.state = 17369
                    self.match(PlSqlParser.LESS_THAN_OP)
                    self.state = 17370
                    self.match(PlSqlParser.GREATER_THAN_OP)
                    pass
                elif token in [2363]:
                    self.state = 17371
                    self.match(PlSqlParser.EXCLAMATION_OPERATOR_PART)
                    self.state = 17372
                    self.match(PlSqlParser.EQUALS_OP)
                    pass
                elif token in [2361]:
                    self.state = 17373
                    self.match(PlSqlParser.CARRET_OPERATOR_PART)
                    self.state = 17374
                    self.match(PlSqlParser.EQUALS_OP)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17377
                _la = self._input.LA(1)
                if not(_la==2364 or _la==2365):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 17379
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2369:
                    self.state = 17378
                    self.match(PlSqlParser.EQUALS_OP)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class In_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def constant(self):
            return self.getTypedRuleContext(PlSqlParser.ConstantContext,0)


        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def general_element(self):
            return self.getTypedRuleContext(PlSqlParser.General_elementContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_in_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIn_elements" ):
                listener.enterIn_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIn_elements" ):
                listener.exitIn_elements(self)




    def in_elements(self):

        localctx = PlSqlParser.In_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2072, self.RULE_in_elements)
        self._la = 0 # Token type
        try:
            self.state = 17401
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2397,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17383
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17384
                self.subquery()
                self.state = 17385
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17387
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17388
                self.concatenation(0)
                self.state = 17393
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17389
                    self.match(PlSqlParser.COMMA)
                    self.state = 17390
                    self.concatenation(0)
                    self.state = 17395
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 17396
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17398
                self.constant()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 17399
                self.bind_variable()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 17400
                self.general_element(0)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Between_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_between_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBetween_elements" ):
                listener.enterBetween_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBetween_elements" ):
                listener.exitBetween_elements(self)




    def between_elements(self):

        localctx = PlSqlParser.Between_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2074, self.RULE_between_elements)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17403
            self.concatenation(0)
            self.state = 17404
            self.match(PlSqlParser.AND)
            self.state = 17405
            self.concatenation(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConcatenationContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.op = None # Token

        def model_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Model_expressionContext,0)


        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def interval_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Interval_expressionContext,0)


        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def ERROR(self):
            return self.getToken(PlSqlParser.ERROR, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def ZONE(self):
            return self.getToken(PlSqlParser.ZONE, 0)

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def DOUBLE_ASTERISK(self):
            return self.getToken(PlSqlParser.DOUBLE_ASTERISK, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def SOLIDUS(self):
            return self.getToken(PlSqlParser.SOLIDUS, 0)

        def MOD(self):
            return self.getToken(PlSqlParser.MOD, 0)

        def PLUS_SIGN(self):
            return self.getToken(PlSqlParser.PLUS_SIGN, 0)

        def MINUS_SIGN(self):
            return self.getToken(PlSqlParser.MINUS_SIGN, 0)

        def BAR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BAR)
            else:
                return self.getToken(PlSqlParser.BAR, i)

        def COLLATE(self):
            return self.getToken(PlSqlParser.COLLATE, 0)

        def column_collation_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_collation_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_concatenation

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConcatenation" ):
                listener.enterConcatenation(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConcatenation" ):
                listener.exitConcatenation(self)



    def concatenation(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.ConcatenationContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2076
        self.enterRecursionRule(localctx, 2076, self.RULE_concatenation, _p)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17408
            self.model_expression()
            self.state = 17417
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2399,self._ctx)
            if la_ == 1:
                self.state = 17409
                self.match(PlSqlParser.AT)
                self.state = 17414
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [821]:
                    self.state = 17410
                    self.match(PlSqlParser.LOCAL)
                    pass
                elif token in [2024]:
                    self.state = 17411
                    self.match(PlSqlParser.TIME)
                    self.state = 17412
                    self.match(PlSqlParser.ZONE)
                    self.state = 17413
                    self.concatenation(0)
                    pass
                else:
                    raise NoViableAltException(self)


            elif la_ == 2:
                self.state = 17416
                self.interval_expression()


            self.state = 17422
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2400,self._ctx)
            if la_ == 1:
                self.state = 17419
                self.match(PlSqlParser.ON)
                self.state = 17420
                self.match(PlSqlParser.OVERFLOW)
                self.state = 17421
                _la = self._input.LA(1)
                if not(_la==484 or _la==2069):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self._ctx.stop = self._input.LT(-1)
            self.state = 17442
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2402,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    self.state = 17440
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2401,self._ctx)
                    if la_ == 1:
                        localctx = PlSqlParser.ConcatenationContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_concatenation)
                        self.state = 17424
                        if not self.precpred(self._ctx, 5):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 5)")
                        self.state = 17425
                        localctx.op = self.match(PlSqlParser.DOUBLE_ASTERISK)
                        self.state = 17426
                        self.concatenation(6)
                        pass

                    elif la_ == 2:
                        localctx = PlSqlParser.ConcatenationContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_concatenation)
                        self.state = 17427
                        if not self.precpred(self._ctx, 4):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 4)")
                        self.state = 17428
                        localctx.op = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==927 or _la==2350 or _la==2354):
                            localctx.op = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 17429
                        self.concatenation(5)
                        pass

                    elif la_ == 3:
                        localctx = PlSqlParser.ConcatenationContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_concatenation)
                        self.state = 17430
                        if not self.precpred(self._ctx, 3):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 3)")
                        self.state = 17431
                        localctx.op = self._input.LT(1)
                        _la = self._input.LA(1)
                        if not(_la==2351 or _la==2352):
                            localctx.op = self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 17432
                        self.concatenation(4)
                        pass

                    elif la_ == 4:
                        localctx = PlSqlParser.ConcatenationContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_concatenation)
                        self.state = 17433
                        if not self.precpred(self._ctx, 2):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 2)")
                        self.state = 17434
                        self.match(PlSqlParser.BAR)
                        self.state = 17435
                        self.match(PlSqlParser.BAR)
                        self.state = 17436
                        self.concatenation(3)
                        pass

                    elif la_ == 5:
                        localctx = PlSqlParser.ConcatenationContext(self, _parentctx, _parentState)
                        self.pushNewRecursionContext(localctx, _startState, self.RULE_concatenation)
                        self.state = 17437
                        if not self.precpred(self._ctx, 1):
                            from antlr4.error.Errors import FailedPredicateException
                            raise FailedPredicateException(self, "self.precpred(self._ctx, 1)")
                        self.state = 17438
                        self.match(PlSqlParser.COLLATE)
                        self.state = 17439
                        self.column_collation_name()
                        pass

             
                self.state = 17444
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2402,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class Interval_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DAY(self):
            return self.getToken(PlSqlParser.DAY, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def SECOND(self):
            return self.getToken(PlSqlParser.SECOND, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_interval_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInterval_expression" ):
                listener.enterInterval_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInterval_expression" ):
                listener.exitInterval_expression(self)




    def interval_expression(self):

        localctx = PlSqlParser.Interval_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2078, self.RULE_interval_expression)
        self._la = 0 # Token type
        try:
            self.state = 17472
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2406,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17445
                self.match(PlSqlParser.DAY)
                self.state = 17450
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 17446
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 17447
                    self.concatenation(0)
                    self.state = 17448
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 17452
                self.match(PlSqlParser.TO)
                self.state = 17453
                self.match(PlSqlParser.SECOND)
                self.state = 17458
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2404,self._ctx)
                if la_ == 1:
                    self.state = 17454
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 17455
                    self.concatenation(0)
                    self.state = 17456
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17460
                self.match(PlSqlParser.YEAR)
                self.state = 17465
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 17461
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 17462
                    self.concatenation(0)
                    self.state = 17463
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 17467
                self.match(PlSqlParser.TO)
                self.state = 17468
                self.match(PlSqlParser.MONTH)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17469
                self.concatenation(0)
                self.state = 17470
                _la = self._input.LA(1)
                if not(_la==346 or _la==931 or _la==1558 or _la==2260):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def unary_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Unary_expressionContext,0)


        def LEFT_BRACKET(self):
            return self.getToken(PlSqlParser.LEFT_BRACKET, 0)

        def model_expression_element(self):
            return self.getTypedRuleContext(PlSqlParser.Model_expression_elementContext,0)


        def RIGHT_BRACKET(self):
            return self.getToken(PlSqlParser.RIGHT_BRACKET, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_model_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_expression" ):
                listener.enterModel_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_expression" ):
                listener.exitModel_expression(self)




    def model_expression(self):

        localctx = PlSqlParser.Model_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2080, self.RULE_model_expression)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17474
            self.unary_expression(0)
            self.state = 17479
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2407,self._ctx)
            if la_ == 1:
                self.state = 17475
                self.match(PlSqlParser.LEFT_BRACKET)
                self.state = 17476
                self.model_expression_element()
                self.state = 17477
                self.match(PlSqlParser.RIGHT_BRACKET)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Model_expression_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ANY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ANY)
            else:
                return self.getToken(PlSqlParser.ANY, i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def single_column_for_loop(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Single_column_for_loopContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Single_column_for_loopContext,i)


        def multi_column_for_loop(self):
            return self.getTypedRuleContext(PlSqlParser.Multi_column_for_loopContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_model_expression_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterModel_expression_element" ):
                listener.enterModel_expression_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitModel_expression_element" ):
                listener.exitModel_expression_element(self)




    def model_expression_element(self):

        localctx = PlSqlParser.Model_expression_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2082, self.RULE_model_expression_element)
        self._la = 0 # Token type
        try:
            self.state = 17504
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2412,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17483
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2408,self._ctx)
                if la_ == 1:
                    self.state = 17481
                    self.match(PlSqlParser.ANY)
                    pass

                elif la_ == 2:
                    self.state = 17482
                    self.expression()
                    pass


                self.state = 17492
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17485
                    self.match(PlSqlParser.COMMA)
                    self.state = 17488
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2409,self._ctx)
                    if la_ == 1:
                        self.state = 17486
                        self.match(PlSqlParser.ANY)
                        pass

                    elif la_ == 2:
                        self.state = 17487
                        self.expression()
                        pass


                    self.state = 17494
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17495
                self.single_column_for_loop()
                self.state = 17500
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17496
                    self.match(PlSqlParser.COMMA)
                    self.state = 17497
                    self.single_column_for_loop()
                    self.state = 17502
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17503
                self.multi_column_for_loop()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Single_column_for_loopContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.fromExpr = None # ExpressionContext
            self.toExpr = None # ExpressionContext
            self.action_type = None # Token
            self.action_expr = None # ExpressionContext

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def INCREMENT(self):
            return self.getToken(PlSqlParser.INCREMENT, 0)

        def DECREMENT(self):
            return self.getToken(PlSqlParser.DECREMENT, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def LIKE(self):
            return self.getToken(PlSqlParser.LIKE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_single_column_for_loop

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSingle_column_for_loop" ):
                listener.enterSingle_column_for_loop(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSingle_column_for_loop" ):
                listener.exitSingle_column_for_loop(self)




    def single_column_for_loop(self):

        localctx = PlSqlParser.Single_column_for_loopContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2084, self.RULE_single_column_for_loop)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17506
            self.match(PlSqlParser.FOR)
            self.state = 17507
            self.column_name()
            self.state = 17525
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [696]:
                self.state = 17508
                self.match(PlSqlParser.IN)
                self.state = 17509
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17511
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                    self.state = 17510
                    self.expressions()


                self.state = 17513
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [588, 809]:
                self.state = 17516
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==809:
                    self.state = 17514
                    self.match(PlSqlParser.LIKE)
                    self.state = 17515
                    self.expression()


                self.state = 17518
                self.match(PlSqlParser.FROM)
                self.state = 17519
                localctx.fromExpr = self.expression()
                self.state = 17520
                self.match(PlSqlParser.TO)
                self.state = 17521
                localctx.toExpr = self.expression()
                self.state = 17522
                localctx.action_type = self._input.LT(1)
                _la = self._input.LA(1)
                if not(_la==365 or _la==665):
                    localctx.action_type = self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 17523
                localctx.action_expr = self.expression()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Multi_column_for_loopContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def paren_column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Paren_column_listContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_multi_column_for_loop

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMulti_column_for_loop" ):
                listener.enterMulti_column_for_loop(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMulti_column_for_loop" ):
                listener.exitMulti_column_for_loop(self)




    def multi_column_for_loop(self):

        localctx = PlSqlParser.Multi_column_for_loopContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2086, self.RULE_multi_column_for_loop)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17527
            self.match(PlSqlParser.FOR)
            self.state = 17528
            self.paren_column_list()
            self.state = 17529
            self.match(PlSqlParser.IN)
            self.state = 17530
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 17537
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2417,self._ctx)
            if la_ == 1:
                self.state = 17531
                self.subquery()
                pass

            elif la_ == 2:
                self.state = 17532
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17534
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                    self.state = 17533
                    self.expressions()


                self.state = 17536
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


            self.state = 17539
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Unary_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self._expression = None # ExpressionContext
            self.index = list() # of ExpressionContexts

        def unary_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Unary_expressionContext,0)


        def MINUS_SIGN(self):
            return self.getToken(PlSqlParser.MINUS_SIGN, 0)

        def PLUS_SIGN(self):
            return self.getToken(PlSqlParser.PLUS_SIGN, 0)

        def PRIOR(self):
            return self.getToken(PlSqlParser.PRIOR, 0)

        def CONNECT_BY_ROOT(self):
            return self.getToken(PlSqlParser.CONNECT_BY_ROOT, 0)

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def DISTINCT(self):
            return self.getToken(PlSqlParser.DISTINCT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def case_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Case_statementContext,0)


        def quantified_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Quantified_expressionContext,0)


        def standard_function(self):
            return self.getTypedRuleContext(PlSqlParser.Standard_functionContext,0)


        def atom(self):
            return self.getTypedRuleContext(PlSqlParser.AtomContext,0)


        def implicit_cursor_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Implicit_cursor_expressionContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def LAST(self):
            return self.getToken(PlSqlParser.LAST, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def NEXT(self):
            return self.getToken(PlSqlParser.NEXT, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_unary_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUnary_expression" ):
                listener.enterUnary_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUnary_expression" ):
                listener.exitUnary_expression(self)



    def unary_expression(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.Unary_expressionContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2088
        self.enterRecursionRule(localctx, 2088, self.RULE_unary_expression, _p)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17559
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2418,self._ctx)
            if la_ == 1:
                self.state = 17542
                _la = self._input.LA(1)
                if not(_la==2351 or _la==2352):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 17543
                self.unary_expression(12)
                pass

            elif la_ == 2:
                self.state = 17544
                self.match(PlSqlParser.PRIOR)
                self.state = 17545
                self.unary_expression(11)
                pass

            elif la_ == 3:
                self.state = 17546
                self.match(PlSqlParser.CONNECT_BY_ROOT)
                self.state = 17547
                self.unary_expression(10)
                pass

            elif la_ == 4:
                self.state = 17548
                self.match(PlSqlParser.NEW)
                self.state = 17549
                self.unary_expression(9)
                pass

            elif la_ == 5:
                self.state = 17550
                self.match(PlSqlParser.DISTINCT)
                self.state = 17551
                self.unary_expression(8)
                pass

            elif la_ == 6:
                self.state = 17552
                self.match(PlSqlParser.ALL)
                self.state = 17553
                self.unary_expression(7)
                pass

            elif la_ == 7:
                self.state = 17554
                self.case_statement()
                pass

            elif la_ == 8:
                self.state = 17555
                self.quantified_expression()
                pass

            elif la_ == 9:
                self.state = 17556
                self.standard_function()
                pass

            elif la_ == 10:
                self.state = 17557
                self.atom()
                pass

            elif la_ == 11:
                self.state = 17558
                self.implicit_cursor_expression()
                pass


            self._ctx.stop = self._input.LT(-1)
            self.state = 17573
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2420,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    localctx = PlSqlParser.Unary_expressionContext(self, _parentctx, _parentState)
                    self.pushNewRecursionContext(localctx, _startState, self.RULE_unary_expression)
                    self.state = 17561
                    if not self.precpred(self._ctx, 5):
                        from antlr4.error.Errors import FailedPredicateException
                        raise FailedPredicateException(self, "self.precpred(self._ctx, 5)")
                    self.state = 17562
                    self.match(PlSqlParser.PERIOD)
                    self.state = 17569
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [298, 559, 779, 810]:
                        self.state = 17563
                        _la = self._input.LA(1)
                        if not(_la==298 or _la==559 or _la==779 or _la==810):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    elif token in [508, 970, 1379]:
                        self.state = 17564
                        _la = self._input.LA(1)
                        if not(_la==508 or _la==970 or _la==1379):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        self.state = 17565
                        self.match(PlSqlParser.LEFT_PAREN)
                        self.state = 17566
                        localctx._expression = self.expression()
                        localctx.index.append(localctx._expression)
                        self.state = 17567
                        self.match(PlSqlParser.RIGHT_PAREN)
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 17575
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2420,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class Implicit_cursor_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.index = None # ExpressionContext

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def PERCENT_BULK_ROWCOUNT(self):
            return self.getToken(PlSqlParser.PERCENT_BULK_ROWCOUNT, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def PERCENT_BULK_EXCEPTIONS(self):
            return self.getToken(PlSqlParser.PERCENT_BULK_EXCEPTIONS, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def ERROR_INDEX(self):
            return self.getToken(PlSqlParser.ERROR_INDEX, 0)

        def ERROR_CODE(self):
            return self.getToken(PlSqlParser.ERROR_CODE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_implicit_cursor_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImplicit_cursor_expression" ):
                listener.enterImplicit_cursor_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImplicit_cursor_expression" ):
                listener.exitImplicit_cursor_expression(self)




    def implicit_cursor_expression(self):

        localctx = PlSqlParser.Implicit_cursor_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2090, self.RULE_implicit_cursor_expression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17576
            self.match(PlSqlParser.SQL)
            self.state = 17593
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1311]:
                self.state = 17577
                self.match(PlSqlParser.PERCENT_BULK_ROWCOUNT)
                self.state = 17578
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17579
                localctx.index = self.expression()
                self.state = 17580
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1310]:
                self.state = 17582
                self.match(PlSqlParser.PERCENT_BULK_EXCEPTIONS)
                self.state = 17591
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2340]:
                    self.state = 17583
                    self.match(PlSqlParser.PERIOD)
                    self.state = 17584
                    self.match(PlSqlParser.COUNT)
                    pass
                elif token in [2347]:
                    self.state = 17585
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 17586
                    self.expression()
                    self.state = 17587
                    self.match(PlSqlParser.RIGHT_PAREN)
                    self.state = 17588
                    self.match(PlSqlParser.PERIOD)
                    self.state = 17589
                    _la = self._input.LA(1)
                    if not(_la==487 or _la==488):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    pass
                else:
                    raise NoViableAltException(self)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Collection_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def collation_name(self):
            return self.getTypedRuleContext(PlSqlParser.Collation_nameContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def general_element_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.General_element_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.General_element_partContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_collection_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollection_expression" ):
                listener.enterCollection_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollection_expression" ):
                listener.exitCollection_expression(self)




    def collection_expression(self):

        localctx = PlSqlParser.Collection_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2092, self.RULE_collection_expression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17595
            self.collation_name()
            self.state = 17596
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 17597
            self.expression()
            self.state = 17598
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 17603
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 17599
                self.match(PlSqlParser.PERIOD)
                self.state = 17600
                self.general_element_part()
                self.state = 17605
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Case_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def searched_case_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Searched_case_statementContext,0)


        def simple_case_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Simple_case_statementContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_case_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCase_statement" ):
                listener.enterCase_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCase_statement" ):
                listener.exitCase_statement(self)




    def case_statement(self):

        localctx = PlSqlParser.Case_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2094, self.RULE_case_statement)
        try:
            self.state = 17608
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2424,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17606
                self.searched_case_statement()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17607
                self.simple_case_statement()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Simple_case_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ck1 = None # Token

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def CASE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CASE)
            else:
                return self.getToken(PlSqlParser.CASE, i)

        def label_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Label_declarationContext,0)


        def simple_case_when_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Simple_case_when_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Simple_case_when_partContext,i)


        def case_else_part(self):
            return self.getTypedRuleContext(PlSqlParser.Case_else_partContext,0)


        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_simple_case_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimple_case_statement" ):
                listener.enterSimple_case_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimple_case_statement" ):
                listener.exitSimple_case_statement(self)




    def simple_case_statement(self):

        localctx = PlSqlParser.Simple_case_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2096, self.RULE_simple_case_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17611
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2365:
                self.state = 17610
                self.label_declaration()


            self.state = 17613
            localctx.ck1 = self.match(PlSqlParser.CASE)
            self.state = 17614
            self.expression()
            self.state = 17616 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 17615
                self.simple_case_when_part()
                self.state = 17618 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==2204):
                    break

            self.state = 17621
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==460:
                self.state = 17620
                self.case_else_part()


            self.state = 17623
            self.match(PlSqlParser.END)
            self.state = 17625
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2428,self._ctx)
            if la_ == 1:
                self.state = 17624
                self.match(PlSqlParser.CASE)


            self.state = 17628
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2429,self._ctx)
            if la_ == 1:
                self.state = 17627
                self.label_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Simple_case_when_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_simple_case_when_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSimple_case_when_part" ):
                listener.enterSimple_case_when_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSimple_case_when_part" ):
                listener.exitSimple_case_when_part(self)




    def simple_case_when_part(self):

        localctx = PlSqlParser.Simple_case_when_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2098, self.RULE_simple_case_when_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17630
            self.match(PlSqlParser.WHEN)
            self.state = 17631
            self.expression()
            self.state = 17632
            self.match(PlSqlParser.THEN)
            self.state = 17635
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2430,self._ctx)
            if la_ == 1:
                self.state = 17633
                self.seq_of_statements()
                pass

            elif la_ == 2:
                self.state = 17634
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Searched_case_statementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.ck1 = None # Token

        def END(self):
            return self.getToken(PlSqlParser.END, 0)

        def CASE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CASE)
            else:
                return self.getToken(PlSqlParser.CASE, i)

        def label_declaration(self):
            return self.getTypedRuleContext(PlSqlParser.Label_declarationContext,0)


        def searched_case_when_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Searched_case_when_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Searched_case_when_partContext,i)


        def case_else_part(self):
            return self.getTypedRuleContext(PlSqlParser.Case_else_partContext,0)


        def label_name(self):
            return self.getTypedRuleContext(PlSqlParser.Label_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_searched_case_statement

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSearched_case_statement" ):
                listener.enterSearched_case_statement(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSearched_case_statement" ):
                listener.exitSearched_case_statement(self)




    def searched_case_statement(self):

        localctx = PlSqlParser.Searched_case_statementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2100, self.RULE_searched_case_statement)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17638
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2365:
                self.state = 17637
                self.label_declaration()


            self.state = 17640
            localctx.ck1 = self.match(PlSqlParser.CASE)
            self.state = 17642 
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while True:
                self.state = 17641
                self.searched_case_when_part()
                self.state = 17644 
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if not (_la==2204):
                    break

            self.state = 17647
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==460:
                self.state = 17646
                self.case_else_part()


            self.state = 17649
            self.match(PlSqlParser.END)
            self.state = 17651
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2434,self._ctx)
            if la_ == 1:
                self.state = 17650
                self.match(PlSqlParser.CASE)


            self.state = 17654
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2435,self._ctx)
            if la_ == 1:
                self.state = 17653
                self.label_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Searched_case_when_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_searched_case_when_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSearched_case_when_part" ):
                listener.enterSearched_case_when_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSearched_case_when_part" ):
                listener.exitSearched_case_when_part(self)




    def searched_case_when_part(self):

        localctx = PlSqlParser.Searched_case_when_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2102, self.RULE_searched_case_when_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17656
            self.match(PlSqlParser.WHEN)
            self.state = 17657
            self.condition()
            self.state = 17658
            self.match(PlSqlParser.THEN)
            self.state = 17661
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2436,self._ctx)
            if la_ == 1:
                self.state = 17659
                self.seq_of_statements()
                pass

            elif la_ == 2:
                self.state = 17660
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Case_else_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ELSE(self):
            return self.getToken(PlSqlParser.ELSE, 0)

        def seq_of_statements(self):
            return self.getTypedRuleContext(PlSqlParser.Seq_of_statementsContext,0)


        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_case_else_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCase_else_part" ):
                listener.enterCase_else_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCase_else_part" ):
                listener.exitCase_else_part(self)




    def case_else_part(self):

        localctx = PlSqlParser.Case_else_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2104, self.RULE_case_else_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17663
            self.match(PlSqlParser.ELSE)
            self.state = 17666
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2437,self._ctx)
            if la_ == 1:
                self.state = 17664
                self.seq_of_statements()
                pass

            elif la_ == 2:
                self.state = 17665
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class AtomContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def constant(self):
            return self.getTypedRuleContext(PlSqlParser.ConstantContext,0)


        def inquiry_directive(self):
            return self.getTypedRuleContext(PlSqlParser.Inquiry_directiveContext,0)


        def general_element(self):
            return self.getTypedRuleContext(PlSqlParser.General_elementContext,0)


        def outer_join_sign(self):
            return self.getTypedRuleContext(PlSqlParser.Outer_join_signContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def subquery_operation_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Subquery_operation_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Subquery_operation_partContext,i)


        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_atom

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAtom" ):
                listener.enterAtom(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAtom" ):
                listener.exitAtom(self)




    def atom(self):

        localctx = PlSqlParser.AtomContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2106, self.RULE_atom)
        try:
            self.state = 17688
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2440,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17668
                self.bind_variable()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17669
                self.constant()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17670
                self.inquiry_directive()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 17671
                self.general_element(0)
                self.state = 17673
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2438,self._ctx)
                if la_ == 1:
                    self.state = 17672
                    self.outer_join_sign()


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 17675
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17676
                self.subquery()
                self.state = 17677
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 17681
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2439,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 17678
                        self.subquery_operation_part() 
                    self.state = 17683
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2439,self._ctx)

                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 17684
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17685
                self.expressions()
                self.state = 17686
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Quantified_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SOME(self):
            return self.getToken(PlSqlParser.SOME, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def ANY(self):
            return self.getToken(PlSqlParser.ANY, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def select_only_statement(self):
            return self.getTypedRuleContext(PlSqlParser.Select_only_statementContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_quantified_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuantified_expression" ):
                listener.enterQuantified_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuantified_expression" ):
                listener.exitQuantified_expression(self)




    def quantified_expression(self):

        localctx = PlSqlParser.Quantified_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2108, self.RULE_quantified_expression)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 17690
            _la = self._input.LA(1)
            if not(_la==38 or _la==54 or _la==508 or _la==1625):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 17706
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2442,self._ctx)
            if la_ == 1:
                self.state = 17691
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17692
                self.select_only_statement()
                self.state = 17693
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 2:
                self.state = 17695
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17696
                self.expression()
                self.state = 17701
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17697
                    self.match(PlSqlParser.COMMA)
                    self.state = 17698
                    self.expression()
                    self.state = 17703
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 17704
                self.match(PlSqlParser.RIGHT_PAREN)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class String_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUBSTR(self):
            return self.getToken(PlSqlParser.SUBSTR, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def TO_CHAR(self):
            return self.getToken(PlSqlParser.TO_CHAR, 0)

        def table_element(self):
            return self.getTypedRuleContext(PlSqlParser.Table_elementContext,0)


        def standard_function(self):
            return self.getTypedRuleContext(PlSqlParser.Standard_functionContext,0)


        def quoted_string(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quoted_stringContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,i)


        def DECODE(self):
            return self.getToken(PlSqlParser.DECODE, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def CHR(self):
            return self.getToken(PlSqlParser.CHR, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def NCHAR_CS(self):
            return self.getToken(PlSqlParser.NCHAR_CS, 0)

        def NVL(self):
            return self.getToken(PlSqlParser.NVL, 0)

        def TRIM(self):
            return self.getToken(PlSqlParser.TRIM, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def LEADING(self):
            return self.getToken(PlSqlParser.LEADING, 0)

        def TRAILING(self):
            return self.getToken(PlSqlParser.TRAILING, 0)

        def BOTH(self):
            return self.getToken(PlSqlParser.BOTH, 0)

        def TO_DATE(self):
            return self.getToken(PlSqlParser.TO_DATE, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def CONVERSION(self):
            return self.getToken(PlSqlParser.CONVERSION, 0)

        def ERROR(self):
            return self.getToken(PlSqlParser.ERROR, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_string_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterString_function" ):
                listener.enterString_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitString_function" ):
                listener.exitString_function(self)




    def string_function(self):

        localctx = PlSqlParser.String_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2110, self.RULE_string_function)
        self._la = 0 # Token type
        try:
            self.state = 17794
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2316]:
                self.enterOuterAlt(localctx, 1)
                self.state = 17708
                self.match(PlSqlParser.SUBSTR)
                self.state = 17709
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17710
                self.expression()
                self.state = 17711
                self.match(PlSqlParser.COMMA)
                self.state = 17712
                self.expression()
                self.state = 17715
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 17713
                    self.match(PlSqlParser.COMMA)
                    self.state = 17714
                    self.expression()


                self.state = 17717
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2317]:
                self.enterOuterAlt(localctx, 2)
                self.state = 17719
                self.match(PlSqlParser.TO_CHAR)
                self.state = 17720
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17724
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2444,self._ctx)
                if la_ == 1:
                    self.state = 17721
                    self.table_element()
                    pass

                elif la_ == 2:
                    self.state = 17722
                    self.standard_function()
                    pass

                elif la_ == 3:
                    self.state = 17723
                    self.expression()
                    pass


                self.state = 17728
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2445,self._ctx)
                if la_ == 1:
                    self.state = 17726
                    self.match(PlSqlParser.COMMA)
                    self.state = 17727
                    self.quoted_string()


                self.state = 17732
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 17730
                    self.match(PlSqlParser.COMMA)
                    self.state = 17731
                    self.quoted_string()


                self.state = 17734
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2301]:
                self.enterOuterAlt(localctx, 3)
                self.state = 17736
                self.match(PlSqlParser.DECODE)
                self.state = 17737
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17738
                self.expressions()
                self.state = 17739
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [194]:
                self.enterOuterAlt(localctx, 4)
                self.state = 17741
                self.match(PlSqlParser.CHR)
                self.state = 17742
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17743
                self.concatenation(0)
                self.state = 17744
                self.match(PlSqlParser.USING)
                self.state = 17745
                self.match(PlSqlParser.NCHAR_CS)
                self.state = 17746
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2311]:
                self.enterOuterAlt(localctx, 5)
                self.state = 17748
                self.match(PlSqlParser.NVL)
                self.state = 17749
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17750
                self.expression()
                self.state = 17751
                self.match(PlSqlParser.COMMA)
                self.state = 17752
                self.expression()
                self.state = 17753
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2318]:
                self.enterOuterAlt(localctx, 6)
                self.state = 17755
                self.match(PlSqlParser.TRIM)
                self.state = 17756
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17764
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2449,self._ctx)
                if la_ == 1:
                    self.state = 17758
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2447,self._ctx)
                    if la_ == 1:
                        self.state = 17757
                        _la = self._input.LA(1)
                        if not(_la==143 or _la==790 or _la==2057):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 17761
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                        self.state = 17760
                        self.expression()


                    self.state = 17763
                    self.match(PlSqlParser.FROM)


                self.state = 17766
                self.concatenation(0)
                self.state = 17767
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2325]:
                self.enterOuterAlt(localctx, 7)
                self.state = 17769
                self.match(PlSqlParser.TO_DATE)
                self.state = 17770
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17774
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2450,self._ctx)
                if la_ == 1:
                    self.state = 17771
                    self.table_element()
                    pass

                elif la_ == 2:
                    self.state = 17772
                    self.standard_function()
                    pass

                elif la_ == 3:
                    self.state = 17773
                    self.expression()
                    pass


                self.state = 17782
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 17776
                    self.match(PlSqlParser.DEFAULT)
                    self.state = 17777
                    self.concatenation(0)
                    self.state = 17778
                    self.match(PlSqlParser.ON)
                    self.state = 17779
                    self.match(PlSqlParser.CONVERSION)
                    self.state = 17780
                    self.match(PlSqlParser.ERROR)


                self.state = 17790
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 17784
                    self.match(PlSqlParser.COMMA)
                    self.state = 17785
                    self.quoted_string()
                    self.state = 17788
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 17786
                        self.match(PlSqlParser.COMMA)
                        self.state = 17787
                        self.quoted_string()




                self.state = 17792
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Standard_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def string_function(self):
            return self.getTypedRuleContext(PlSqlParser.String_functionContext,0)


        def numeric_function_wrapper(self):
            return self.getTypedRuleContext(PlSqlParser.Numeric_function_wrapperContext,0)


        def json_function(self):
            return self.getTypedRuleContext(PlSqlParser.Json_functionContext,0)


        def other_function(self):
            return self.getTypedRuleContext(PlSqlParser.Other_functionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_standard_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStandard_function" ):
                listener.enterStandard_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStandard_function" ):
                listener.exitStandard_function(self)




    def standard_function(self):

        localctx = PlSqlParser.Standard_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2112, self.RULE_standard_function)
        try:
            self.state = 17800
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2455,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 17796
                self.string_function()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 17797
                self.numeric_function_wrapper()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 17798
                self.json_function()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 17799
                self.other_function()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JSON_ARRAY(self):
            return self.getToken(PlSqlParser.JSON_ARRAY, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def json_array_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Json_array_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Json_array_elementContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def json_on_null_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_on_null_clauseContext,0)


        def json_return_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_return_clauseContext,0)


        def STRICT(self):
            return self.getToken(PlSqlParser.STRICT, 0)

        def JSON_ARRAYAGG(self):
            return self.getToken(PlSqlParser.JSON_ARRAYAGG, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def JSON_OBJECT(self):
            return self.getToken(PlSqlParser.JSON_OBJECT, 0)

        def json_object_content(self):
            return self.getTypedRuleContext(PlSqlParser.Json_object_contentContext,0)


        def JSON_OBJECTAGG(self):
            return self.getToken(PlSqlParser.JSON_OBJECTAGG, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def NULL_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULL_)
            else:
                return self.getToken(PlSqlParser.NULL_, i)

        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def ABSENT(self):
            return self.getToken(PlSqlParser.ABSENT, 0)

        def VARCHAR2(self):
            return self.getToken(PlSqlParser.VARCHAR2, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def BLOB(self):
            return self.getToken(PlSqlParser.BLOB, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def BYTE(self):
            return self.getToken(PlSqlParser.BYTE, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def JSON_QUERY(self):
            return self.getToken(PlSqlParser.JSON_QUERY, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def json_query_returning_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_returning_clauseContext,0)


        def json_query_wrapper_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_wrapper_clauseContext,0)


        def json_query_on_error_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_on_error_clauseContext,0)


        def json_query_on_empty_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_on_empty_clauseContext,0)


        def JSON_SERIALIZE(self):
            return self.getToken(PlSqlParser.JSON_SERIALIZE, 0)

        def json_query_return_type(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_return_typeContext,0)


        def PRETTY(self):
            return self.getToken(PlSqlParser.PRETTY, 0)

        def ASCII(self):
            return self.getToken(PlSqlParser.ASCII, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def ERROR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ERROR)
            else:
                return self.getToken(PlSqlParser.ERROR, i)

        def EMPTY_(self):
            return self.getToken(PlSqlParser.EMPTY_, 0)

        def ARRAY(self):
            return self.getToken(PlSqlParser.ARRAY, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def JSON_TRANSFORM(self):
            return self.getToken(PlSqlParser.JSON_TRANSFORM, 0)

        def json_transform_op(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Json_transform_opContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Json_transform_opContext,i)


        def JSON_VALUE(self):
            return self.getToken(PlSqlParser.JSON_VALUE, 0)

        def json_value_return_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_value_return_clauseContext,0)


        def json_value_on_mismatch_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_value_on_mismatch_clauseContext,0)


        def DEFAULT(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DEFAULT)
            else:
                return self.getToken(PlSqlParser.DEFAULT, i)

        def literal(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.LiteralContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.LiteralContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_json_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_function" ):
                listener.enterJson_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_function" ):
                listener.exitJson_function(self)




    def json_function(self):

        localctx = PlSqlParser.Json_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2114, self.RULE_json_function)
        self._la = 0 # Token type
        try:
            self.state = 17990
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [750]:
                self.enterOuterAlt(localctx, 1)
                self.state = 17802
                self.match(PlSqlParser.JSON_ARRAY)
                self.state = 17803
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17804
                self.json_array_element()
                self.state = 17809
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17805
                    self.match(PlSqlParser.COMMA)
                    self.state = 17806
                    self.json_array_element()
                    self.state = 17811
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 17813
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==3 or _la==1162:
                    self.state = 17812
                    self.json_on_null_clause()


                self.state = 17816
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1507:
                    self.state = 17815
                    self.json_return_clause()


                self.state = 17819
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1682:
                    self.state = 17818
                    self.match(PlSqlParser.STRICT)


                self.state = 17821
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [749]:
                self.enterOuterAlt(localctx, 2)
                self.state = 17823
                self.match(PlSqlParser.JSON_ARRAYAGG)
                self.state = 17824
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17825
                self.expression()
                self.state = 17828
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==581:
                    self.state = 17826
                    self.match(PlSqlParser.FORMAT)
                    self.state = 17827
                    self.match(PlSqlParser.JSON)


                self.state = 17831
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1233:
                    self.state = 17830
                    self.order_by_clause()


                self.state = 17834
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==3 or _la==1162:
                    self.state = 17833
                    self.json_on_null_clause()


                self.state = 17837
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1507:
                    self.state = 17836
                    self.json_return_clause()


                self.state = 17840
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1682:
                    self.state = 17839
                    self.match(PlSqlParser.STRICT)


                self.state = 17842
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [757]:
                self.enterOuterAlt(localctx, 3)
                self.state = 17844
                self.match(PlSqlParser.JSON_OBJECT)
                self.state = 17845
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17846
                self.json_object_content()
                self.state = 17847
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [756]:
                self.enterOuterAlt(localctx, 4)
                self.state = 17849
                self.match(PlSqlParser.JSON_OBJECTAGG)
                self.state = 17850
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17852
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2465,self._ctx)
                if la_ == 1:
                    self.state = 17851
                    self.match(PlSqlParser.KEY)


                self.state = 17854
                self.expression()
                self.state = 17855
                self.match(PlSqlParser.VALUE)
                self.state = 17856
                self.expression()
                self.state = 17860
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==3 or _la==1162:
                    self.state = 17857
                    _la = self._input.LA(1)
                    if not(_la==3 or _la==1162):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 17858
                    self.match(PlSqlParser.ON)
                    self.state = 17859
                    self.match(PlSqlParser.NULL_)


                self.state = 17876
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1507:
                    self.state = 17862
                    self.match(PlSqlParser.RETURNING)
                    self.state = 17874
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2166]:
                        self.state = 17863
                        self.match(PlSqlParser.VARCHAR2)
                        self.state = 17870
                        self._errHandler.sync(self)
                        _la = self._input.LA(1)
                        if _la==2347:
                            self.state = 17864
                            self.match(PlSqlParser.LEFT_PAREN)
                            self.state = 17865
                            self.match(PlSqlParser.UNSIGNED_INTEGER)
                            self.state = 17867
                            self._errHandler.sync(self)
                            _la = self._input.LA(1)
                            if _la==157 or _la==186:
                                self.state = 17866
                                _la = self._input.LA(1)
                                if not(_la==157 or _la==186):
                                    self._errHandler.recoverInline(self)
                                else:
                                    self._errHandler.reportMatch(self)
                                    self.consume()


                            self.state = 17869
                            self.match(PlSqlParser.RIGHT_PAREN)


                        pass
                    elif token in [205]:
                        self.state = 17872
                        self.match(PlSqlParser.CLOB)
                        pass
                    elif token in [136]:
                        self.state = 17873
                        self.match(PlSqlParser.BLOB)
                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 17879
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1682:
                    self.state = 17878
                    self.match(PlSqlParser.STRICT)


                self.state = 17884
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2212:
                    self.state = 17881
                    self.match(PlSqlParser.WITH)
                    self.state = 17882
                    self.match(PlSqlParser.UNIQUE)
                    self.state = 17883
                    self.match(PlSqlParser.KEYS)


                self.state = 17886
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [759]:
                self.enterOuterAlt(localctx, 5)
                self.state = 17888
                self.match(PlSqlParser.JSON_QUERY)
                self.state = 17889
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17890
                self.expression()
                self.state = 17893
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==581:
                    self.state = 17891
                    self.match(PlSqlParser.FORMAT)
                    self.state = 17892
                    self.match(PlSqlParser.JSON)


                self.state = 17895
                self.match(PlSqlParser.COMMA)
                self.state = 17896
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 17897
                self.json_query_returning_clause()
                self.state = 17899
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2210 or _la==2212:
                    self.state = 17898
                    self.json_query_wrapper_clause()


                self.state = 17902
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2475,self._ctx)
                if la_ == 1:
                    self.state = 17901
                    self.json_query_on_error_clause()


                self.state = 17905
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==465 or _la==484 or _la==1162 or _la==1193:
                    self.state = 17904
                    self.json_query_on_empty_clause()


                self.state = 17907
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [760]:
                self.enterOuterAlt(localctx, 6)
                self.state = 17909
                self.match(PlSqlParser.JSON_SERIALIZE)
                self.state = 17910
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17911
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 17914
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1507:
                    self.state = 17912
                    self.match(PlSqlParser.RETURNING)
                    self.state = 17913
                    self.json_query_return_type()


                self.state = 17917
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1373:
                    self.state = 17916
                    self.match(PlSqlParser.PRETTY)


                self.state = 17920
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==69:
                    self.state = 17919
                    self.match(PlSqlParser.ASCII)


                self.state = 17923
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2069:
                    self.state = 17922
                    self.match(PlSqlParser.TRUNCATE)


                self.state = 17933
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==465 or _la==484 or _la==1162:
                    self.state = 17929
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1162]:
                        self.state = 17925
                        self.match(PlSqlParser.NULL_)
                        pass
                    elif token in [484]:
                        self.state = 17926
                        self.match(PlSqlParser.ERROR)
                        pass
                    elif token in [465]:
                        self.state = 17927
                        self.match(PlSqlParser.EMPTY_)
                        self.state = 17928
                        _la = self._input.LA(1)
                        if not(_la==66 or _la==1172):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 17931
                    self.match(PlSqlParser.ON)
                    self.state = 17932
                    self.match(PlSqlParser.ERROR)


                self.state = 17935
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [764]:
                self.enterOuterAlt(localctx, 7)
                self.state = 17936
                self.match(PlSqlParser.JSON_TRANSFORM)
                self.state = 17937
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17938
                self.expression()
                self.state = 17939
                self.match(PlSqlParser.COMMA)
                self.state = 17940
                self.json_transform_op()
                self.state = 17945
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17941
                    self.match(PlSqlParser.COMMA)
                    self.state = 17942
                    self.json_transform_op()
                    self.state = 17947
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 17948
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [765]:
                self.enterOuterAlt(localctx, 8)
                self.state = 17950
                self.match(PlSqlParser.JSON_VALUE)
                self.state = 17951
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 17952
                self.expression()
                self.state = 17955
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2484,self._ctx)
                if la_ == 1:
                    self.state = 17953
                    self.match(PlSqlParser.FORMAT)
                    self.state = 17954
                    self.match(PlSqlParser.JSON)


                self.state = 17988
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2492,self._ctx)
                if la_ == 1:
                    self.state = 17957
                    self.match(PlSqlParser.COMMA)
                    self.state = 17959
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2343:
                        self.state = 17958
                        self.match(PlSqlParser.CHAR_STRING)


                    self.state = 17962
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1507:
                        self.state = 17961
                        self.json_value_return_clause()


                    self.state = 17972
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2488,self._ctx)
                    if la_ == 1:
                        self.state = 17968
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [484]:
                            self.state = 17964
                            self.match(PlSqlParser.ERROR)
                            pass
                        elif token in [1162]:
                            self.state = 17965
                            self.match(PlSqlParser.NULL_)
                            pass
                        elif token in [368]:
                            self.state = 17966
                            self.match(PlSqlParser.DEFAULT)
                            self.state = 17967
                            self.literal()
                            pass
                        elif token in [1193]:
                            pass
                        else:
                            pass
                        self.state = 17970
                        self.match(PlSqlParser.ON)
                        self.state = 17971
                        self.match(PlSqlParser.ERROR)


                    self.state = 17982
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2490,self._ctx)
                    if la_ == 1:
                        self.state = 17978
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [484]:
                            self.state = 17974
                            self.match(PlSqlParser.ERROR)
                            pass
                        elif token in [1162]:
                            self.state = 17975
                            self.match(PlSqlParser.NULL_)
                            pass
                        elif token in [368]:
                            self.state = 17976
                            self.match(PlSqlParser.DEFAULT)
                            self.state = 17977
                            self.literal()
                            pass
                        elif token in [1193]:
                            pass
                        else:
                            pass
                        self.state = 17980
                        self.match(PlSqlParser.ON)
                        self.state = 17981
                        self.match(PlSqlParser.EMPTY_)


                    self.state = 17985
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==484 or _la==651 or _la==1162:
                        self.state = 17984
                        self.json_value_on_mismatch_clause()


                    self.state = 17987
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_object_contentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def json_object_entry(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Json_object_entryContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Json_object_entryContext,i)


        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def json_on_null_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_on_null_clauseContext,0)


        def json_return_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_return_clauseContext,0)


        def STRICT(self):
            return self.getToken(PlSqlParser.STRICT, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_object_content

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_object_content" ):
                listener.enterJson_object_content(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_object_content" ):
                listener.exitJson_object_content(self)




    def json_object_content(self):

        localctx = PlSqlParser.Json_object_contentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2116, self.RULE_json_object_content)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18001
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                self.state = 17992
                self.json_object_entry()
                self.state = 17997
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 17993
                    self.match(PlSqlParser.COMMA)
                    self.state = 17994
                    self.json_object_entry()
                    self.state = 17999
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [2350]:
                self.state = 18000
                self.match(PlSqlParser.ASTERISK)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 18004
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==3 or _la==1162:
                self.state = 18003
                self.json_on_null_clause()


            self.state = 18007
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1507:
                self.state = 18006
                self.json_return_clause()


            self.state = 18010
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1682:
                self.state = 18009
                self.match(PlSqlParser.STRICT)


            self.state = 18015
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2212:
                self.state = 18012
                self.match(PlSqlParser.WITH)
                self.state = 18013
                self.match(PlSqlParser.UNIQUE)
                self.state = 18014
                self.match(PlSqlParser.KEYS)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_object_entryContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def COLON(self):
            return self.getToken(PlSqlParser.COLON, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def IS(self):
            return self.getToken(PlSqlParser.IS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_object_entry

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_object_entry" ):
                listener.enterJson_object_entry(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_object_entry" ):
                listener.exitJson_object_entry(self)




    def json_object_entry(self):

        localctx = PlSqlParser.Json_object_entryContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2118, self.RULE_json_object_entry)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18031
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2502,self._ctx)
            if la_ == 1:
                self.state = 18018
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2500,self._ctx)
                if la_ == 1:
                    self.state = 18017
                    self.match(PlSqlParser.KEY)


                self.state = 18020
                self.expression()
                self.state = 18022
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2501,self._ctx)
                if la_ == 1:
                    self.state = 18021
                    _la = self._input.LA(1)
                    if not(_la==740 or _la==2165):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18024
                self.expression()
                pass

            elif la_ == 2:
                self.state = 18026
                self.expression()
                self.state = 18027
                self.match(PlSqlParser.COLON)
                self.state = 18028
                self.expression()
                pass

            elif la_ == 3:
                self.state = 18030
                self.identifier()
                pass


            self.state = 18035
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==581:
                self.state = 18033
                self.match(PlSqlParser.FORMAT)
                self.state = 18034
                self.match(PlSqlParser.JSON)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_table_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def JSON_TABLE(self):
            return self.getToken(PlSqlParser.JSON_TABLE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def ERROR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ERROR)
            else:
                return self.getToken(PlSqlParser.ERROR, i)

        def EMPTY_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EMPTY_)
            else:
                return self.getToken(PlSqlParser.EMPTY_, i)

        def json_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_column_clauseContext,0)


        def NULL_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULL_)
            else:
                return self.getToken(PlSqlParser.NULL_, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_table_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_table_clause" ):
                listener.enterJson_table_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_table_clause" ):
                listener.exitJson_table_clause(self)




    def json_table_clause(self):

        localctx = PlSqlParser.Json_table_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2120, self.RULE_json_table_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18037
            self.match(PlSqlParser.JSON_TABLE)
            self.state = 18038
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 18039
            self.expression()
            self.state = 18042
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==581:
                self.state = 18040
                self.match(PlSqlParser.FORMAT)
                self.state = 18041
                self.match(PlSqlParser.JSON)


            self.state = 18046
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2353:
                self.state = 18044
                self.match(PlSqlParser.COMMA)
                self.state = 18045
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 18051
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2506,self._ctx)
            if la_ == 1:
                self.state = 18048
                _la = self._input.LA(1)
                if not(_la==484 or _la==1162):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18049
                self.match(PlSqlParser.ON)
                self.state = 18050
                self.match(PlSqlParser.ERROR)


            self.state = 18056
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==465 or _la==1162:
                self.state = 18053
                _la = self._input.LA(1)
                if not(_la==465 or _la==1162):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18054
                self.match(PlSqlParser.ON)
                self.state = 18055
                self.match(PlSqlParser.EMPTY_)


            self.state = 18059
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==227:
                self.state = 18058
                self.json_column_clause()


            self.state = 18061
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_array_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def json_function(self):
            return self.getTypedRuleContext(PlSqlParser.Json_functionContext,0)


        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_array_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_array_element" ):
                listener.enterJson_array_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_array_element" ):
                listener.exitJson_array_element(self)




    def json_array_element(self):

        localctx = PlSqlParser.Json_array_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2122, self.RULE_json_array_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18068
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2509,self._ctx)
            if la_ == 1:
                self.state = 18063
                self.expression()
                pass

            elif la_ == 2:
                self.state = 18064
                self.match(PlSqlParser.CHAR_STRING)
                pass

            elif la_ == 3:
                self.state = 18065
                self.match(PlSqlParser.NULL_)
                pass

            elif la_ == 4:
                self.state = 18066
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass

            elif la_ == 5:
                self.state = 18067
                self.json_function()
                pass


            self.state = 18072
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==581:
                self.state = 18070
                self.match(PlSqlParser.FORMAT)
                self.state = 18071
                self.match(PlSqlParser.JSON)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_on_null_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def NULL_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULL_)
            else:
                return self.getToken(PlSqlParser.NULL_, i)

        def ABSENT(self):
            return self.getToken(PlSqlParser.ABSENT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_on_null_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_on_null_clause" ):
                listener.enterJson_on_null_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_on_null_clause" ):
                listener.exitJson_on_null_clause(self)




    def json_on_null_clause(self):

        localctx = PlSqlParser.Json_on_null_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2124, self.RULE_json_on_null_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18074
            _la = self._input.LA(1)
            if not(_la==3 or _la==1162):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 18075
            self.match(PlSqlParser.ON)
            self.state = 18076
            self.match(PlSqlParser.NULL_)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_return_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def VARCHAR2(self):
            return self.getToken(PlSqlParser.VARCHAR2, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def BLOB(self):
            return self.getToken(PlSqlParser.BLOB, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def BYTE(self):
            return self.getToken(PlSqlParser.BYTE, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_return_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_return_clause" ):
                listener.enterJson_return_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_return_clause" ):
                listener.exitJson_return_clause(self)




    def json_return_clause(self):

        localctx = PlSqlParser.Json_return_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2126, self.RULE_json_return_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18078
            self.match(PlSqlParser.RETURNING)
            self.state = 18090
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2166]:
                self.state = 18079
                self.match(PlSqlParser.VARCHAR2)
                self.state = 18086
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 18080
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 18081
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    self.state = 18083
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==157 or _la==186:
                        self.state = 18082
                        _la = self._input.LA(1)
                        if not(_la==157 or _la==186):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18085
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [205]:
                self.state = 18088
                self.match(PlSqlParser.CLOB)
                pass
            elif token in [136]:
                self.state = 18089
                self.match(PlSqlParser.BLOB)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_transform_opContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def CHAR_STRING(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.CHAR_STRING)
            else:
                return self.getToken(PlSqlParser.CHAR_STRING, i)

        def ON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ON)
            else:
                return self.getToken(PlSqlParser.ON, i)

        def MISSING(self):
            return self.getToken(PlSqlParser.MISSING, 0)

        def IGNORE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.IGNORE)
            else:
                return self.getToken(PlSqlParser.IGNORE, i)

        def ERROR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ERROR)
            else:
                return self.getToken(PlSqlParser.ERROR, i)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def EXISTING(self):
            return self.getToken(PlSqlParser.EXISTING, 0)

        def NULL_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULL_)
            else:
                return self.getToken(PlSqlParser.NULL_, i)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def APPEND(self):
            return self.getToken(PlSqlParser.APPEND, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_transform_op

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_transform_op" ):
                listener.enterJson_transform_op(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_transform_op" ):
                listener.exitJson_transform_op(self)




    def json_transform_op(self):

        localctx = PlSqlParser.Json_transform_opContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2128, self.RULE_json_transform_op)
        self._la = 0 # Token type
        try:
            self.state = 18179
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2531,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 18092
                self.match(PlSqlParser.REMOVE)
                self.state = 18093
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18099
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==484 or _la==651 or _la==1193:
                    self.state = 18095
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==484 or _la==651:
                        self.state = 18094
                        _la = self._input.LA(1)
                        if not(_la==484 or _la==651):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18097
                    self.match(PlSqlParser.ON)
                    self.state = 18098
                    self.match(PlSqlParser.MISSING)


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 18101
                self.match(PlSqlParser.INSERT)
                self.state = 18102
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18103
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 18104
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18108
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2516,self._ctx)
                if la_ == 1:
                    self.state = 18105
                    _la = self._input.LA(1)
                    if not(_la==484 or _la==651 or _la==1484):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 18106
                    self.match(PlSqlParser.ON)
                    self.state = 18107
                    self.match(PlSqlParser.EXISTING)


                self.state = 18115
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==484 or _la==651 or _la==1162 or _la==1193 or _la==1480:
                    self.state = 18111
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==484 or _la==651 or _la==1162 or _la==1480:
                        self.state = 18110
                        _la = self._input.LA(1)
                        if not(_la==484 or _la==651 or _la==1162 or _la==1480):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18113
                    self.match(PlSqlParser.ON)
                    self.state = 18114
                    self.match(PlSqlParser.NULL_)


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 18117
                self.match(PlSqlParser.REPLACE)
                self.state = 18118
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18119
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 18120
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18124
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2519,self._ctx)
                if la_ == 1:
                    self.state = 18121
                    _la = self._input.LA(1)
                    if not(_la==305 or _la==484 or _la==651):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 18122
                    self.match(PlSqlParser.ON)
                    self.state = 18123
                    self.match(PlSqlParser.MISSING)


                self.state = 18131
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==484 or _la==651 or _la==1162 or _la==1193:
                    self.state = 18127
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==484 or _la==651 or _la==1162:
                        self.state = 18126
                        _la = self._input.LA(1)
                        if not(_la==484 or _la==651 or _la==1162):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18129
                    self.match(PlSqlParser.ON)
                    self.state = 18130
                    self.match(PlSqlParser.NULL_)


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 18133
                self.expression()
                self.state = 18136
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==581:
                    self.state = 18134
                    self.match(PlSqlParser.FORMAT)
                    self.state = 18135
                    self.match(PlSqlParser.JSON)


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 18138
                self.match(PlSqlParser.APPEND)
                self.state = 18139
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18140
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 18141
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18145
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2523,self._ctx)
                if la_ == 1:
                    self.state = 18142
                    _la = self._input.LA(1)
                    if not(_la==305 or _la==484 or _la==651):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 18143
                    self.match(PlSqlParser.ON)
                    self.state = 18144
                    self.match(PlSqlParser.MISSING)


                self.state = 18152
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==484 or _la==651 or _la==1162 or _la==1193:
                    self.state = 18148
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==484 or _la==651 or _la==1162:
                        self.state = 18147
                        _la = self._input.LA(1)
                        if not(_la==484 or _la==651 or _la==1162):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18150
                    self.match(PlSqlParser.ON)
                    self.state = 18151
                    self.match(PlSqlParser.NULL_)


                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 18154
                self.match(PlSqlParser.SET)
                self.state = 18155
                self.match(PlSqlParser.CHAR_STRING)
                self.state = 18156
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 18157
                self.expression()
                self.state = 18160
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==581:
                    self.state = 18158
                    self.match(PlSqlParser.FORMAT)
                    self.state = 18159
                    self.match(PlSqlParser.JSON)


                self.state = 18165
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2527,self._ctx)
                if la_ == 1:
                    self.state = 18162
                    _la = self._input.LA(1)
                    if not(_la==484 or _la==651 or _la==1484):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 18163
                    self.match(PlSqlParser.ON)
                    self.state = 18164
                    self.match(PlSqlParser.EXISTING)


                self.state = 18170
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2528,self._ctx)
                if la_ == 1:
                    self.state = 18167
                    _la = self._input.LA(1)
                    if not(_la==305 or _la==484 or _la==651):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 18168
                    self.match(PlSqlParser.ON)
                    self.state = 18169
                    self.match(PlSqlParser.MISSING)


                self.state = 18177
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==484 or _la==651 or _la==1162 or _la==1193:
                    self.state = 18173
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==484 or _la==651 or _la==1162:
                        self.state = 18172
                        _la = self._input.LA(1)
                        if not(_la==484 or _la==651 or _la==1162):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18175
                    self.match(PlSqlParser.ON)
                    self.state = 18176
                    self.match(PlSqlParser.NULL_)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_column_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def json_column_definition(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Json_column_definitionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Json_column_definitionContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_column_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_column_clause" ):
                listener.enterJson_column_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_column_clause" ):
                listener.exitJson_column_clause(self)




    def json_column_clause(self):

        localctx = PlSqlParser.Json_column_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2130, self.RULE_json_column_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18181
            self.match(PlSqlParser.COLUMNS)
            self.state = 18182
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 18183
            self.json_column_definition()
            self.state = 18188
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 18184
                self.match(PlSqlParser.COMMA)
                self.state = 18185
                self.json_column_definition()
                self.state = 18190
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 18191
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_column_definitionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def json_value_return_type(self):
            return self.getTypedRuleContext(PlSqlParser.Json_value_return_typeContext,0)


        def PATH(self):
            return self.getToken(PlSqlParser.PATH, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def json_query_on_error_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_on_error_clauseContext,0)


        def json_query_on_empty_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_on_empty_clauseContext,0)


        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def json_query_return_type(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_return_typeContext,0)


        def json_query_wrapper_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_wrapper_clauseContext,0)


        def NESTED(self):
            return self.getToken(PlSqlParser.NESTED, 0)

        def json_column_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Json_column_clauseContext,0)


        def LEFT_BRACKET(self):
            return self.getToken(PlSqlParser.LEFT_BRACKET, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def RIGHT_BRACKET(self):
            return self.getToken(PlSqlParser.RIGHT_BRACKET, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def ORDINALITY(self):
            return self.getToken(PlSqlParser.ORDINALITY, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_column_definition

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_column_definition" ):
                listener.enterJson_column_definition(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_column_definition" ):
                listener.exitJson_column_definition(self)




    def json_column_definition(self):

        localctx = PlSqlParser.Json_column_definitionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2132, self.RULE_json_column_definition)
        self._la = 0 # Token type
        try:
            self.state = 18246
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2544,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 18193
                self.expression()
                self.state = 18195
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2533,self._ctx)
                if la_ == 1:
                    self.state = 18194
                    self.json_value_return_type()


                self.state = 18207
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [508, 1290]:
                    self.state = 18198
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==508:
                        self.state = 18197
                        self.match(PlSqlParser.EXISTS)


                    self.state = 18200
                    self.match(PlSqlParser.PATH)
                    self.state = 18201
                    self.match(PlSqlParser.CHAR_STRING)
                    pass
                elif token in [2069]:
                    self.state = 18202
                    self.match(PlSqlParser.TRUNCATE)
                    self.state = 18205
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1290:
                        self.state = 18203
                        self.match(PlSqlParser.PATH)
                        self.state = 18204
                        self.match(PlSqlParser.CHAR_STRING)


                    pass
                elif token in [465, 484, 1162, 1193, 2348, 2353]:
                    pass
                else:
                    pass
                self.state = 18210
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2537,self._ctx)
                if la_ == 1:
                    self.state = 18209
                    self.json_query_on_error_clause()


                self.state = 18213
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==465 or _la==484 or _la==1162 or _la==1193:
                    self.state = 18212
                    self.json_query_on_empty_clause()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 18215
                self.expression()
                self.state = 18217
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==136 or _la==205 or _la==2166:
                    self.state = 18216
                    self.json_query_return_type()


                self.state = 18220
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2069:
                    self.state = 18219
                    self.match(PlSqlParser.TRUNCATE)


                self.state = 18222
                self.match(PlSqlParser.FORMAT)
                self.state = 18223
                self.match(PlSqlParser.JSON)
                self.state = 18225
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2210 or _la==2212:
                    self.state = 18224
                    self.json_query_wrapper_clause()


                self.state = 18227
                self.match(PlSqlParser.PATH)
                self.state = 18228
                self.match(PlSqlParser.CHAR_STRING)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 18230
                self.match(PlSqlParser.NESTED)
                self.state = 18232
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2542,self._ctx)
                if la_ == 1:
                    self.state = 18231
                    self.match(PlSqlParser.PATH)


                self.state = 18234
                self.expression()
                self.state = 18238
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2370:
                    self.state = 18235
                    self.match(PlSqlParser.LEFT_BRACKET)
                    self.state = 18236
                    self.match(PlSqlParser.ASTERISK)
                    self.state = 18237
                    self.match(PlSqlParser.RIGHT_BRACKET)


                self.state = 18240
                self.json_column_clause()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 18242
                self.expression()
                self.state = 18243
                self.match(PlSqlParser.FOR)
                self.state = 18244
                self.match(PlSqlParser.ORDINALITY)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_query_returning_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def json_query_return_type(self):
            return self.getTypedRuleContext(PlSqlParser.Json_query_return_typeContext,0)


        def PRETTY(self):
            return self.getToken(PlSqlParser.PRETTY, 0)

        def ASCII(self):
            return self.getToken(PlSqlParser.ASCII, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_query_returning_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_query_returning_clause" ):
                listener.enterJson_query_returning_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_query_returning_clause" ):
                listener.exitJson_query_returning_clause(self)




    def json_query_returning_clause(self):

        localctx = PlSqlParser.Json_query_returning_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2134, self.RULE_json_query_returning_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18250
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1507:
                self.state = 18248
                self.match(PlSqlParser.RETURNING)
                self.state = 18249
                self.json_query_return_type()


            self.state = 18253
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1373:
                self.state = 18252
                self.match(PlSqlParser.PRETTY)


            self.state = 18256
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==69:
                self.state = 18255
                self.match(PlSqlParser.ASCII)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_query_return_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VARCHAR2(self):
            return self.getToken(PlSqlParser.VARCHAR2, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def BYTE(self):
            return self.getToken(PlSqlParser.BYTE, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def BLOB(self):
            return self.getToken(PlSqlParser.BLOB, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_query_return_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_query_return_type" ):
                listener.enterJson_query_return_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_query_return_type" ):
                listener.exitJson_query_return_type(self)




    def json_query_return_type(self):

        localctx = PlSqlParser.Json_query_return_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2136, self.RULE_json_query_return_type)
        self._la = 0 # Token type
        try:
            self.state = 18269
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2166]:
                self.enterOuterAlt(localctx, 1)
                self.state = 18258
                self.match(PlSqlParser.VARCHAR2)
                self.state = 18265
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 18259
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 18260
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    self.state = 18262
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==157 or _la==186:
                        self.state = 18261
                        _la = self._input.LA(1)
                        if not(_la==157 or _la==186):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18264
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            elif token in [205]:
                self.enterOuterAlt(localctx, 2)
                self.state = 18267
                self.match(PlSqlParser.CLOB)
                pass
            elif token in [136]:
                self.enterOuterAlt(localctx, 3)
                self.state = 18268
                self.match(PlSqlParser.BLOB)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_query_wrapper_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def WRAPPER(self):
            return self.getToken(PlSqlParser.WRAPPER, 0)

        def ARRAY(self):
            return self.getToken(PlSqlParser.ARRAY, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def UNCONDITIONAL(self):
            return self.getToken(PlSqlParser.UNCONDITIONAL, 0)

        def CONDITIONAL(self):
            return self.getToken(PlSqlParser.CONDITIONAL, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_query_wrapper_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_query_wrapper_clause" ):
                listener.enterJson_query_wrapper_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_query_wrapper_clause" ):
                listener.exitJson_query_wrapper_clause(self)




    def json_query_wrapper_clause(self):

        localctx = PlSqlParser.Json_query_wrapper_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2138, self.RULE_json_query_wrapper_clause)
        self._la = 0 # Token type
        try:
            self.state = 18284
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2210]:
                self.enterOuterAlt(localctx, 1)
                self.state = 18271
                self.match(PlSqlParser.WITHOUT)
                self.state = 18273
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==66:
                    self.state = 18272
                    self.match(PlSqlParser.ARRAY)


                self.state = 18275
                self.match(PlSqlParser.WRAPPER)
                pass
            elif token in [2212]:
                self.enterOuterAlt(localctx, 2)
                self.state = 18276
                self.match(PlSqlParser.WITH)
                self.state = 18278
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==250 or _la==2085:
                    self.state = 18277
                    _la = self._input.LA(1)
                    if not(_la==250 or _la==2085):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18281
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==66:
                    self.state = 18280
                    self.match(PlSqlParser.ARRAY)


                self.state = 18283
                self.match(PlSqlParser.WRAPPER)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_query_on_error_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def ERROR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ERROR)
            else:
                return self.getToken(PlSqlParser.ERROR, i)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def EMPTY_(self):
            return self.getToken(PlSqlParser.EMPTY_, 0)

        def ARRAY(self):
            return self.getToken(PlSqlParser.ARRAY, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_query_on_error_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_query_on_error_clause" ):
                listener.enterJson_query_on_error_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_query_on_error_clause" ):
                listener.exitJson_query_on_error_clause(self)




    def json_query_on_error_clause(self):

        localctx = PlSqlParser.Json_query_on_error_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2140, self.RULE_json_query_on_error_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18293
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2555,self._ctx)
            if la_ == 1:
                self.state = 18286
                self.match(PlSqlParser.ERROR)

            elif la_ == 2:
                self.state = 18287
                self.match(PlSqlParser.NULL_)

            elif la_ == 3:
                self.state = 18288
                self.match(PlSqlParser.EMPTY_)

            elif la_ == 4:
                self.state = 18289
                self.match(PlSqlParser.EMPTY_)
                self.state = 18290
                self.match(PlSqlParser.ARRAY)

            elif la_ == 5:
                self.state = 18291
                self.match(PlSqlParser.EMPTY_)
                self.state = 18292
                self.match(PlSqlParser.OBJECT)


            self.state = 18295
            self.match(PlSqlParser.ON)
            self.state = 18296
            self.match(PlSqlParser.ERROR)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_query_on_empty_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def EMPTY_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.EMPTY_)
            else:
                return self.getToken(PlSqlParser.EMPTY_, i)

        def ERROR(self):
            return self.getToken(PlSqlParser.ERROR, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def ARRAY(self):
            return self.getToken(PlSqlParser.ARRAY, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_query_on_empty_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_query_on_empty_clause" ):
                listener.enterJson_query_on_empty_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_query_on_empty_clause" ):
                listener.exitJson_query_on_empty_clause(self)




    def json_query_on_empty_clause(self):

        localctx = PlSqlParser.Json_query_on_empty_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2142, self.RULE_json_query_on_empty_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18305
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2556,self._ctx)
            if la_ == 1:
                self.state = 18298
                self.match(PlSqlParser.ERROR)

            elif la_ == 2:
                self.state = 18299
                self.match(PlSqlParser.NULL_)

            elif la_ == 3:
                self.state = 18300
                self.match(PlSqlParser.EMPTY_)

            elif la_ == 4:
                self.state = 18301
                self.match(PlSqlParser.EMPTY_)
                self.state = 18302
                self.match(PlSqlParser.ARRAY)

            elif la_ == 5:
                self.state = 18303
                self.match(PlSqlParser.EMPTY_)
                self.state = 18304
                self.match(PlSqlParser.OBJECT)


            self.state = 18307
            self.match(PlSqlParser.ON)
            self.state = 18308
            self.match(PlSqlParser.EMPTY_)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_value_return_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def json_value_return_type(self):
            return self.getTypedRuleContext(PlSqlParser.Json_value_return_typeContext,0)


        def ASCII(self):
            return self.getToken(PlSqlParser.ASCII, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_value_return_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_value_return_clause" ):
                listener.enterJson_value_return_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_value_return_clause" ):
                listener.exitJson_value_return_clause(self)




    def json_value_return_clause(self):

        localctx = PlSqlParser.Json_value_return_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2144, self.RULE_json_value_return_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18310
            self.match(PlSqlParser.RETURNING)
            self.state = 18312
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2557,self._ctx)
            if la_ == 1:
                self.state = 18311
                self.json_value_return_type()


            self.state = 18315
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==69:
                self.state = 18314
                self.match(PlSqlParser.ASCII)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_value_return_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VARCHAR2(self):
            return self.getToken(PlSqlParser.VARCHAR2, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def BYTE(self):
            return self.getToken(PlSqlParser.BYTE, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def DATE(self):
            return self.getToken(PlSqlParser.DATE, 0)

        def NUMBER(self):
            return self.getToken(PlSqlParser.NUMBER, 0)

        def INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.INTEGER)
            else:
                return self.getToken(PlSqlParser.INTEGER, i)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def TIMEZONE(self):
            return self.getToken(PlSqlParser.TIMEZONE, 0)

        def SDO_GEOMETRY(self):
            return self.getToken(PlSqlParser.SDO_GEOMETRY, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CASESENSITIVE(self):
            return self.getToken(PlSqlParser.CASESENSITIVE, 0)

        def MAPPING(self):
            return self.getToken(PlSqlParser.MAPPING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_value_return_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_value_return_type" ):
                listener.enterJson_value_return_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_value_return_type" ):
                listener.exitJson_value_return_type(self)




    def json_value_return_type(self):

        localctx = PlSqlParser.Json_value_return_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2146, self.RULE_json_value_return_type)
        self._la = 0 # Token type
        try:
            self.state = 18353
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2566,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 18317
                self.match(PlSqlParser.VARCHAR2)
                self.state = 18324
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 18318
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 18319
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    self.state = 18321
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==157 or _la==186:
                        self.state = 18320
                        _la = self._input.LA(1)
                        if not(_la==157 or _la==186):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18323
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 18327
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2561,self._ctx)
                if la_ == 1:
                    self.state = 18326
                    self.match(PlSqlParser.TRUNCATE)


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 18329
                self.match(PlSqlParser.CLOB)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 18330
                self.match(PlSqlParser.DATE)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 18331
                self.match(PlSqlParser.NUMBER)
                self.state = 18339
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 18332
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 18333
                    self.match(PlSqlParser.INTEGER)
                    self.state = 18336
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 18334
                        self.match(PlSqlParser.COMMA)
                        self.state = 18335
                        self.match(PlSqlParser.INTEGER)


                    self.state = 18338
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 18341
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 18344
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2212:
                    self.state = 18342
                    self.match(PlSqlParser.WITH)
                    self.state = 18343
                    self.match(PlSqlParser.TIMEZONE)


                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 18346
                self.match(PlSqlParser.SDO_GEOMETRY)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 18347
                self.expression()
                self.state = 18351
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 18348
                    self.match(PlSqlParser.USING)
                    self.state = 18349
                    self.match(PlSqlParser.CASESENSITIVE)
                    self.state = 18350
                    self.match(PlSqlParser.MAPPING)


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Json_value_on_mismatch_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def MISMATCH(self):
            return self.getToken(PlSqlParser.MISMATCH, 0)

        def IGNORE(self):
            return self.getToken(PlSqlParser.IGNORE, 0)

        def ERROR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.ERROR)
            else:
                return self.getToken(PlSqlParser.ERROR, i)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def MISSING(self):
            return self.getToken(PlSqlParser.MISSING, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def EXTRA(self):
            return self.getToken(PlSqlParser.EXTRA, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_json_value_on_mismatch_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterJson_value_on_mismatch_clause" ):
                listener.enterJson_value_on_mismatch_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitJson_value_on_mismatch_clause" ):
                listener.exitJson_value_on_mismatch_clause(self)




    def json_value_on_mismatch_clause(self):

        localctx = PlSqlParser.Json_value_on_mismatch_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2148, self.RULE_json_value_on_mismatch_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18355
            _la = self._input.LA(1)
            if not(_la==484 or _la==651 or _la==1162):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 18356
            self.match(PlSqlParser.ON)
            self.state = 18357
            self.match(PlSqlParser.MISMATCH)
            self.state = 18366
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2347]:
                self.state = 18358
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18359
                self.match(PlSqlParser.MISSING)
                self.state = 18360
                self.match(PlSqlParser.DATA)
                pass
            elif token in [528]:
                self.state = 18361
                self.match(PlSqlParser.EXTRA)
                self.state = 18362
                self.match(PlSqlParser.DATA)
                pass
            elif token in [2076]:
                self.state = 18363
                self.match(PlSqlParser.TYPE)
                self.state = 18364
                self.match(PlSqlParser.ERROR)
                self.state = 18365
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2348]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class LiteralContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def string_function(self):
            return self.getTypedRuleContext(PlSqlParser.String_functionContext,0)


        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def MAXVALUE(self):
            return self.getToken(PlSqlParser.MAXVALUE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_literal

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLiteral" ):
                listener.enterLiteral(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLiteral" ):
                listener.exitLiteral(self)




    def literal(self):

        localctx = PlSqlParser.LiteralContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2150, self.RULE_literal)
        try:
            self.state = 18372
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2343]:
                self.enterOuterAlt(localctx, 1)
                self.state = 18368
                self.match(PlSqlParser.CHAR_STRING)
                pass
            elif token in [194, 2301, 2311, 2316, 2317, 2318, 2325]:
                self.enterOuterAlt(localctx, 2)
                self.state = 18369
                self.string_function()
                pass
            elif token in [2341, 2342]:
                self.enterOuterAlt(localctx, 3)
                self.state = 18370
                self.numeric()
                pass
            elif token in [878]:
                self.enterOuterAlt(localctx, 4)
                self.state = 18371
                self.match(PlSqlParser.MAXVALUE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Numeric_function_wrapperContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def numeric_function(self):
            return self.getTypedRuleContext(PlSqlParser.Numeric_functionContext,0)


        def single_column_for_loop(self):
            return self.getTypedRuleContext(PlSqlParser.Single_column_for_loopContext,0)


        def multi_column_for_loop(self):
            return self.getTypedRuleContext(PlSqlParser.Multi_column_for_loopContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_numeric_function_wrapper

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNumeric_function_wrapper" ):
                listener.enterNumeric_function_wrapper(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNumeric_function_wrapper" ):
                listener.exitNumeric_function_wrapper(self)




    def numeric_function_wrapper(self):

        localctx = PlSqlParser.Numeric_function_wrapperContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2152, self.RULE_numeric_function_wrapper)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18374
            self.numeric_function()
            self.state = 18377
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2569,self._ctx)
            if la_ == 1:
                self.state = 18375
                self.single_column_for_loop()

            elif la_ == 2:
                self.state = 18376
                self.multi_column_for_loop()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Numeric_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SUM(self):
            return self.getToken(PlSqlParser.SUM, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def DISTINCT(self):
            return self.getToken(PlSqlParser.DISTINCT, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def over_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Over_clauseContext,0)


        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def ROUND(self):
            return self.getToken(PlSqlParser.ROUND, 0)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def AVG(self):
            return self.getToken(PlSqlParser.AVG, 0)

        def MAX(self):
            return self.getToken(PlSqlParser.MAX, 0)

        def LEAST(self):
            return self.getToken(PlSqlParser.LEAST, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def GREATEST(self):
            return self.getToken(PlSqlParser.GREATEST, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_numeric_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNumeric_function" ):
                listener.enterNumeric_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNumeric_function" ):
                listener.exitNumeric_function(self)




    def numeric_function(self):

        localctx = PlSqlParser.Numeric_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2154, self.RULE_numeric_function)
        self._la = 0 # Token type
        try:
            self.state = 18437
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2319]:
                self.enterOuterAlt(localctx, 1)
                self.state = 18379
                self.match(PlSqlParser.SUM)
                self.state = 18380
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18382
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2570,self._ctx)
                if la_ == 1:
                    self.state = 18381
                    _la = self._input.LA(1)
                    if not(_la==38 or _la==417):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18384
                self.expression()
                self.state = 18385
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [298]:
                self.enterOuterAlt(localctx, 2)
                self.state = 18387
                self.match(PlSqlParser.COUNT)
                self.state = 18388
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18396
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2350]:
                    self.state = 18389
                    self.match(PlSqlParser.ASTERISK)
                    pass
                elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2348, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                    self.state = 18394
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -4398046511121) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                        self.state = 18391
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,2571,self._ctx)
                        if la_ == 1:
                            self.state = 18390
                            _la = self._input.LA(1)
                            if not(_la==38 or _la==417 or _la==2091):
                                self._errHandler.recoverInline(self)
                            else:
                                self._errHandler.reportMatch(self)
                                self.consume()


                        self.state = 18393
                        self.concatenation(0)


                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 18398
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18400
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2574,self._ctx)
                if la_ == 1:
                    self.state = 18399
                    self.over_clause()


                pass
            elif token in [2314]:
                self.enterOuterAlt(localctx, 3)
                self.state = 18402
                self.match(PlSqlParser.ROUND)
                self.state = 18403
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18404
                self.expression()
                self.state = 18407
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18405
                    self.match(PlSqlParser.COMMA)
                    self.state = 18406
                    self.match(PlSqlParser.UNSIGNED_INTEGER)


                self.state = 18409
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2298]:
                self.enterOuterAlt(localctx, 4)
                self.state = 18411
                self.match(PlSqlParser.AVG)
                self.state = 18412
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18414
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2576,self._ctx)
                if la_ == 1:
                    self.state = 18413
                    _la = self._input.LA(1)
                    if not(_la==38 or _la==417):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18416
                self.expression()
                self.state = 18417
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2306]:
                self.enterOuterAlt(localctx, 5)
                self.state = 18419
                self.match(PlSqlParser.MAX)
                self.state = 18420
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18422
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2577,self._ctx)
                if la_ == 1:
                    self.state = 18421
                    _la = self._input.LA(1)
                    if not(_la==38 or _la==417):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18424
                self.expression()
                self.state = 18425
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2323]:
                self.enterOuterAlt(localctx, 6)
                self.state = 18427
                self.match(PlSqlParser.LEAST)
                self.state = 18428
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18429
                self.expressions()
                self.state = 18430
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [2324]:
                self.enterOuterAlt(localctx, 7)
                self.state = 18432
                self.match(PlSqlParser.GREATEST)
                self.state = 18433
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18434
                self.expressions()
                self.state = 18435
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Listagg_overflow_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def ERROR(self):
            return self.getToken(PlSqlParser.ERROR, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_listagg_overflow_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterListagg_overflow_clause" ):
                listener.enterListagg_overflow_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitListagg_overflow_clause" ):
                listener.exitListagg_overflow_clause(self)




    def listagg_overflow_clause(self):

        localctx = PlSqlParser.Listagg_overflow_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2156, self.RULE_listagg_overflow_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18439
            self.match(PlSqlParser.ON)
            self.state = 18440
            self.match(PlSqlParser.OVERFLOW)
            self.state = 18441
            _la = self._input.LA(1)
            if not(_la==484 or _la==2069):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 18443
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2343:
                self.state = 18442
                self.match(PlSqlParser.CHAR_STRING)


            self.state = 18447
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2210 or _la==2212:
                self.state = 18445
                _la = self._input.LA(1)
                if not(_la==2210 or _la==2212):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18446
                self.match(PlSqlParser.COUNT)


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Other_functionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def over_clause_keyword(self):
            return self.getTypedRuleContext(PlSqlParser.Over_clause_keywordContext,0)


        def function_argument_analytic(self):
            return self.getTypedRuleContext(PlSqlParser.Function_argument_analyticContext,0)


        def over_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Over_clauseContext,0)


        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def function_argument_modeling(self):
            return self.getTypedRuleContext(PlSqlParser.Function_argument_modelingContext,0)


        def using_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Using_clauseContext,0)


        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def DISTINCT(self):
            return self.getToken(PlSqlParser.DISTINCT, 0)

        def UNIQUE(self):
            return self.getToken(PlSqlParser.UNIQUE, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def CAST(self):
            return self.getToken(PlSqlParser.CAST, 0)

        def XMLCAST(self):
            return self.getToken(PlSqlParser.XMLCAST, 0)

        def MULTISET(self):
            return self.getToken(PlSqlParser.MULTISET, 0)

        def subquery(self):
            return self.getTypedRuleContext(PlSqlParser.SubqueryContext,0)


        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def CONVERSION(self):
            return self.getToken(PlSqlParser.CONVERSION, 0)

        def ERROR(self):
            return self.getToken(PlSqlParser.ERROR, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def quoted_string(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quoted_stringContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,i)


        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def table_element(self):
            return self.getTypedRuleContext(PlSqlParser.Table_elementContext,0)


        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def COLLECT(self):
            return self.getToken(PlSqlParser.COLLECT, 0)

        def collect_order_by_part(self):
            return self.getTypedRuleContext(PlSqlParser.Collect_order_by_partContext,0)


        def within_or_over_clause_keyword(self):
            return self.getTypedRuleContext(PlSqlParser.Within_or_over_clause_keywordContext,0)


        def function_argument(self):
            return self.getTypedRuleContext(PlSqlParser.Function_argumentContext,0)


        def within_or_over_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Within_or_over_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Within_or_over_partContext,i)


        def LISTAGG(self):
            return self.getToken(PlSqlParser.LISTAGG, 0)

        def argument(self):
            return self.getTypedRuleContext(PlSqlParser.ArgumentContext,0)


        def string_delimiter(self):
            return self.getTypedRuleContext(PlSqlParser.String_delimiterContext,0)


        def listagg_overflow_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Listagg_overflow_clauseContext,0)


        def WITHIN(self):
            return self.getToken(PlSqlParser.WITHIN, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def cursor_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_nameContext,0)


        def PERCENT_ISOPEN(self):
            return self.getToken(PlSqlParser.PERCENT_ISOPEN, 0)

        def PERCENT_FOUND(self):
            return self.getToken(PlSqlParser.PERCENT_FOUND, 0)

        def PERCENT_NOTFOUND(self):
            return self.getToken(PlSqlParser.PERCENT_NOTFOUND, 0)

        def PERCENT_ROWCOUNT(self):
            return self.getToken(PlSqlParser.PERCENT_ROWCOUNT, 0)

        def DECOMPOSE(self):
            return self.getToken(PlSqlParser.DECOMPOSE, 0)

        def CANONICAL(self):
            return self.getToken(PlSqlParser.CANONICAL, 0)

        def COMPATIBILITY(self):
            return self.getToken(PlSqlParser.COMPATIBILITY, 0)

        def EXTRACT(self):
            return self.getToken(PlSqlParser.EXTRACT, 0)

        def FROM(self):
            return self.getToken(PlSqlParser.FROM, 0)

        def FIRST_VALUE(self):
            return self.getToken(PlSqlParser.FIRST_VALUE, 0)

        def LAST_VALUE(self):
            return self.getToken(PlSqlParser.LAST_VALUE, 0)

        def respect_or_ignore_nulls(self):
            return self.getTypedRuleContext(PlSqlParser.Respect_or_ignore_nullsContext,0)


        def LEAD(self):
            return self.getToken(PlSqlParser.LEAD, 0)

        def LAG(self):
            return self.getToken(PlSqlParser.LAG, 0)

        def standard_prediction_function_keyword(self):
            return self.getTypedRuleContext(PlSqlParser.Standard_prediction_function_keywordContext,0)


        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def cost_matrix_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Cost_matrix_clauseContext,0)


        def TO_BINARY_DOUBLE(self):
            return self.getToken(PlSqlParser.TO_BINARY_DOUBLE, 0)

        def TO_BINARY_FLOAT(self):
            return self.getToken(PlSqlParser.TO_BINARY_FLOAT, 0)

        def TO_NUMBER(self):
            return self.getToken(PlSqlParser.TO_NUMBER, 0)

        def TO_TIMESTAMP(self):
            return self.getToken(PlSqlParser.TO_TIMESTAMP, 0)

        def TO_TIMESTAMP_TZ(self):
            return self.getToken(PlSqlParser.TO_TIMESTAMP_TZ, 0)

        def TO_DSINTERVAL(self):
            return self.getToken(PlSqlParser.TO_DSINTERVAL, 0)

        def TO_YMINTERVAL(self):
            return self.getToken(PlSqlParser.TO_YMINTERVAL, 0)

        def TRANSLATE(self):
            return self.getToken(PlSqlParser.TRANSLATE, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def CHAR_CS(self):
            return self.getToken(PlSqlParser.CHAR_CS, 0)

        def NCHAR_CS(self):
            return self.getToken(PlSqlParser.NCHAR_CS, 0)

        def TREAT(self):
            return self.getToken(PlSqlParser.TREAT, 0)

        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def general_element_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.General_element_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.General_element_partContext,i)


        def TRIM(self):
            return self.getToken(PlSqlParser.TRIM, 0)

        def LEADING(self):
            return self.getToken(PlSqlParser.LEADING, 0)

        def TRAILING(self):
            return self.getToken(PlSqlParser.TRAILING, 0)

        def BOTH(self):
            return self.getToken(PlSqlParser.BOTH, 0)

        def VALIDATE_CONVERSION(self):
            return self.getToken(PlSqlParser.VALIDATE_CONVERSION, 0)

        def XMLAGG(self):
            return self.getToken(PlSqlParser.XMLAGG, 0)

        def xml_multiuse_expression_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Xml_multiuse_expression_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Xml_multiuse_expression_elementContext,i)


        def XMLCOLATTVAL(self):
            return self.getToken(PlSqlParser.XMLCOLATTVAL, 0)

        def XMLFOREST(self):
            return self.getToken(PlSqlParser.XMLFOREST, 0)

        def XMLELEMENT(self):
            return self.getToken(PlSqlParser.XMLELEMENT, 0)

        def xml_attributes_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_attributes_clauseContext,0)


        def ENTITYESCAPING(self):
            return self.getToken(PlSqlParser.ENTITYESCAPING, 0)

        def NOENTITYESCAPING(self):
            return self.getToken(PlSqlParser.NOENTITYESCAPING, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def EVALNAME(self):
            return self.getToken(PlSqlParser.EVALNAME, 0)

        def column_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,i)


        def XMLEXISTS(self):
            return self.getToken(PlSqlParser.XMLEXISTS, 0)

        def xml_passing_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_passing_clauseContext,0)


        def XMLPARSE(self):
            return self.getToken(PlSqlParser.XMLPARSE, 0)

        def DOCUMENT(self):
            return self.getToken(PlSqlParser.DOCUMENT, 0)

        def CONTENT(self):
            return self.getToken(PlSqlParser.CONTENT, 0)

        def WELLFORMED(self):
            return self.getToken(PlSqlParser.WELLFORMED, 0)

        def XMLPI(self):
            return self.getToken(PlSqlParser.XMLPI, 0)

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def XMLQUERY(self):
            return self.getToken(PlSqlParser.XMLQUERY, 0)

        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def EMPTY_(self):
            return self.getToken(PlSqlParser.EMPTY_, 0)

        def XMLROOT(self):
            return self.getToken(PlSqlParser.XMLROOT, 0)

        def xmlroot_param_version_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlroot_param_version_partContext,0)


        def xmlroot_param_standalone_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlroot_param_standalone_partContext,0)


        def XMLSERIALIZE(self):
            return self.getToken(PlSqlParser.XMLSERIALIZE, 0)

        def xmlserialize_param_enconding_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlserialize_param_enconding_partContext,0)


        def xmlserialize_param_version_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlserialize_param_version_partContext,0)


        def xmlserialize_param_ident_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xmlserialize_param_ident_partContext,0)


        def DEFAULTS(self):
            return self.getToken(PlSqlParser.DEFAULTS, 0)

        def HIDE(self):
            return self.getToken(PlSqlParser.HIDE, 0)

        def SHOW(self):
            return self.getToken(PlSqlParser.SHOW, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def xmltable(self):
            return self.getTypedRuleContext(PlSqlParser.XmltableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_other_function

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOther_function" ):
                listener.enterOther_function(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOther_function" ):
                listener.exitOther_function(self)




    def other_function(self):

        localctx = PlSqlParser.Other_functionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2158, self.RULE_other_function)
        self._la = 0 # Token type
        try:
            self.state = 18870
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2646,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 18449
                self.over_clause_keyword()
                self.state = 18450
                self.function_argument_analytic()
                self.state = 18452
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2581,self._ctx)
                if la_ == 1:
                    self.state = 18451
                    self.over_clause()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 18454
                self.regular_id()
                self.state = 18455
                self.function_argument_modeling()
                self.state = 18457
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2582,self._ctx)
                if la_ == 1:
                    self.state = 18456
                    self.using_clause()


                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 18459
                self.match(PlSqlParser.COUNT)
                self.state = 18460
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18466
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2350]:
                    self.state = 18461
                    self.match(PlSqlParser.ASTERISK)
                    pass
                elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                    self.state = 18463
                    self._errHandler.sync(self)
                    la_ = self._interp.adaptivePredict(self._input,2583,self._ctx)
                    if la_ == 1:
                        self.state = 18462
                        _la = self._input.LA(1)
                        if not(_la==38 or _la==417 or _la==2091):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18465
                    self.concatenation(0)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 18468
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18470
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2585,self._ctx)
                if la_ == 1:
                    self.state = 18469
                    self.over_clause()


                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 18472
                _la = self._input.LA(1)
                if not(_la==173 or _la==2224):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18473
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18480
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2586,self._ctx)
                if la_ == 1:
                    self.state = 18474
                    self.match(PlSqlParser.MULTISET)
                    self.state = 18475
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 18476
                    self.subquery()
                    self.state = 18477
                    self.match(PlSqlParser.RIGHT_PAREN)
                    pass

                elif la_ == 2:
                    self.state = 18479
                    self.concatenation(0)
                    pass


                self.state = 18482
                self.match(PlSqlParser.AS)
                self.state = 18483
                self.type_spec()
                self.state = 18490
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 18484
                    self.match(PlSqlParser.DEFAULT)
                    self.state = 18485
                    self.concatenation(0)
                    self.state = 18486
                    self.match(PlSqlParser.ON)
                    self.state = 18487
                    self.match(PlSqlParser.CONVERSION)
                    self.state = 18488
                    self.match(PlSqlParser.ERROR)


                self.state = 18498
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18492
                    self.match(PlSqlParser.COMMA)
                    self.state = 18493
                    self.quoted_string()
                    self.state = 18496
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 18494
                        self.match(PlSqlParser.COMMA)
                        self.state = 18495
                        self.quoted_string()




                self.state = 18500
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 18502
                self.match(PlSqlParser.COALESCE)
                self.state = 18503
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18504
                self.table_element()
                self.state = 18510
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18505
                    self.match(PlSqlParser.COMMA)
                    self.state = 18508
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2341, 2342]:
                        self.state = 18506
                        self.numeric()
                        pass
                    elif token in [2336, 2343]:
                        self.state = 18507
                        self.quoted_string()
                        pass
                    else:
                        raise NoViableAltException(self)



                self.state = 18512
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 18514
                self.match(PlSqlParser.COLLECT)
                self.state = 18515
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18517
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2592,self._ctx)
                if la_ == 1:
                    self.state = 18516
                    _la = self._input.LA(1)
                    if not(_la==417 or _la==2091):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18519
                self.concatenation(0)
                self.state = 18521
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1233:
                    self.state = 18520
                    self.collect_order_by_part()


                self.state = 18523
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 18525
                self.within_or_over_clause_keyword()
                self.state = 18526
                self.function_argument()
                self.state = 18528 
                self._errHandler.sync(self)
                _alt = 1
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt == 1:
                        self.state = 18527
                        self.within_or_over_part()

                    else:
                        raise NoViableAltException(self)
                    self.state = 18530 
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2594,self._ctx)

                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 18532
                self.match(PlSqlParser.LISTAGG)
                self.state = 18533
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18535
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2595,self._ctx)
                if la_ == 1:
                    self.state = 18534
                    _la = self._input.LA(1)
                    if not(_la==38 or _la==417 or _la==2091):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18537
                self.argument()
                self.state = 18540
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18538
                    self.match(PlSqlParser.COMMA)
                    self.state = 18539
                    self.string_delimiter(0)


                self.state = 18543
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1193:
                    self.state = 18542
                    self.listagg_overflow_clause()


                self.state = 18545
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18552
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2598,self._ctx)
                if la_ == 1:
                    self.state = 18546
                    self.match(PlSqlParser.WITHIN)
                    self.state = 18547
                    self.match(PlSqlParser.GROUP)
                    self.state = 18548
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 18549
                    self.order_by_clause()
                    self.state = 18550
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 18555
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2599,self._ctx)
                if la_ == 1:
                    self.state = 18554
                    self.over_clause()


                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 18557
                self.cursor_name()
                self.state = 18558
                _la = self._input.LA(1)
                if not(((((_la - 1302)) & ~0x3f) == 0 and ((1 << (_la - 1302)) & 39) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 18560
                self.match(PlSqlParser.DECOMPOSE)
                self.state = 18561
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18562
                self.concatenation(0)
                self.state = 18564
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==167 or _la==236:
                    self.state = 18563
                    _la = self._input.LA(1)
                    if not(_la==167 or _la==236):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18566
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 18568
                self.match(PlSqlParser.EXTRACT)
                self.state = 18569
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18570
                self.regular_id()
                self.state = 18571
                self.match(PlSqlParser.FROM)
                self.state = 18572
                self.concatenation(0)
                self.state = 18573
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 18575
                _la = self._input.LA(1)
                if not(_la==562 or _la==780):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18576
                self.function_argument_analytic()
                self.state = 18578
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==651 or _la==1493:
                    self.state = 18577
                    self.respect_or_ignore_nulls()


                self.state = 18580
                self.over_clause()
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 18582
                _la = self._input.LA(1)
                if not(_la==2302 or _la==2305):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18583
                self.function_argument_analytic()
                self.state = 18585
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==651 or _la==1493:
                    self.state = 18584
                    self.respect_or_ignore_nulls()


                self.state = 18587
                self.over_clause()
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 18589
                self.standard_prediction_function_keyword()
                self.state = 18590
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18591
                self.expressions()
                self.state = 18593
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==296:
                    self.state = 18592
                    self.cost_matrix_clause()


                self.state = 18596
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 18595
                    self.using_clause()


                self.state = 18598
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 18600
                _la = self._input.LA(1)
                if not(((((_la - 2036)) & ~0x3f) == 0 and ((1 << (_la - 2036)) & 12803) != 0)):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18601
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18602
                self.concatenation(0)
                self.state = 18609
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 18603
                    self.match(PlSqlParser.DEFAULT)
                    self.state = 18604
                    self.concatenation(0)
                    self.state = 18605
                    self.match(PlSqlParser.ON)
                    self.state = 18606
                    self.match(PlSqlParser.CONVERSION)
                    self.state = 18607
                    self.match(PlSqlParser.ERROR)


                self.state = 18617
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18611
                    self.match(PlSqlParser.COMMA)
                    self.state = 18612
                    self.quoted_string()
                    self.state = 18615
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 18613
                        self.match(PlSqlParser.COMMA)
                        self.state = 18614
                        self.quoted_string()




                self.state = 18619
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 18621
                _la = self._input.LA(1)
                if not(_la==2040 or _la==2053):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18622
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18623
                self.concatenation(0)
                self.state = 18630
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 18624
                    self.match(PlSqlParser.DEFAULT)
                    self.state = 18625
                    self.concatenation(0)
                    self.state = 18626
                    self.match(PlSqlParser.ON)
                    self.state = 18627
                    self.match(PlSqlParser.CONVERSION)
                    self.state = 18628
                    self.match(PlSqlParser.ERROR)


                self.state = 18632
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 18634
                self.match(PlSqlParser.TRANSLATE)
                self.state = 18635
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18636
                self.expression()
                self.state = 18639
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2153:
                    self.state = 18637
                    self.match(PlSqlParser.USING)
                    self.state = 18638
                    _la = self._input.LA(1)
                    if not(_la==187 or _la==953):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18645
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 18641
                    self.match(PlSqlParser.COMMA)
                    self.state = 18642
                    self.expression()
                    self.state = 18647
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 18648
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 18650
                self.match(PlSqlParser.TREAT)
                self.state = 18651
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18652
                self.expression()
                self.state = 18653
                self.match(PlSqlParser.AS)
                self.state = 18655
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2611,self._ctx)
                if la_ == 1:
                    self.state = 18654
                    self.match(PlSqlParser.REF)


                self.state = 18657
                self.type_spec()
                self.state = 18658
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18663
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2612,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18659
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18660
                        self.general_element_part() 
                    self.state = 18665
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2612,self._ctx)

                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 18666
                self.match(PlSqlParser.TRIM)
                self.state = 18667
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18675
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2615,self._ctx)
                if la_ == 1:
                    self.state = 18669
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==143 or _la==790 or _la==2057:
                        self.state = 18668
                        _la = self._input.LA(1)
                        if not(_la==143 or _la==790 or _la==2057):
                            self._errHandler.recoverInline(self)
                        else:
                            self._errHandler.reportMatch(self)
                            self.consume()


                    self.state = 18672
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2336 or _la==2343:
                        self.state = 18671
                        self.quoted_string()


                    self.state = 18674
                    self.match(PlSqlParser.FROM)


                self.state = 18677
                self.concatenation(0)
                self.state = 18678
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 18680
                self.match(PlSqlParser.VALIDATE_CONVERSION)
                self.state = 18681
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18682
                self.concatenation(0)
                self.state = 18683
                self.match(PlSqlParser.AS)
                self.state = 18684
                self.type_spec()
                self.state = 18691
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18685
                    self.match(PlSqlParser.COMMA)
                    self.state = 18686
                    self.quoted_string()
                    self.state = 18689
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 18687
                        self.match(PlSqlParser.COMMA)
                        self.state = 18688
                        self.quoted_string()




                self.state = 18693
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 18695
                self.match(PlSqlParser.XMLAGG)
                self.state = 18696
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18697
                self.expression()
                self.state = 18699
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1233:
                    self.state = 18698
                    self.order_by_clause()


                self.state = 18701
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18706
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2619,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18702
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18703
                        self.general_element_part() 
                    self.state = 18708
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2619,self._ctx)

                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 18709
                _la = self._input.LA(1)
                if not(_la==2226 or _la==2234):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18710
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18711
                self.xml_multiuse_expression_element()
                self.state = 18716
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 18712
                    self.match(PlSqlParser.COMMA)
                    self.state = 18713
                    self.xml_multiuse_expression_element()
                    self.state = 18718
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 18719
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18724
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2621,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18720
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18721
                        self.general_element_part() 
                    self.state = 18726
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2621,self._ctx)

                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 18727
                self.match(PlSqlParser.XMLELEMENT)
                self.state = 18728
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18730
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2622,self._ctx)
                if la_ == 1:
                    self.state = 18729
                    _la = self._input.LA(1)
                    if not(_la==479 or _la==1037):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18733
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2623,self._ctx)
                if la_ == 1:
                    self.state = 18732
                    _la = self._input.LA(1)
                    if not(_la==492 or _la==943):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 18735
                self.expression()
                self.state = 18738
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2624,self._ctx)
                if la_ == 1:
                    self.state = 18736
                    self.match(PlSqlParser.COMMA)
                    self.state = 18737
                    self.xml_attributes_clause()


                self.state = 18747
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 18740
                    self.match(PlSqlParser.COMMA)
                    self.state = 18741
                    self.expression()
                    self.state = 18743
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                        self.state = 18742
                        self.column_alias()


                    self.state = 18749
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 18750
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18755
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2627,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18751
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18752
                        self.general_element_part() 
                    self.state = 18757
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2627,self._ctx)

                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 18758
                self.match(PlSqlParser.XMLEXISTS)
                self.state = 18759
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18760
                self.expression()
                self.state = 18762
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1279:
                    self.state = 18761
                    self.xml_passing_clause()


                self.state = 18764
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 18766
                self.match(PlSqlParser.XMLPARSE)
                self.state = 18767
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18768
                _la = self._input.LA(1)
                if not(_la==279 or _la==424):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18769
                self.concatenation(0)
                self.state = 18771
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2202:
                    self.state = 18770
                    self.match(PlSqlParser.WELLFORMED)


                self.state = 18773
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18778
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2630,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18774
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18775
                        self.general_element_part() 
                    self.state = 18780
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2630,self._ctx)

                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 18781
                self.match(PlSqlParser.XMLPI)
                self.state = 18782
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18787
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [943]:
                    self.state = 18783
                    self.match(PlSqlParser.NAME)
                    self.state = 18784
                    self.identifier()
                    pass
                elif token in [492]:
                    self.state = 18785
                    self.match(PlSqlParser.EVALNAME)
                    self.state = 18786
                    self.concatenation(0)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 18791
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18789
                    self.match(PlSqlParser.COMMA)
                    self.state = 18790
                    self.concatenation(0)


                self.state = 18793
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18798
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2633,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18794
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18795
                        self.general_element_part() 
                    self.state = 18800
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2633,self._ctx)

                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 18801
                self.match(PlSqlParser.XMLQUERY)
                self.state = 18802
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18803
                self.concatenation(0)
                self.state = 18805
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1279:
                    self.state = 18804
                    self.xml_passing_clause()


                self.state = 18807
                self.match(PlSqlParser.RETURNING)
                self.state = 18808
                self.match(PlSqlParser.CONTENT)
                self.state = 18812
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1162:
                    self.state = 18809
                    self.match(PlSqlParser.NULL_)
                    self.state = 18810
                    self.match(PlSqlParser.ON)
                    self.state = 18811
                    self.match(PlSqlParser.EMPTY_)


                self.state = 18814
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18819
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2636,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18815
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18816
                        self.general_element_part() 
                    self.state = 18821
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2636,self._ctx)

                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 18822
                self.match(PlSqlParser.XMLROOT)
                self.state = 18823
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18824
                self.concatenation(0)
                self.state = 18827
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2637,self._ctx)
                if la_ == 1:
                    self.state = 18825
                    self.match(PlSqlParser.COMMA)
                    self.state = 18826
                    self.xmlroot_param_version_part()


                self.state = 18831
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 18829
                    self.match(PlSqlParser.COMMA)
                    self.state = 18830
                    self.xmlroot_param_standalone_part()


                self.state = 18833
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18838
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2639,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18834
                        self.match(PlSqlParser.PERIOD)
                        self.state = 18835
                        self.general_element_part() 
                    self.state = 18840
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2639,self._ctx)

                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 18841
                self.match(PlSqlParser.XMLSERIALIZE)
                self.state = 18842
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18843
                _la = self._input.LA(1)
                if not(_la==279 or _la==424):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 18844
                self.concatenation(0)
                self.state = 18847
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 18845
                    self.match(PlSqlParser.AS)
                    self.state = 18846
                    self.type_spec()


                self.state = 18850
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==470:
                    self.state = 18849
                    self.xmlserialize_param_enconding_part()


                self.state = 18853
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2189:
                    self.state = 18852
                    self.xmlserialize_param_version_part()


                self.state = 18856
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==667 or _la==1074:
                    self.state = 18855
                    self.xmlserialize_param_ident_part()


                self.state = 18860
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==629 or _la==1601:
                    self.state = 18858
                    _la = self._input.LA(1)
                    if not(_la==629 or _la==1601):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()
                    self.state = 18859
                    self.match(PlSqlParser.DEFAULTS)


                self.state = 18862
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18865
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2645,self._ctx)
                if la_ == 1:
                    self.state = 18863
                    self.match(PlSqlParser.PERIOD)
                    self.state = 18864
                    self.general_element_part()


                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 18867
                self.match(PlSqlParser.TIME)
                self.state = 18868
                self.match(PlSqlParser.CHAR_STRING)
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 18869
                self.xmltable()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Over_clause_keywordContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AVG(self):
            return self.getToken(PlSqlParser.AVG, 0)

        def CORR(self):
            return self.getToken(PlSqlParser.CORR, 0)

        def LAG_DIFF(self):
            return self.getToken(PlSqlParser.LAG_DIFF, 0)

        def LAG_DIFF_PERCENT(self):
            return self.getToken(PlSqlParser.LAG_DIFF_PERCENT, 0)

        def MAX(self):
            return self.getToken(PlSqlParser.MAX, 0)

        def MEDIAN(self):
            return self.getToken(PlSqlParser.MEDIAN, 0)

        def MIN(self):
            return self.getToken(PlSqlParser.MIN, 0)

        def NTH_VALUE(self):
            return self.getToken(PlSqlParser.NTH_VALUE, 0)

        def NTILE(self):
            return self.getToken(PlSqlParser.NTILE, 0)

        def RATIO_TO_REPORT(self):
            return self.getToken(PlSqlParser.RATIO_TO_REPORT, 0)

        def ROW_NUMBER(self):
            return self.getToken(PlSqlParser.ROW_NUMBER, 0)

        def SUM(self):
            return self.getToken(PlSqlParser.SUM, 0)

        def VARIANCE(self):
            return self.getToken(PlSqlParser.VARIANCE, 0)

        def REGR_(self):
            return self.getToken(PlSqlParser.REGR_, 0)

        def STDDEV(self):
            return self.getToken(PlSqlParser.STDDEV, 0)

        def VAR_(self):
            return self.getToken(PlSqlParser.VAR_, 0)

        def VAR_POP(self):
            return self.getToken(PlSqlParser.VAR_POP, 0)

        def COVAR_(self):
            return self.getToken(PlSqlParser.COVAR_, 0)

        def WM_CONCAT(self):
            return self.getToken(PlSqlParser.WM_CONCAT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_over_clause_keyword

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOver_clause_keyword" ):
                listener.enterOver_clause_keyword(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOver_clause_keyword" ):
                listener.exitOver_clause_keyword(self)




    def over_clause_keyword(self):

        localctx = PlSqlParser.Over_clause_keywordContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2160, self.RULE_over_clause_keyword)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18872
            _la = self._input.LA(1)
            if not(_la==1160 or _la==2169 or ((((_la - 2298)) & ~0x3f) == 0 and ((1 << (_la - 2298)) & 137470597991) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Within_or_over_clause_keywordContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CUME_DIST(self):
            return self.getToken(PlSqlParser.CUME_DIST, 0)

        def DENSE_RANK(self):
            return self.getToken(PlSqlParser.DENSE_RANK, 0)

        def PERCENT_RANK(self):
            return self.getToken(PlSqlParser.PERCENT_RANK, 0)

        def PERCENTILE_CONT(self):
            return self.getToken(PlSqlParser.PERCENTILE_CONT, 0)

        def PERCENTILE_DISC(self):
            return self.getToken(PlSqlParser.PERCENTILE_DISC, 0)

        def RANK(self):
            return self.getToken(PlSqlParser.RANK, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_within_or_over_clause_keyword

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWithin_or_over_clause_keyword" ):
                listener.enterWithin_or_over_clause_keyword(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWithin_or_over_clause_keyword" ):
                listener.exitWithin_or_over_clause_keyword(self)




    def within_or_over_clause_keyword(self):

        localctx = PlSqlParser.Within_or_over_clause_keywordContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2162, self.RULE_within_or_over_clause_keyword)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18874
            _la = self._input.LA(1)
            if not(((((_la - 2291)) & ~0x3f) == 0 and ((1 << (_la - 2291)) & 123) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Standard_prediction_function_keywordContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PREDICTION(self):
            return self.getToken(PlSqlParser.PREDICTION, 0)

        def PREDICTION_BOUNDS(self):
            return self.getToken(PlSqlParser.PREDICTION_BOUNDS, 0)

        def PREDICTION_COST(self):
            return self.getToken(PlSqlParser.PREDICTION_COST, 0)

        def PREDICTION_DETAILS(self):
            return self.getToken(PlSqlParser.PREDICTION_DETAILS, 0)

        def PREDICTION_PROBABILITY(self):
            return self.getToken(PlSqlParser.PREDICTION_PROBABILITY, 0)

        def PREDICTION_SET(self):
            return self.getToken(PlSqlParser.PREDICTION_SET, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_standard_prediction_function_keyword

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStandard_prediction_function_keyword" ):
                listener.enterStandard_prediction_function_keyword(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStandard_prediction_function_keyword" ):
                listener.exitStandard_prediction_function_keyword(self)




    def standard_prediction_function_keyword(self):

        localctx = PlSqlParser.Standard_prediction_function_keywordContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2164, self.RULE_standard_prediction_function_keyword)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18876
            _la = self._input.LA(1)
            if not(((((_la - 2265)) & ~0x3f) == 0 and ((1 << (_la - 2265)) & 63) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Over_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.th = None # Id_expressionContext

        def OVER(self):
            return self.getToken(PlSqlParser.OVER, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def OFFSET(self):
            return self.getToken(PlSqlParser.OFFSET, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def query_partition_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Query_partition_clauseContext,0)


        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def ACROSS(self):
            return self.getToken(PlSqlParser.ACROSS, 0)

        def ANCESTOR(self):
            return self.getToken(PlSqlParser.ANCESTOR, 0)

        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def LEVEL(self):
            return self.getToken(PlSqlParser.LEVEL, 0)

        def windowing_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Windowing_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_over_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOver_clause" ):
                listener.enterOver_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOver_clause" ):
                listener.exitOver_clause(self)




    def over_clause(self):

        localctx = PlSqlParser.Over_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2166, self.RULE_over_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18878
            self.match(PlSqlParser.OVER)
            self.state = 18879
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 18900
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1233, 1275, 2348]:
                self.state = 18881
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1275:
                    self.state = 18880
                    self.query_partition_clause()


                self.state = 18887
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1233:
                    self.state = 18883
                    self.order_by_clause()
                    self.state = 18885
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==1420 or _la==1529:
                        self.state = 18884
                        self.windowing_clause()




                pass
            elif token in [633]:
                self.state = 18889
                self.match(PlSqlParser.HIERARCHY)
                self.state = 18890
                localctx.th = self.id_expression()
                self.state = 18891
                self.match(PlSqlParser.OFFSET)
                self.state = 18892
                self.numeric()
                self.state = 18898
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==10:
                    self.state = 18893
                    self.match(PlSqlParser.ACROSS)
                    self.state = 18894
                    self.match(PlSqlParser.ANCESTOR)
                    self.state = 18895
                    self.match(PlSqlParser.AT)
                    self.state = 18896
                    self.match(PlSqlParser.LEVEL)
                    self.state = 18897
                    self.id_expression()


                pass
            else:
                raise NoViableAltException(self)

            self.state = 18902
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Windowing_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def windowing_type(self):
            return self.getTypedRuleContext(PlSqlParser.Windowing_typeContext,0)


        def BETWEEN(self):
            return self.getToken(PlSqlParser.BETWEEN, 0)

        def windowing_elements(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Windowing_elementsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Windowing_elementsContext,i)


        def AND(self):
            return self.getToken(PlSqlParser.AND, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_windowing_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWindowing_clause" ):
                listener.enterWindowing_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWindowing_clause" ):
                listener.exitWindowing_clause(self)




    def windowing_clause(self):

        localctx = PlSqlParser.Windowing_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2168, self.RULE_windowing_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18904
            self.windowing_type()
            self.state = 18911
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [115]:
                self.state = 18905
                self.match(PlSqlParser.BETWEEN)
                self.state = 18906
                self.windowing_elements()
                self.state = 18907
                self.match(PlSqlParser.AND)
                self.state = 18908
                self.windowing_elements()
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                self.state = 18910
                self.windowing_elements()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Windowing_typeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_windowing_type

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWindowing_type" ):
                listener.enterWindowing_type(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWindowing_type" ):
                listener.exitWindowing_type(self)




    def windowing_type(self):

        localctx = PlSqlParser.Windowing_typeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2170, self.RULE_windowing_type)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18913
            _la = self._input.LA(1)
            if not(_la==1420 or _la==1529):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Windowing_elementsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNBOUNDED(self):
            return self.getToken(PlSqlParser.UNBOUNDED, 0)

        def PRECEDING(self):
            return self.getToken(PlSqlParser.PRECEDING, 0)

        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def FOLLOWING(self):
            return self.getToken(PlSqlParser.FOLLOWING, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_windowing_elements

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWindowing_elements" ):
                listener.enterWindowing_elements(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWindowing_elements" ):
                listener.exitWindowing_elements(self)




    def windowing_elements(self):

        localctx = PlSqlParser.Windowing_elementsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2172, self.RULE_windowing_elements)
        self._la = 0 # Token type
        try:
            self.state = 18922
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2653,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 18915
                self.match(PlSqlParser.UNBOUNDED)
                self.state = 18916
                self.match(PlSqlParser.PRECEDING)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 18917
                self.match(PlSqlParser.CURRENT)
                self.state = 18918
                self.match(PlSqlParser.ROW)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 18919
                self.concatenation(0)
                self.state = 18920
                _la = self._input.LA(1)
                if not(_la==573 or _la==1362):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def using_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Using_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Using_elementContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_using_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_clause" ):
                listener.enterUsing_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_clause" ):
                listener.exitUsing_clause(self)




    def using_clause(self):

        localctx = PlSqlParser.Using_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2174, self.RULE_using_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18924
            self.match(PlSqlParser.USING)
            self.state = 18934
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2350]:
                self.state = 18925
                self.match(PlSqlParser.ASTERISK)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2340, 2341, 2342, 2343, 2344, 2347, 2351, 2352, 2359, 2365, 2366, 2372, 2378, 2379]:
                self.state = 18926
                self.using_element()
                self.state = 18931
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2654,self._ctx)
                while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                    if _alt==1:
                        self.state = 18927
                        self.match(PlSqlParser.COMMA)
                        self.state = 18928
                        self.using_element() 
                    self.state = 18933
                    self._errHandler.sync(self)
                    _alt = self._interp.adaptivePredict(self._input,2654,self._ctx)

                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Using_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def select_list_elements(self):
            return self.getTypedRuleContext(PlSqlParser.Select_list_elementsContext,0)


        def IN(self):
            return self.getToken(PlSqlParser.IN, 0)

        def OUT(self):
            return self.getToken(PlSqlParser.OUT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_using_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUsing_element" ):
                listener.enterUsing_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUsing_element" ):
                listener.exitUsing_element(self)




    def using_element(self):

        localctx = PlSqlParser.Using_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2176, self.RULE_using_element)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18941
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2657,self._ctx)
            if la_ == 1:
                self.state = 18936
                self.match(PlSqlParser.IN)
                self.state = 18938
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2656,self._ctx)
                if la_ == 1:
                    self.state = 18937
                    self.match(PlSqlParser.OUT)



            elif la_ == 2:
                self.state = 18940
                self.match(PlSqlParser.OUT)


            self.state = 18943
            self.select_list_elements()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Collect_order_by_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ORDER(self):
            return self.getToken(PlSqlParser.ORDER, 0)

        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_collect_order_by_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollect_order_by_part" ):
                listener.enterCollect_order_by_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollect_order_by_part" ):
                listener.exitCollect_order_by_part(self)




    def collect_order_by_part(self):

        localctx = PlSqlParser.Collect_order_by_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2178, self.RULE_collect_order_by_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18945
            self.match(PlSqlParser.ORDER)
            self.state = 18946
            self.match(PlSqlParser.BY)
            self.state = 18947
            self.concatenation(0)
            self.state = 18952
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 18948
                self.match(PlSqlParser.COMMA)
                self.state = 18949
                self.concatenation(0)
                self.state = 18954
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Within_or_over_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WITHIN(self):
            return self.getToken(PlSqlParser.WITHIN, 0)

        def GROUP(self):
            return self.getToken(PlSqlParser.GROUP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def over_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Over_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_within_or_over_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWithin_or_over_part" ):
                listener.enterWithin_or_over_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWithin_or_over_part" ):
                listener.exitWithin_or_over_part(self)




    def within_or_over_part(self):

        localctx = PlSqlParser.Within_or_over_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2180, self.RULE_within_or_over_part)
        try:
            self.state = 18962
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2209]:
                self.enterOuterAlt(localctx, 1)
                self.state = 18955
                self.match(PlSqlParser.WITHIN)
                self.state = 18956
                self.match(PlSqlParser.GROUP)
                self.state = 18957
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18958
                self.order_by_clause()
                self.state = 18959
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            elif token in [1251]:
                self.enterOuterAlt(localctx, 2)
                self.state = 18961
                self.over_clause()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class String_delimiterContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def string_function(self):
            return self.getTypedRuleContext(PlSqlParser.String_functionContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def string_delimiter(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.String_delimiterContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.String_delimiterContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def BAR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BAR)
            else:
                return self.getToken(PlSqlParser.BAR, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_string_delimiter

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterString_delimiter" ):
                listener.enterString_delimiter(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitString_delimiter" ):
                listener.exitString_delimiter(self)



    def string_delimiter(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.String_delimiterContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2182
        self.enterRecursionRule(localctx, 2182, self.RULE_string_delimiter, _p)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18972
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2660,self._ctx)
            if la_ == 1:
                self.state = 18965
                self.match(PlSqlParser.CHAR_STRING)
                pass

            elif la_ == 2:
                self.state = 18966
                self.string_function()
                pass

            elif la_ == 3:
                self.state = 18967
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18968
                self.string_delimiter(0)
                self.state = 18969
                self.match(PlSqlParser.RIGHT_PAREN)
                pass

            elif la_ == 4:
                self.state = 18971
                self.id_expression()
                pass


            self._ctx.stop = self._input.LT(-1)
            self.state = 18980
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2661,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    localctx = PlSqlParser.String_delimiterContext(self, _parentctx, _parentState)
                    self.pushNewRecursionContext(localctx, _startState, self.RULE_string_delimiter)
                    self.state = 18974
                    if not self.precpred(self._ctx, 3):
                        from antlr4.error.Errors import FailedPredicateException
                        raise FailedPredicateException(self, "self.precpred(self._ctx, 3)")
                    self.state = 18975
                    self.match(PlSqlParser.BAR)
                    self.state = 18976
                    self.match(PlSqlParser.BAR)
                    self.state = 18977
                    self.string_delimiter(4) 
                self.state = 18982
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2661,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class Cost_matrix_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def COST(self):
            return self.getToken(PlSqlParser.COST, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def cost_class_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Cost_class_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Cost_class_nameContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def VALUES(self):
            return self.getToken(PlSqlParser.VALUES, 0)

        def AUTO(self):
            return self.getToken(PlSqlParser.AUTO, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cost_matrix_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCost_matrix_clause" ):
                listener.enterCost_matrix_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCost_matrix_clause" ):
                listener.exitCost_matrix_clause(self)




    def cost_matrix_clause(self):

        localctx = PlSqlParser.Cost_matrix_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2184, self.RULE_cost_matrix_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 18983
            self.match(PlSqlParser.COST)
            self.state = 19005
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [917]:
                self.state = 18984
                self.match(PlSqlParser.MODEL)
                self.state = 18986
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==89:
                    self.state = 18985
                    self.match(PlSqlParser.AUTO)


                pass
            elif token in [2347]:
                self.state = 18988
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 18989
                self.cost_class_name()
                self.state = 18994
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 18990
                    self.match(PlSqlParser.COMMA)
                    self.state = 18991
                    self.cost_class_name()
                    self.state = 18996
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                self.state = 18997
                self.match(PlSqlParser.RIGHT_PAREN)
                self.state = 18998
                self.match(PlSqlParser.VALUES)
                self.state = 18999
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 19001
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                    self.state = 19000
                    self.expressions()


                self.state = 19003
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_passing_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PASSING(self):
            return self.getToken(PlSqlParser.PASSING, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def BY(self):
            return self.getToken(PlSqlParser.BY, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def column_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_passing_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_passing_clause" ):
                listener.enterXml_passing_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_passing_clause" ):
                listener.exitXml_passing_clause(self)




    def xml_passing_clause(self):

        localctx = PlSqlParser.Xml_passing_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2186, self.RULE_xml_passing_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19007
            self.match(PlSqlParser.PASSING)
            self.state = 19010
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==154:
                self.state = 19008
                self.match(PlSqlParser.BY)
                self.state = 19009
                self.match(PlSqlParser.VALUE)


            self.state = 19012
            self.expression()
            self.state = 19014
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2667,self._ctx)
            if la_ == 1:
                self.state = 19013
                self.column_alias()


            self.state = 19023
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 19016
                self.match(PlSqlParser.COMMA)
                self.state = 19017
                self.expression()
                self.state = 19019
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2668,self._ctx)
                if la_ == 1:
                    self.state = 19018
                    self.column_alias()


                self.state = 19025
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_attributes_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XMLATTRIBUTES(self):
            return self.getToken(PlSqlParser.XMLATTRIBUTES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def xml_multiuse_expression_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Xml_multiuse_expression_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Xml_multiuse_expression_elementContext,i)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def ENTITYESCAPING(self):
            return self.getToken(PlSqlParser.ENTITYESCAPING, 0)

        def NOENTITYESCAPING(self):
            return self.getToken(PlSqlParser.NOENTITYESCAPING, 0)

        def SCHEMACHECK(self):
            return self.getToken(PlSqlParser.SCHEMACHECK, 0)

        def NOSCHEMACHECK(self):
            return self.getToken(PlSqlParser.NOSCHEMACHECK, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_attributes_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_attributes_clause" ):
                listener.enterXml_attributes_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_attributes_clause" ):
                listener.exitXml_attributes_clause(self)




    def xml_attributes_clause(self):

        localctx = PlSqlParser.Xml_attributes_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2188, self.RULE_xml_attributes_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19026
            self.match(PlSqlParser.XMLATTRIBUTES)
            self.state = 19027
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19029
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2670,self._ctx)
            if la_ == 1:
                self.state = 19028
                _la = self._input.LA(1)
                if not(_la==479 or _la==1037):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 19032
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2671,self._ctx)
            if la_ == 1:
                self.state = 19031
                _la = self._input.LA(1)
                if not(_la==1118 or _la==1546):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 19034
            self.xml_multiuse_expression_element()
            self.state = 19039
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 19035
                self.match(PlSqlParser.COMMA)
                self.state = 19036
                self.xml_multiuse_expression_element()
                self.state = 19041
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 19042
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_namespaces_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XMLNAMESPACES(self):
            return self.getToken(PlSqlParser.XMLNAMESPACES, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def concatenation(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ConcatenationContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,i)


        def column_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def xml_general_default_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_general_default_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_namespaces_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_namespaces_clause" ):
                listener.enterXml_namespaces_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_namespaces_clause" ):
                listener.exitXml_namespaces_clause(self)




    def xml_namespaces_clause(self):

        localctx = PlSqlParser.Xml_namespaces_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2190, self.RULE_xml_namespaces_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19044
            self.match(PlSqlParser.XMLNAMESPACES)
            self.state = 19045
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19049
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2673,self._ctx)
            if la_ == 1:
                self.state = 19046
                self.concatenation(0)
                self.state = 19047
                self.column_alias()


            self.state = 19057
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 19051
                self.match(PlSqlParser.COMMA)
                self.state = 19052
                self.concatenation(0)
                self.state = 19053
                self.column_alias()
                self.state = 19059
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 19061
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==368:
                self.state = 19060
                self.xml_general_default_part()


            self.state = 19063
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_table_columnContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def xml_column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_column_nameContext,0)


        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def ORDINALITY(self):
            return self.getToken(PlSqlParser.ORDINALITY, 0)

        def type_spec(self):
            return self.getTypedRuleContext(PlSqlParser.Type_specContext,0)


        def PATH(self):
            return self.getToken(PlSqlParser.PATH, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def xml_general_default_part(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_general_default_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_table_column

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_table_column" ):
                listener.enterXml_table_column(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_table_column" ):
                listener.exitXml_table_column(self)




    def xml_table_column(self):

        localctx = PlSqlParser.Xml_table_columnContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2192, self.RULE_xml_table_column)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19065
            self.xml_column_name()
            self.state = 19076
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [580]:
                self.state = 19066
                self.match(PlSqlParser.FOR)
                self.state = 19067
                self.match(PlSqlParser.ORDINALITY)
                pass
            elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.state = 19068
                self.type_spec()
                self.state = 19071
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1290:
                    self.state = 19069
                    self.match(PlSqlParser.PATH)
                    self.state = 19070
                    self.concatenation(0)


                self.state = 19074
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==368:
                    self.state = 19073
                    self.xml_general_default_part()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_general_default_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_general_default_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_general_default_part" ):
                listener.enterXml_general_default_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_general_default_part" ):
                listener.exitXml_general_default_part(self)




    def xml_general_default_part(self):

        localctx = PlSqlParser.Xml_general_default_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2194, self.RULE_xml_general_default_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19078
            self.match(PlSqlParser.DEFAULT)
            self.state = 19079
            self.concatenation(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_multiuse_expression_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def EVALNAME(self):
            return self.getToken(PlSqlParser.EVALNAME, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_multiuse_expression_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_multiuse_expression_element" ):
                listener.enterXml_multiuse_expression_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_multiuse_expression_element" ):
                listener.exitXml_multiuse_expression_element(self)




    def xml_multiuse_expression_element(self):

        localctx = PlSqlParser.Xml_multiuse_expression_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2196, self.RULE_xml_multiuse_expression_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19081
            self.expression()
            self.state = 19088
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==67:
                self.state = 19082
                self.match(PlSqlParser.AS)
                self.state = 19086
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2679,self._ctx)
                if la_ == 1:
                    self.state = 19083
                    self.id_expression()
                    pass

                elif la_ == 2:
                    self.state = 19084
                    self.match(PlSqlParser.EVALNAME)
                    self.state = 19085
                    self.concatenation(0)
                    pass




        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlroot_param_version_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VERSION(self):
            return self.getToken(PlSqlParser.VERSION, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlroot_param_version_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlroot_param_version_part" ):
                listener.enterXmlroot_param_version_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlroot_param_version_part" ):
                listener.exitXmlroot_param_version_part(self)




    def xmlroot_param_version_part(self):

        localctx = PlSqlParser.Xmlroot_param_version_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2198, self.RULE_xmlroot_param_version_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19090
            self.match(PlSqlParser.VERSION)
            self.state = 19094
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2681,self._ctx)
            if la_ == 1:
                self.state = 19091
                self.match(PlSqlParser.NO)
                self.state = 19092
                self.match(PlSqlParser.VALUE)
                pass

            elif la_ == 2:
                self.state = 19093
                self.expression()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlroot_param_standalone_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def STANDALONE(self):
            return self.getToken(PlSqlParser.STANDALONE, 0)

        def YES(self):
            return self.getToken(PlSqlParser.YES, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlroot_param_standalone_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlroot_param_standalone_part" ):
                listener.enterXmlroot_param_standalone_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlroot_param_standalone_part" ):
                listener.exitXmlroot_param_standalone_part(self)




    def xmlroot_param_standalone_part(self):

        localctx = PlSqlParser.Xmlroot_param_standalone_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2200, self.RULE_xmlroot_param_standalone_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19096
            self.match(PlSqlParser.STANDALONE)
            self.state = 19102
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2261]:
                self.state = 19097
                self.match(PlSqlParser.YES)
                pass
            elif token in [1074]:
                self.state = 19098
                self.match(PlSqlParser.NO)
                self.state = 19100
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2165:
                    self.state = 19099
                    self.match(PlSqlParser.VALUE)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlserialize_param_enconding_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ENCODING(self):
            return self.getToken(PlSqlParser.ENCODING, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlserialize_param_enconding_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlserialize_param_enconding_part" ):
                listener.enterXmlserialize_param_enconding_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlserialize_param_enconding_part" ):
                listener.exitXmlserialize_param_enconding_part(self)




    def xmlserialize_param_enconding_part(self):

        localctx = PlSqlParser.Xmlserialize_param_enconding_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2202, self.RULE_xmlserialize_param_enconding_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19104
            self.match(PlSqlParser.ENCODING)
            self.state = 19105
            self.concatenation(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlserialize_param_version_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def VERSION(self):
            return self.getToken(PlSqlParser.VERSION, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlserialize_param_version_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlserialize_param_version_part" ):
                listener.enterXmlserialize_param_version_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlserialize_param_version_part" ):
                listener.exitXmlserialize_param_version_part(self)




    def xmlserialize_param_version_part(self):

        localctx = PlSqlParser.Xmlserialize_param_version_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2204, self.RULE_xmlserialize_param_version_part)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19107
            self.match(PlSqlParser.VERSION)
            self.state = 19108
            self.concatenation(0)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xmlserialize_param_ident_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def INDENT(self):
            return self.getToken(PlSqlParser.INDENT, 0)

        def SIZE(self):
            return self.getToken(PlSqlParser.SIZE, 0)

        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmlserialize_param_ident_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmlserialize_param_ident_part" ):
                listener.enterXmlserialize_param_ident_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmlserialize_param_ident_part" ):
                listener.exitXmlserialize_param_ident_part(self)




    def xmlserialize_param_ident_part(self):

        localctx = PlSqlParser.Xmlserialize_param_ident_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2206, self.RULE_xmlserialize_param_ident_part)
        self._la = 0 # Token type
        try:
            self.state = 19118
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1074]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19110
                self.match(PlSqlParser.NO)
                self.state = 19111
                self.match(PlSqlParser.INDENT)
                pass
            elif token in [667]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19112
                self.match(PlSqlParser.INDENT)
                self.state = 19116
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1617:
                    self.state = 19113
                    self.match(PlSqlParser.SIZE)
                    self.state = 19114
                    self.match(PlSqlParser.EQUALS_OP)
                    self.state = 19115
                    self.concatenation(0)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sql_plus_command_no_semicolonContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def set_command(self):
            return self.getTypedRuleContext(PlSqlParser.Set_commandContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_plus_command_no_semicolon

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_plus_command_no_semicolon" ):
                listener.enterSql_plus_command_no_semicolon(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_plus_command_no_semicolon" ):
                listener.exitSql_plus_command_no_semicolon(self)




    def sql_plus_command_no_semicolon(self):

        localctx = PlSqlParser.Sql_plus_command_no_semicolonContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2208, self.RULE_sql_plus_command_no_semicolon)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19120
            self.set_command()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sql_plus_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def EXIT(self):
            return self.getToken(PlSqlParser.EXIT, 0)

        def PROMPT_MESSAGE(self):
            return self.getToken(PlSqlParser.PROMPT_MESSAGE, 0)

        def SHOW(self):
            return self.getToken(PlSqlParser.SHOW, 0)

        def ERR(self):
            return self.getToken(PlSqlParser.ERR, 0)

        def ERRORS(self):
            return self.getToken(PlSqlParser.ERRORS, 0)

        def whenever_command(self):
            return self.getTypedRuleContext(PlSqlParser.Whenever_commandContext,0)


        def timing_command(self):
            return self.getTypedRuleContext(PlSqlParser.Timing_commandContext,0)


        def start_command(self):
            return self.getTypedRuleContext(PlSqlParser.Start_commandContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_sql_plus_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSql_plus_command" ):
                listener.enterSql_plus_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSql_plus_command" ):
                listener.exitSql_plus_command(self)




    def sql_plus_command(self):

        localctx = PlSqlParser.Sql_plus_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2210, self.RULE_sql_plus_command)
        self._la = 0 # Token type
        try:
            self.state = 19129
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [510]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19122
                self.match(PlSqlParser.EXIT)
                pass
            elif token in [2376]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19123
                self.match(PlSqlParser.PROMPT_MESSAGE)
                pass
            elif token in [1601]:
                self.enterOuterAlt(localctx, 3)
                self.state = 19124
                self.match(PlSqlParser.SHOW)
                self.state = 19125
                _la = self._input.LA(1)
                if not(_la==482 or _la==486):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass
            elif token in [2203]:
                self.enterOuterAlt(localctx, 4)
                self.state = 19126
                self.whenever_command()
                pass
            elif token in [2032]:
                self.enterOuterAlt(localctx, 5)
                self.state = 19127
                self.timing_command()
                pass
            elif token in [2377]:
                self.enterOuterAlt(localctx, 6)
                self.state = 19128
                self.start_command()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Start_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def START_CMD(self):
            return self.getToken(PlSqlParser.START_CMD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def FILE_EXT(self):
            return self.getToken(PlSqlParser.FILE_EXT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_start_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterStart_command" ):
                listener.enterStart_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitStart_command" ):
                listener.exitStart_command(self)




    def start_command(self):

        localctx = PlSqlParser.Start_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2212, self.RULE_start_command)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19131
            self.match(PlSqlParser.START_CMD)
            self.state = 19132
            self.id_expression()
            self.state = 19133
            self.match(PlSqlParser.PERIOD)
            self.state = 19134
            _la = self._input.LA(1)
            if not(_la==1639 or _la==1640):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Whenever_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHENEVER(self):
            return self.getToken(PlSqlParser.WHENEVER, 0)

        def SQLERROR(self):
            return self.getToken(PlSqlParser.SQLERROR, 0)

        def OSERROR(self):
            return self.getToken(PlSqlParser.OSERROR, 0)

        def EXIT(self):
            return self.getToken(PlSqlParser.EXIT, 0)

        def CONTINUE(self):
            return self.getToken(PlSqlParser.CONTINUE, 0)

        def SUCCESS(self):
            return self.getToken(PlSqlParser.SUCCESS, 0)

        def FAILURE(self):
            return self.getToken(PlSqlParser.FAILURE, 0)

        def WARNING(self):
            return self.getToken(PlSqlParser.WARNING, 0)

        def variable_name(self):
            return self.getTypedRuleContext(PlSqlParser.Variable_nameContext,0)


        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_whenever_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWhenever_command" ):
                listener.enterWhenever_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWhenever_command" ):
                listener.exitWhenever_command(self)




    def whenever_command(self):

        localctx = PlSqlParser.Whenever_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2214, self.RULE_whenever_command)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19136
            self.match(PlSqlParser.WHENEVER)
            self.state = 19137
            _la = self._input.LA(1)
            if not(_la==1239 or _la==1637):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 19153
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [510]:
                self.state = 19138
                self.match(PlSqlParser.EXIT)
                self.state = 19144
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2687,self._ctx)
                if la_ == 1:
                    self.state = 19139
                    self.match(PlSqlParser.SUCCESS)
                    pass

                elif la_ == 2:
                    self.state = 19140
                    self.match(PlSqlParser.FAILURE)
                    pass

                elif la_ == 3:
                    self.state = 19141
                    self.match(PlSqlParser.WARNING)
                    pass

                elif la_ == 4:
                    self.state = 19142
                    self.variable_name()
                    pass

                elif la_ == 5:
                    self.state = 19143
                    self.numeric()
                    pass


                self.state = 19147
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==231 or _la==1518:
                    self.state = 19146
                    _la = self._input.LA(1)
                    if not(_la==231 or _la==1518):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            elif token in [282]:
                self.state = 19149
                self.match(PlSqlParser.CONTINUE)
                self.state = 19151
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==231 or _la==1071 or _la==1518:
                    self.state = 19150
                    _la = self._input.LA(1)
                    if not(_la==231 or _la==1071 or _la==1518):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Set_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def regular_id(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Regular_idContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Regular_idContext,i)


        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_set_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSet_command" ):
                listener.enterSet_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSet_command" ):
                listener.exitSet_command(self)




    def set_command(self):

        localctx = PlSqlParser.Set_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2216, self.RULE_set_command)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19155
            self.match(PlSqlParser.SET)
            self.state = 19156
            self.regular_id()
            self.state = 19162
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2691,self._ctx)
            if la_ == 1:
                self.state = 19157
                self.match(PlSqlParser.CHAR_STRING)
                pass

            elif la_ == 2:
                self.state = 19158
                self.match(PlSqlParser.ON)
                pass

            elif la_ == 3:
                self.state = 19159
                self.match(PlSqlParser.OFF)
                pass

            elif la_ == 4:
                self.state = 19160
                self.numeric()
                pass

            elif la_ == 5:
                self.state = 19161
                self.regular_id()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Timing_commandContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser
            self.timing_text = None # Id_expressionContext

        def TIMING(self):
            return self.getToken(PlSqlParser.TIMING, 0)

        def START(self):
            return self.getToken(PlSqlParser.START, 0)

        def SHOW(self):
            return self.getToken(PlSqlParser.SHOW, 0)

        def STOP(self):
            return self.getToken(PlSqlParser.STOP, 0)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_timing_command

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTiming_command" ):
                listener.enterTiming_command(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTiming_command" ):
                listener.exitTiming_command(self)




    def timing_command(self):

        localctx = PlSqlParser.Timing_commandContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2218, self.RULE_timing_command)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19164
            self.match(PlSqlParser.TIMING)
            self.state = 19174
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1654]:
                self.state = 19165
                self.match(PlSqlParser.START)
                self.state = 19169
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 586263035903) != 0) or _la==2378:
                    self.state = 19166
                    localctx.timing_text = self.id_expression()
                    self.state = 19171
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass
            elif token in [1601]:
                self.state = 19172
                self.match(PlSqlParser.SHOW)
                pass
            elif token in [1677]:
                self.state = 19173
                self.match(PlSqlParser.STOP)
                pass
            elif token in [-1, 2354, 2367]:
                pass
            else:
                pass
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Partition_extension_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def FOR(self):
            return self.getToken(PlSqlParser.FOR, 0)

        def expressions(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionsContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_partition_extension_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPartition_extension_clause" ):
                listener.enterPartition_extension_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPartition_extension_clause" ):
                listener.exitPartition_extension_clause(self)




    def partition_extension_clause(self):

        localctx = PlSqlParser.Partition_extension_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2220, self.RULE_partition_extension_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19176
            _la = self._input.LA(1)
            if not(_la==1275 or _la==1691):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 19178
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==580:
                self.state = 19177
                self.match(PlSqlParser.FOR)


            self.state = 19180
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19182
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                self.state = 19181
                self.expressions()


            self.state = 19184
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_aliasContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def AS(self):
            return self.getToken(PlSqlParser.AS, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_column_alias

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_alias" ):
                listener.enterColumn_alias(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_alias" ):
                listener.exitColumn_alias(self)




    def column_alias(self):

        localctx = PlSqlParser.Column_aliasContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2222, self.RULE_column_alias)
        self._la = 0 # Token type
        try:
            self.state = 19194
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2698,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 19187
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==67:
                    self.state = 19186
                    self.match(PlSqlParser.AS)


                self.state = 19191
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                    self.state = 19189
                    self.identifier()
                    pass
                elif token in [2336, 2343]:
                    self.state = 19190
                    self.quoted_string()
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 19193
                self.match(PlSqlParser.AS)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_aliasContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_alias

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_alias" ):
                listener.enterTable_alias(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_alias" ):
                listener.exitTable_alias(self)




    def table_alias(self):

        localctx = PlSqlParser.Table_aliasContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2224, self.RULE_table_alias)
        try:
            self.state = 19198
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19196
                self.identifier()
                pass
            elif token in [2336, 2343]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19197
                self.quoted_string()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Where_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def WHERE(self):
            return self.getToken(PlSqlParser.WHERE, 0)

        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def OF(self):
            return self.getToken(PlSqlParser.OF, 0)

        def cursor_name(self):
            return self.getTypedRuleContext(PlSqlParser.Cursor_nameContext,0)


        def condition(self):
            return self.getTypedRuleContext(PlSqlParser.ConditionContext,0)


        def quantitative_where_stmt(self):
            return self.getTypedRuleContext(PlSqlParser.Quantitative_where_stmtContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_where_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterWhere_clause" ):
                listener.enterWhere_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitWhere_clause" ):
                listener.exitWhere_clause(self)




    def where_clause(self):

        localctx = PlSqlParser.Where_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2226, self.RULE_where_clause)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19200
            self.match(PlSqlParser.WHERE)
            self.state = 19206
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2700,self._ctx)
            if la_ == 1:
                self.state = 19201
                self.match(PlSqlParser.CURRENT)
                self.state = 19202
                self.match(PlSqlParser.OF)
                self.state = 19203
                self.cursor_name()
                pass

            elif la_ == 2:
                self.state = 19204
                self.condition()
                pass

            elif la_ == 3:
                self.state = 19205
                self.quantitative_where_stmt()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Quantitative_where_stmtContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def relational_operator(self):
            return self.getTypedRuleContext(PlSqlParser.Relational_operatorContext,0)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def SOME(self):
            return self.getToken(PlSqlParser.SOME, 0)

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def ANY(self):
            return self.getToken(PlSqlParser.ANY, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_quantitative_where_stmt

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuantitative_where_stmt" ):
                listener.enterQuantitative_where_stmt(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuantitative_where_stmt" ):
                listener.exitQuantitative_where_stmt(self)




    def quantitative_where_stmt(self):

        localctx = PlSqlParser.Quantitative_where_stmtContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2228, self.RULE_quantitative_where_stmt)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19208
            self.expression()
            self.state = 19209
            self.relational_operator()
            self.state = 19210
            _la = self._input.LA(1)
            if not(_la==38 or _la==54 or _la==1625):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 19211
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19212
            self.expression()
            self.state = 19217
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 19213
                self.match(PlSqlParser.COMMA)
                self.state = 19214
                self.expression()
                self.state = 19219
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 19220
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Into_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INTO(self):
            return self.getToken(PlSqlParser.INTO, 0)

        def general_element(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.General_elementContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.General_elementContext,i)


        def bind_variable(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Bind_variableContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,i)


        def BULK(self):
            return self.getToken(PlSqlParser.BULK, 0)

        def COLLECT(self):
            return self.getToken(PlSqlParser.COLLECT, 0)

        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_into_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInto_clause" ):
                listener.enterInto_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInto_clause" ):
                listener.exitInto_clause(self)




    def into_clause(self):

        localctx = PlSqlParser.Into_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2230, self.RULE_into_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19224
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==153:
                self.state = 19222
                self.match(PlSqlParser.BULK)
                self.state = 19223
                self.match(PlSqlParser.COLLECT)


            self.state = 19226
            self.match(PlSqlParser.INTO)
            self.state = 19229
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2347, 2372, 2378]:
                self.state = 19227
                self.general_element(0)
                pass
            elif token in [2359, 2366]:
                self.state = 19228
                self.bind_variable()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 19238
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2705,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19231
                    self.match(PlSqlParser.COMMA)
                    self.state = 19234
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2347, 2372, 2378]:
                        self.state = 19232
                        self.general_element(0)
                        pass
                    elif token in [2359, 2366]:
                        self.state = 19233
                        self.bind_variable()
                        pass
                    else:
                        raise NoViableAltException(self)
             
                self.state = 19240
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2705,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Xml_column_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def quoted_string(self):
            return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xml_column_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXml_column_name" ):
                listener.enterXml_column_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXml_column_name" ):
                listener.exitXml_column_name(self)




    def xml_column_name(self):

        localctx = PlSqlParser.Xml_column_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2232, self.RULE_xml_column_name)
        try:
            self.state = 19243
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19241
                self.identifier()
                pass
            elif token in [2336, 2343]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19242
                self.quoted_string()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cost_class_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cost_class_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCost_class_name" ):
                listener.enterCost_class_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCost_class_name" ):
                listener.exitCost_class_name(self)




    def cost_class_name(self):

        localctx = PlSqlParser.Cost_class_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2234, self.RULE_cost_class_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19245
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Attribute_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_attribute_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAttribute_name" ):
                listener.enterAttribute_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAttribute_name" ):
                listener.exitAttribute_name(self)




    def attribute_name(self):

        localctx = PlSqlParser.Attribute_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2236, self.RULE_attribute_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19247
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Savepoint_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_savepoint_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSavepoint_name" ):
                listener.enterSavepoint_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSavepoint_name" ):
                listener.exitSavepoint_name(self)




    def savepoint_name(self):

        localctx = PlSqlParser.Savepoint_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2238, self.RULE_savepoint_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19249
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Rollback_segment_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_rollback_segment_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRollback_segment_name" ):
                listener.enterRollback_segment_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRollback_segment_name" ):
                listener.exitRollback_segment_name(self)




    def rollback_segment_name(self):

        localctx = PlSqlParser.Rollback_segment_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2240, self.RULE_rollback_segment_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19251
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_var_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_table_var_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_var_name" ):
                listener.enterTable_var_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_var_name" ):
                listener.exitTable_var_name(self)




    def table_var_name(self):

        localctx = PlSqlParser.Table_var_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2242, self.RULE_table_var_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19253
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Schema_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_schema_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSchema_name" ):
                listener.enterSchema_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSchema_name" ):
                listener.exitSchema_name(self)




    def schema_name(self):

        localctx = PlSqlParser.Schema_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2244, self.RULE_schema_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19255
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Routine_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def AT_SIGN(self):
            return self.getToken(PlSqlParser.AT_SIGN, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_routine_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRoutine_name" ):
                listener.enterRoutine_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRoutine_name" ):
                listener.exitRoutine_name(self)




    def routine_name(self):

        localctx = PlSqlParser.Routine_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2246, self.RULE_routine_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19257
            self.identifier()
            self.state = 19262
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2707,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19258
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19259
                    self.id_expression() 
                self.state = 19264
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2707,self._ctx)

            self.state = 19267
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2355:
                self.state = 19265
                self.match(PlSqlParser.AT_SIGN)
                self.state = 19266
                self.link_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Package_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_package_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPackage_name" ):
                listener.enterPackage_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPackage_name" ):
                listener.exitPackage_name(self)




    def package_name(self):

        localctx = PlSqlParser.Package_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2248, self.RULE_package_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19269
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Implementation_type_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_implementation_type_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterImplementation_type_name" ):
                listener.enterImplementation_type_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitImplementation_type_name" ):
                listener.exitImplementation_type_name(self)




    def implementation_type_name(self):

        localctx = PlSqlParser.Implementation_type_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2250, self.RULE_implementation_type_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19271
            self.identifier()
            self.state = 19274
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 19272
                self.match(PlSqlParser.PERIOD)
                self.state = 19273
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Parameter_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_parameter_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParameter_name" ):
                listener.enterParameter_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParameter_name" ):
                listener.exitParameter_name(self)




    def parameter_name(self):

        localctx = PlSqlParser.Parameter_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2252, self.RULE_parameter_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19276
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Reference_model_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_reference_model_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterReference_model_name" ):
                listener.enterReference_model_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitReference_model_name" ):
                listener.exitReference_model_name(self)




    def reference_model_name(self):

        localctx = PlSqlParser.Reference_model_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2254, self.RULE_reference_model_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19278
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Main_model_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_main_model_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterMain_model_name" ):
                listener.enterMain_model_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitMain_model_name" ):
                listener.exitMain_model_name(self)




    def main_model_name(self):

        localctx = PlSqlParser.Main_model_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2256, self.RULE_main_model_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19280
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Container_tableview_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_container_tableview_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterContainer_tableview_name" ):
                listener.enterContainer_tableview_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitContainer_tableview_name" ):
                listener.exitContainer_tableview_name(self)




    def container_tableview_name(self):

        localctx = PlSqlParser.Container_tableview_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2258, self.RULE_container_tableview_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19282
            self.identifier()
            self.state = 19285
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 19283
                self.match(PlSqlParser.PERIOD)
                self.state = 19284
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Aggregate_function_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_aggregate_function_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterAggregate_function_name" ):
                listener.enterAggregate_function_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitAggregate_function_name" ):
                listener.exitAggregate_function_name(self)




    def aggregate_function_name(self):

        localctx = PlSqlParser.Aggregate_function_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2260, self.RULE_aggregate_function_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19287
            self.identifier()
            self.state = 19292
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 19288
                self.match(PlSqlParser.PERIOD)
                self.state = 19289
                self.id_expression()
                self.state = 19294
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Query_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_query_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuery_name" ):
                listener.enterQuery_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuery_name" ):
                listener.exitQuery_name(self)




    def query_name(self):

        localctx = PlSqlParser.Query_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2262, self.RULE_query_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19295
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Grantee_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def identified_by(self):
            return self.getTypedRuleContext(PlSqlParser.Identified_byContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_grantee_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrantee_name" ):
                listener.enterGrantee_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrantee_name" ):
                listener.exitGrantee_name(self)




    def grantee_name(self):

        localctx = PlSqlParser.Grantee_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2264, self.RULE_grantee_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19297
            self.id_expression()
            self.state = 19299
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==644:
                self.state = 19298
                self.identified_by()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Role_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def CONNECT(self):
            return self.getToken(PlSqlParser.CONNECT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_role_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRole_name" ):
                listener.enterRole_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRole_name" ):
                listener.exitRole_name(self)




    def role_name(self):

        localctx = PlSqlParser.Role_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2266, self.RULE_role_name)
        try:
            self.state = 19303
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19301
                self.id_expression()
                pass
            elif token in [265]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19302
                self.match(PlSqlParser.CONNECT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Constraint_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def AT_SIGN(self):
            return self.getToken(PlSqlParser.AT_SIGN, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_constraint_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstraint_name" ):
                listener.enterConstraint_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstraint_name" ):
                listener.exitConstraint_name(self)




    def constraint_name(self):

        localctx = PlSqlParser.Constraint_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2268, self.RULE_constraint_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19305
            self.identifier()
            self.state = 19310
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 19306
                self.match(PlSqlParser.PERIOD)
                self.state = 19307
                self.id_expression()
                self.state = 19312
                self._errHandler.sync(self)
                _la = self._input.LA(1)

            self.state = 19315
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2355:
                self.state = 19313
                self.match(PlSqlParser.AT_SIGN)
                self.state = 19314
                self.link_name()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Label_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_label_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLabel_name" ):
                listener.enterLabel_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLabel_name" ):
                listener.exitLabel_name(self)




    def label_name(self):

        localctx = PlSqlParser.Label_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2270, self.RULE_label_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19317
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_type_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_name" ):
                listener.enterType_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_name" ):
                listener.exitType_name(self)




    def type_name(self):

        localctx = PlSqlParser.Type_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2272, self.RULE_type_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19319
            self.id_expression()
            self.state = 19324
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 19320
                self.match(PlSqlParser.PERIOD)
                self.state = 19321
                self.id_expression()
                self.state = 19326
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Sequence_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_sequence_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSequence_name" ):
                listener.enterSequence_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSequence_name" ):
                listener.exitSequence_name(self)




    def sequence_name(self):

        localctx = PlSqlParser.Sequence_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2274, self.RULE_sequence_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19327
            self.id_expression()
            self.state = 19332
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 19328
                self.match(PlSqlParser.PERIOD)
                self.state = 19329
                self.id_expression()
                self.state = 19334
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Exception_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_exception_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterException_name" ):
                listener.enterException_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitException_name" ):
                listener.exitException_name(self)




    def exception_name(self):

        localctx = PlSqlParser.Exception_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2276, self.RULE_exception_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19335
            self.identifier()
            self.state = 19340
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 19336
                self.match(PlSqlParser.PERIOD)
                self.state = 19337
                self.id_expression()
                self.state = 19342
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_function_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_name" ):
                listener.enterFunction_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_name" ):
                listener.exitFunction_name(self)




    def function_name(self):

        localctx = PlSqlParser.Function_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2278, self.RULE_function_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19343
            self.identifier()
            self.state = 19346
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 19344
                self.match(PlSqlParser.PERIOD)
                self.state = 19345
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Procedure_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_procedure_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterProcedure_name" ):
                listener.enterProcedure_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitProcedure_name" ):
                listener.exitProcedure_name(self)




    def procedure_name(self):

        localctx = PlSqlParser.Procedure_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2280, self.RULE_procedure_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19348
            self.identifier()
            self.state = 19351
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 19349
                self.match(PlSqlParser.PERIOD)
                self.state = 19350
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Trigger_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_trigger_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTrigger_name" ):
                listener.enterTrigger_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTrigger_name" ):
                listener.exitTrigger_name(self)




    def trigger_name(self):

        localctx = PlSqlParser.Trigger_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2282, self.RULE_trigger_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19353
            self.identifier()
            self.state = 19356
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 19354
                self.match(PlSqlParser.PERIOD)
                self.state = 19355
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Variable_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def INTRODUCER(self):
            return self.getToken(PlSqlParser.INTRODUCER, 0)

        def char_set_name(self):
            return self.getTypedRuleContext(PlSqlParser.Char_set_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_variable_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterVariable_name" ):
                listener.enterVariable_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitVariable_name" ):
                listener.exitVariable_name(self)




    def variable_name(self):

        localctx = PlSqlParser.Variable_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2284, self.RULE_variable_name)
        self._la = 0 # Token type
        try:
            self.state = 19368
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19360
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2372:
                    self.state = 19358
                    self.match(PlSqlParser.INTRODUCER)
                    self.state = 19359
                    self.char_set_name()


                self.state = 19362
                self.id_expression()
                self.state = 19365
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2340:
                    self.state = 19363
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19364
                    self.id_expression()


                pass
            elif token in [2359, 2366]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19367
                self.bind_variable()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Index_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_index_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIndex_name" ):
                listener.enterIndex_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIndex_name" ):
                listener.exitIndex_name(self)




    def index_name(self):

        localctx = PlSqlParser.Index_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2286, self.RULE_index_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19370
            self.identifier()
            self.state = 19373
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2725,self._ctx)
            if la_ == 1:
                self.state = 19371
                self.match(PlSqlParser.PERIOD)
                self.state = 19372
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Cursor_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def general_element(self):
            return self.getTypedRuleContext(PlSqlParser.General_elementContext,0)


        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_cursor_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCursor_name" ):
                listener.enterCursor_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCursor_name" ):
                listener.exitCursor_name(self)




    def cursor_name(self):

        localctx = PlSqlParser.Cursor_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2288, self.RULE_cursor_name)
        try:
            self.state = 19377
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2347, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19375
                self.general_element(0)
                pass
            elif token in [2359, 2366]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19376
                self.bind_variable()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Record_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def bind_variable(self):
            return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_record_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRecord_name" ):
                listener.enterRecord_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRecord_name" ):
                listener.exitRecord_name(self)




    def record_name(self):

        localctx = PlSqlParser.Record_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2290, self.RULE_record_name)
        try:
            self.state = 19381
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19379
                self.identifier()
                pass
            elif token in [2359, 2366]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19380
                self.bind_variable()
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Collection_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_collection_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterCollection_name" ):
                listener.enterCollection_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitCollection_name" ):
                listener.exitCollection_name(self)




    def collection_name(self):

        localctx = PlSqlParser.Collection_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2292, self.RULE_collection_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19383
            self.identifier()
            self.state = 19386
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2340:
                self.state = 19384
                self.match(PlSqlParser.PERIOD)
                self.state = 19385
                self.id_expression()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Link_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def database(self):
            return self.getTypedRuleContext(PlSqlParser.DatabaseContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def domain(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.DomainContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.DomainContext,i)


        def AT_SIGN(self):
            return self.getToken(PlSqlParser.AT_SIGN, 0)

        def connection_qualifier(self):
            return self.getTypedRuleContext(PlSqlParser.Connection_qualifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_link_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLink_name" ):
                listener.enterLink_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLink_name" ):
                listener.exitLink_name(self)




    def link_name(self):

        localctx = PlSqlParser.Link_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2294, self.RULE_link_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19388
            self.database()
            self.state = 19393
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2729,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19389
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19390
                    self.domain() 
                self.state = 19395
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2729,self._ctx)

            self.state = 19398
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2730,self._ctx)
            if la_ == 1:
                self.state = 19396
                self.match(PlSqlParser.AT_SIGN)
                self.state = 19397
                self.connection_qualifier()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Local_link_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_local_link_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterLocal_link_name" ):
                listener.enterLocal_link_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitLocal_link_name" ):
                listener.exitLocal_link_name(self)




    def local_link_name(self):

        localctx = PlSqlParser.Local_link_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2296, self.RULE_local_link_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19400
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Connection_qualifierContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_connection_qualifier

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConnection_qualifier" ):
                listener.enterConnection_qualifier(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConnection_qualifier" ):
                listener.exitConnection_qualifier(self)




    def connection_qualifier(self):

        localctx = PlSqlParser.Connection_qualifierContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2298, self.RULE_connection_qualifier)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19402
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_column_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_name" ):
                listener.enterColumn_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_name" ):
                listener.exitColumn_name(self)




    def column_name(self):

        localctx = PlSqlParser.Column_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2300, self.RULE_column_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19404
            self.identifier()
            self.state = 19409
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2731,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19405
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19406
                    self.id_expression() 
                self.state = 19411
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2731,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Tableview_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def AT_SIGN(self):
            return self.getToken(PlSqlParser.AT_SIGN, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def partition_extension_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Partition_extension_clauseContext,0)


        def xmltable(self):
            return self.getTypedRuleContext(PlSqlParser.XmltableContext,0)


        def outer_join_sign(self):
            return self.getTypedRuleContext(PlSqlParser.Outer_join_signContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_tableview_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTableview_name" ):
                listener.enterTableview_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTableview_name" ):
                listener.exitTableview_name(self)




    def tableview_name(self):

        localctx = PlSqlParser.Tableview_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2302, self.RULE_tableview_name)
        try:
            self.state = 19426
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2735,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 19412
                self.identifier()
                self.state = 19415
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2732,self._ctx)
                if la_ == 1:
                    self.state = 19413
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19414
                    self.id_expression()


                self.state = 19420
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2733,self._ctx)
                if la_ == 1:
                    self.state = 19417
                    self.match(PlSqlParser.AT_SIGN)
                    self.state = 19418
                    self.link_name()

                elif la_ == 2:
                    self.state = 19419
                    self.partition_extension_clause()


                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 19422
                self.xmltable()
                self.state = 19424
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2734,self._ctx)
                if la_ == 1:
                    self.state = 19423
                    self.outer_join_sign()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class XmltableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def XMLTABLE(self):
            return self.getToken(PlSqlParser.XMLTABLE, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def concatenation(self):
            return self.getTypedRuleContext(PlSqlParser.ConcatenationContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def xml_namespaces_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_namespaces_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def xml_passing_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Xml_passing_clauseContext,0)


        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def xml_table_column(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Xml_table_columnContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Xml_table_columnContext,i)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def general_element_part(self):
            return self.getTypedRuleContext(PlSqlParser.General_element_partContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_xmltable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterXmltable" ):
                listener.enterXmltable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitXmltable" ):
                listener.exitXmltable(self)




    def xmltable(self):

        localctx = PlSqlParser.XmltableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2304, self.RULE_xmltable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19428
            self.match(PlSqlParser.XMLTABLE)
            self.state = 19429
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19433
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2736,self._ctx)
            if la_ == 1:
                self.state = 19430
                self.xml_namespaces_clause()
                self.state = 19431
                self.match(PlSqlParser.COMMA)


            self.state = 19435
            self.concatenation(0)
            self.state = 19437
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==1279:
                self.state = 19436
                self.xml_passing_clause()


            self.state = 19448
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==227:
                self.state = 19439
                self.match(PlSqlParser.COLUMNS)
                self.state = 19440
                self.xml_table_column()
                self.state = 19445
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 19441
                    self.match(PlSqlParser.COMMA)
                    self.state = 19442
                    self.xml_table_column()
                    self.state = 19447
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 19450
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 19453
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2740,self._ctx)
            if la_ == 1:
                self.state = 19451
                self.match(PlSqlParser.PERIOD)
                self.state = 19452
                self.general_element_part()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Char_set_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_char_set_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterChar_set_name" ):
                listener.enterChar_set_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitChar_set_name" ):
                listener.exitChar_set_name(self)




    def char_set_name(self):

        localctx = PlSqlParser.Char_set_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2306, self.RULE_char_set_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19455
            self.id_expression()
            self.state = 19460
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2741,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19456
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19457
                    self.id_expression() 
                self.state = 19462
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2741,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Synonym_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_synonym_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSynonym_name" ):
                listener.enterSynonym_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSynonym_name" ):
                listener.exitSynonym_name(self)




    def synonym_name(self):

        localctx = PlSqlParser.Synonym_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2308, self.RULE_synonym_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19463
            self.identifier()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Schema_object_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_schema_object_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSchema_object_name" ):
                listener.enterSchema_object_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSchema_object_name" ):
                listener.exitSchema_object_name(self)




    def schema_object_name(self):

        localctx = PlSqlParser.Schema_object_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2310, self.RULE_schema_object_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19465
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Dir_object_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_dir_object_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDir_object_name" ):
                listener.enterDir_object_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDir_object_name" ):
                listener.exitDir_object_name(self)




    def dir_object_name(self):

        localctx = PlSqlParser.Dir_object_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2312, self.RULE_dir_object_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19467
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class User_object_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_user_object_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterUser_object_name" ):
                listener.enterUser_object_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitUser_object_name" ):
                listener.exitUser_object_name(self)




    def user_object_name(self):

        localctx = PlSqlParser.User_object_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2314, self.RULE_user_object_name)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19469
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Grant_object_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def user_object_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.User_object_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.User_object_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def dir_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Dir_object_nameContext,0)


        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def schema_object_name(self):
            return self.getTypedRuleContext(PlSqlParser.Schema_object_nameContext,0)


        def MINING(self):
            return self.getToken(PlSqlParser.MINING, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def SOURCE(self):
            return self.getToken(PlSqlParser.SOURCE, 0)

        def RESOURCE(self):
            return self.getToken(PlSqlParser.RESOURCE, 0)

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def TRANSLATION(self):
            return self.getToken(PlSqlParser.TRANSLATION, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_grant_object_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGrant_object_name" ):
                listener.enterGrant_object_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGrant_object_name" ):
                listener.exitGrant_object_name(self)




    def grant_object_name(self):

        localctx = PlSqlParser.Grant_object_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2316, self.RULE_grant_object_name)
        self._la = 0 # Token type
        try:
            self.state = 19495
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2743,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 19471
                self.tableview_name()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 19472
                self.match(PlSqlParser.USER)
                self.state = 19473
                self.user_object_name()
                self.state = 19478
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 19474
                    self.match(PlSqlParser.COMMA)
                    self.state = 19475
                    self.user_object_name()
                    self.state = 19480
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 19481
                self.match(PlSqlParser.DIRECTORY)
                self.state = 19482
                self.dir_object_name()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 19483
                self.match(PlSqlParser.EDITION)
                self.state = 19484
                self.schema_object_name()
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 19485
                self.match(PlSqlParser.MINING)
                self.state = 19486
                self.match(PlSqlParser.MODEL)
                self.state = 19487
                self.schema_object_name()
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 19488
                self.match(PlSqlParser.JAVA)
                self.state = 19489
                _la = self._input.LA(1)
                if not(_la==1492 or _la==1630):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19490
                self.schema_object_name()
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 19491
                self.match(PlSqlParser.SQL)
                self.state = 19492
                self.match(PlSqlParser.TRANSLATION)
                self.state = 19493
                self.match(PlSqlParser.PROFILE)
                self.state = 19494
                self.schema_object_name()
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Column_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def column_name(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_nameContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_nameContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_column_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterColumn_list" ):
                listener.enterColumn_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitColumn_list" ):
                listener.exitColumn_list(self)




    def column_list(self):

        localctx = PlSqlParser.Column_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2318, self.RULE_column_list)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19497
            self.column_name()
            self.state = 19502
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2353:
                self.state = 19498
                self.match(PlSqlParser.COMMA)
                self.state = 19499
                self.column_name()
                self.state = 19504
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Paren_column_listContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_list(self):
            return self.getTypedRuleContext(PlSqlParser.Column_listContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_paren_column_list

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterParen_column_list" ):
                listener.enterParen_column_list(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitParen_column_list" ):
                listener.exitParen_column_list(self)




    def paren_column_list(self):

        localctx = PlSqlParser.Paren_column_listContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2320, self.RULE_paren_column_list)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19505
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19506
            self.column_list()
            self.state = 19507
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Keep_clauseContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def DENSE_RANK(self):
            return self.getToken(PlSqlParser.DENSE_RANK, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def LAST(self):
            return self.getToken(PlSqlParser.LAST, 0)

        def query_partition_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Query_partition_clauseContext,0)


        def order_by_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Order_by_clauseContext,0)


        def over_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Over_clauseContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_keep_clause

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterKeep_clause" ):
                listener.enterKeep_clause(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitKeep_clause" ):
                listener.exitKeep_clause(self)




    def keep_clause(self):

        localctx = PlSqlParser.Keep_clauseContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2322, self.RULE_keep_clause)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19509
            self.match(PlSqlParser.KEEP)
            self.state = 19510
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19511
            self.match(PlSqlParser.DENSE_RANK)
            self.state = 19512
            _la = self._input.LA(1)
            if not(_la==559 or _la==779):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 19515
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1275]:
                self.state = 19513
                self.query_partition_clause()
                pass
            elif token in [1233]:
                self.state = 19514
                self.order_by_clause()
                pass
            else:
                raise NoViableAltException(self)

            self.state = 19517
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 19519
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2746,self._ctx)
            if la_ == 1:
                self.state = 19518
                self.over_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_argumentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def argument(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ArgumentContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ArgumentContext,i)


        def keep_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Keep_clauseContext,0)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_function_argument

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_argument" ):
                listener.enterFunction_argument(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_argument" ):
                listener.exitFunction_argument(self)




    def function_argument(self):

        localctx = PlSqlParser.Function_argumentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2324, self.RULE_function_argument)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19521
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19530
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                self.state = 19522
                self.argument()
                self.state = 19527
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 19523
                    self.match(PlSqlParser.COMMA)
                    self.state = 19524
                    self.argument()
                    self.state = 19529
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 19532
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 19534
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2749,self._ctx)
            if la_ == 1:
                self.state = 19533
                self.keep_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_argument_analyticContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def argument(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ArgumentContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ArgumentContext,i)


        def keep_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Keep_clauseContext,0)


        def respect_or_ignore_nulls(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Respect_or_ignore_nullsContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Respect_or_ignore_nullsContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_function_argument_analytic

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_argument_analytic" ):
                listener.enterFunction_argument_analytic(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_argument_analytic" ):
                listener.exitFunction_argument_analytic(self)




    def function_argument_analytic(self):

        localctx = PlSqlParser.Function_argument_analyticContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2326, self.RULE_function_argument_analytic)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19536
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19551
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if (((_la) & ~0x3f) == 0 and ((1 << _la) & -567347999932418) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225369) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -131073) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613690351747201) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556986883) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -1) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & -87960930484225) != 0) or ((((_la - 2304)) & ~0x3f) == 0 and ((1 << (_la - 2304)) & 6953990972111847423) != 0) or ((((_la - 2372)) & ~0x3f) == 0 and ((1 << (_la - 2372)) & 193) != 0):
                self.state = 19537
                self.argument()
                self.state = 19539
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==651 or _la==1493:
                    self.state = 19538
                    self.respect_or_ignore_nulls()


                self.state = 19548
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 19541
                    self.match(PlSqlParser.COMMA)
                    self.state = 19542
                    self.argument()
                    self.state = 19544
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==651 or _la==1493:
                        self.state = 19543
                        self.respect_or_ignore_nulls()


                    self.state = 19550
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)



            self.state = 19553
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 19555
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2754,self._ctx)
            if la_ == 1:
                self.state = 19554
                self.keep_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Function_argument_modelingContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def column_name(self):
            return self.getTypedRuleContext(PlSqlParser.Column_nameContext,0)


        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def tableview_name(self):
            return self.getTypedRuleContext(PlSqlParser.Tableview_nameContext,0)


        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def COMMA(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COMMA)
            else:
                return self.getToken(PlSqlParser.COMMA, i)

        def keep_clause(self):
            return self.getTypedRuleContext(PlSqlParser.Keep_clauseContext,0)


        def numeric(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.NumericContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.NumericContext,i)


        def NULL_(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.NULL_)
            else:
                return self.getToken(PlSqlParser.NULL_, i)

        def column_alias(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Column_aliasContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Column_aliasContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_function_argument_modeling

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterFunction_argument_modeling" ):
                listener.enterFunction_argument_modeling(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitFunction_argument_modeling" ):
                listener.exitFunction_argument_modeling(self)




    def function_argument_modeling(self):

        localctx = PlSqlParser.Function_argument_modelingContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2328, self.RULE_function_argument_modeling)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19557
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19558
            self.column_name()
            self.state = 19571
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2353:
                self.state = 19559
                self.match(PlSqlParser.COMMA)
                self.state = 19562
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2341, 2342]:
                    self.state = 19560
                    self.numeric()
                    pass
                elif token in [1162]:
                    self.state = 19561
                    self.match(PlSqlParser.NULL_)
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 19569
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2353:
                    self.state = 19564
                    self.match(PlSqlParser.COMMA)
                    self.state = 19567
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2341, 2342]:
                        self.state = 19565
                        self.numeric()
                        pass
                    elif token in [1162]:
                        self.state = 19566
                        self.match(PlSqlParser.NULL_)
                        pass
                    else:
                        raise NoViableAltException(self)





            self.state = 19573
            self.match(PlSqlParser.USING)
            self.state = 19593
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2762,self._ctx)
            if la_ == 1:
                self.state = 19574
                self.tableview_name()
                self.state = 19575
                self.match(PlSqlParser.PERIOD)
                self.state = 19576
                self.match(PlSqlParser.ASTERISK)
                pass

            elif la_ == 2:
                self.state = 19578
                self.match(PlSqlParser.ASTERISK)
                pass

            elif la_ == 3:
                self.state = 19579
                self.expression()
                self.state = 19581
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                    self.state = 19580
                    self.column_alias()


                self.state = 19590
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                while _la==2353:
                    self.state = 19583
                    self.match(PlSqlParser.COMMA)
                    self.state = 19584
                    self.expression()
                    self.state = 19586
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if (((_la) & ~0x3f) == 0 and ((1 << _la) & -18582021387321346) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -2252074759225361) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -4647715365269274625) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & -18014398509481985) != 0) or ((((_la - 256)) & ~0x3f) == 0 and ((1 << (_la - 256)) & -562949953421825) != 0) or ((((_la - 320)) & ~0x3f) == 0 and ((1 << (_la - 320)) & -281474993618945) != 0) or ((((_la - 384)) & ~0x3f) == 0 and ((1 << (_la - 384)) & -594613698941681793) != 0) or ((((_la - 448)) & ~0x3f) == 0 and ((1 << (_la - 448)) & -72057594071494657) != 0) or ((((_la - 512)) & ~0x3f) == 0 and ((1 << (_la - 512)) & -1) != 0) or ((((_la - 576)) & ~0x3f) == 0 and ((1 << (_la - 576)) & -72127974593269777) != 0) or ((((_la - 640)) & ~0x3f) == 0 and ((1 << (_la - 640)) & -72057628397666321) != 0) or ((((_la - 704)) & ~0x3f) == 0 and ((1 << (_la - 704)) & -71135396353) != 0) or ((((_la - 768)) & ~0x3f) == 0 and ((1 << (_la - 768)) & -2305845208236949505) != 0) or ((((_la - 832)) & ~0x3f) == 0 and ((1 << (_la - 832)) & -1) != 0) or ((((_la - 896)) & ~0x3f) == 0 and ((1 << (_la - 896)) & -36028797153181761) != 0) or ((((_la - 960)) & ~0x3f) == 0 and ((1 << (_la - 960)) & -144115188075855873) != 0) or ((((_la - 1024)) & ~0x3f) == 0 and ((1 << (_la - 1024)) & -1) != 0) or ((((_la - 1088)) & ~0x3f) == 0 and ((1 << (_la - 1088)) & -1125899906842625) != 0) or ((((_la - 1152)) & ~0x3f) == 0 and ((1 << (_la - 1152)) & -18017147556987907) != 0) or ((((_la - 1216)) & ~0x3f) == 0 and ((1 << (_la - 1216)) & -70368746405889) != 0) or ((((_la - 1280)) & ~0x3f) == 0 and ((1 << (_la - 1280)) & -4402236686337) != 0) or ((((_la - 1344)) & ~0x3f) == 0 and ((1 << (_la - 1344)) & -34359738369) != 0) or ((((_la - 1408)) & ~0x3f) == 0 and ((1 << (_la - 1408)) & -1) != 0) or ((((_la - 1472)) & ~0x3f) == 0 and ((1 << (_la - 1472)) & -549756862469) != 0) or ((((_la - 1536)) & ~0x3f) == 0 and ((1 << (_la - 1536)) & -4611686027017322497) != 0) or ((((_la - 1600)) & ~0x3f) == 0 and ((1 << (_la - 1600)) & -18015498021240833) != 0) or ((((_la - 1664)) & ~0x3f) == 0 and ((1 << (_la - 1664)) & -281474976710657) != 0) or ((((_la - 1728)) & ~0x3f) == 0 and ((1 << (_la - 1728)) & -1) != 0) or ((((_la - 1792)) & ~0x3f) == 0 and ((1 << (_la - 1792)) & -1) != 0) or ((((_la - 1856)) & ~0x3f) == 0 and ((1 << (_la - 1856)) & -1) != 0) or ((((_la - 1920)) & ~0x3f) == 0 and ((1 << (_la - 1920)) & -1) != 0) or ((((_la - 1984)) & ~0x3f) == 0 and ((1 << (_la - 1984)) & -1) != 0) or ((((_la - 2048)) & ~0x3f) == 0 and ((1 << (_la - 2048)) & -13194139533329) != 0) or ((((_la - 2112)) & ~0x3f) == 0 and ((1 << (_la - 2112)) & -4503599627370501) != 0) or ((((_la - 2176)) & ~0x3f) == 0 and ((1 << (_la - 2176)) & -576465219606298625) != 0) or ((((_la - 2240)) & ~0x3f) == 0 and ((1 << (_la - 2240)) & 6917441066710597631) != 0) or ((((_la - 2305)) & ~0x3f) == 0 and ((1 << (_la - 2305)) & 863288426495) != 0) or _la==2372 or _la==2378:
                        self.state = 19585
                        self.column_alias()


                    self.state = 19592
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)

                pass


            self.state = 19595
            self.match(PlSqlParser.RIGHT_PAREN)
            self.state = 19597
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2763,self._ctx)
            if la_ == 1:
                self.state = 19596
                self.keep_clause()


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Respect_or_ignore_nullsContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def NULLS(self):
            return self.getToken(PlSqlParser.NULLS, 0)

        def RESPECT(self):
            return self.getToken(PlSqlParser.RESPECT, 0)

        def IGNORE(self):
            return self.getToken(PlSqlParser.IGNORE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_respect_or_ignore_nulls

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRespect_or_ignore_nulls" ):
                listener.enterRespect_or_ignore_nulls(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRespect_or_ignore_nulls" ):
                listener.exitRespect_or_ignore_nulls(self)




    def respect_or_ignore_nulls(self):

        localctx = PlSqlParser.Respect_or_ignore_nullsContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2330, self.RULE_respect_or_ignore_nulls)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19599
            _la = self._input.LA(1)
            if not(_la==651 or _la==1493):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
            self.state = 19600
            self.match(PlSqlParser.NULLS)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ArgumentContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def expression(self):
            return self.getTypedRuleContext(PlSqlParser.ExpressionContext,0)


        def identifier(self):
            return self.getTypedRuleContext(PlSqlParser.IdentifierContext,0)


        def EQUALS_OP(self):
            return self.getToken(PlSqlParser.EQUALS_OP, 0)

        def GREATER_THAN_OP(self):
            return self.getToken(PlSqlParser.GREATER_THAN_OP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_argument

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterArgument" ):
                listener.enterArgument(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitArgument" ):
                listener.exitArgument(self)




    def argument(self):

        localctx = PlSqlParser.ArgumentContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2332, self.RULE_argument)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19606
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2764,self._ctx)
            if la_ == 1:
                self.state = 19602
                self.identifier()
                self.state = 19603
                self.match(PlSqlParser.EQUALS_OP)
                self.state = 19604
                self.match(PlSqlParser.GREATER_THAN_OP)


            self.state = 19608
            self.expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Type_specContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def datatype(self):
            return self.getTypedRuleContext(PlSqlParser.DatatypeContext,0)


        def type_name(self):
            return self.getTypedRuleContext(PlSqlParser.Type_nameContext,0)


        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def PERCENT_ROWTYPE(self):
            return self.getToken(PlSqlParser.PERCENT_ROWTYPE, 0)

        def PERCENT_TYPE(self):
            return self.getToken(PlSqlParser.PERCENT_TYPE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_type_spec

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterType_spec" ):
                listener.enterType_spec(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitType_spec" ):
                listener.exitType_spec(self)




    def type_spec(self):

        localctx = PlSqlParser.Type_specContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2334, self.RULE_type_spec)
        self._la = 0 # Token type
        try:
            self.state = 19618
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2767,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 19610
                self.datatype()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 19612
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2765,self._ctx)
                if la_ == 1:
                    self.state = 19611
                    self.match(PlSqlParser.REF)


                self.state = 19614
                self.type_name()
                self.state = 19616
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1308 or _la==1309:
                    self.state = 19615
                    _la = self._input.LA(1)
                    if not(_la==1308 or _la==1309):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class DatatypeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def native_datatype_element(self):
            return self.getTypedRuleContext(PlSqlParser.Native_datatype_elementContext,0)


        def precision_part(self):
            return self.getTypedRuleContext(PlSqlParser.Precision_partContext,0)


        def WITH(self):
            return self.getToken(PlSqlParser.WITH, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def ZONE(self):
            return self.getToken(PlSqlParser.ZONE, 0)

        def CHARACTER(self):
            return self.getToken(PlSqlParser.CHARACTER, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def char_set_name(self):
            return self.getTypedRuleContext(PlSqlParser.Char_set_nameContext,0)


        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def INTERVAL(self):
            return self.getToken(PlSqlParser.INTERVAL, 0)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def DAY(self):
            return self.getToken(PlSqlParser.DAY, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def SECOND(self):
            return self.getToken(PlSqlParser.SECOND, 0)

        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.ExpressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.ExpressionContext,i)


        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_datatype

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterDatatype" ):
                listener.enterDatatype(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitDatatype" ):
                listener.exitDatatype(self)




    def datatype(self):

        localctx = PlSqlParser.DatatypeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2336, self.RULE_datatype)
        self._la = 0 # Token type
        try:
            self.state = 19651
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [116, 120, 123, 126, 136, 142, 185, 186, 205, 344, 346, 359, 360, 434, 440, 567, 638, 726, 734, 841, 904, 912, 931, 950, 951, 954, 956, 1164, 1165, 1169, 1330, 1345, 1346, 1423, 1432, 1523, 1558, 1610, 1611, 1623, 1683, 2019, 2020, 2021, 2022, 2026, 2027, 2028, 2030, 2121, 2166, 2167, 2253, 2260, 2262]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19620
                self.native_datatype_element()
                self.state = 19622
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2768,self._ctx)
                if la_ == 1:
                    self.state = 19621
                    self.precision_part()


                self.state = 19633
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2770,self._ctx)
                if la_ == 1:
                    self.state = 19624
                    self.match(PlSqlParser.WITH)
                    self.state = 19626
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==821:
                        self.state = 19625
                        self.match(PlSqlParser.LOCAL)


                    self.state = 19628
                    self.match(PlSqlParser.TIME)
                    self.state = 19629
                    self.match(PlSqlParser.ZONE)

                elif la_ == 2:
                    self.state = 19630
                    self.match(PlSqlParser.CHARACTER)
                    self.state = 19631
                    self.match(PlSqlParser.SET)
                    self.state = 19632
                    self.char_set_name()


                pass
            elif token in [733]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19635
                self.match(PlSqlParser.INTERVAL)
                self.state = 19636
                _la = self._input.LA(1)
                if not(_la==346 or _la==2260):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19641
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==2347:
                    self.state = 19637
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 19638
                    self.expression()
                    self.state = 19639
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 19643
                self.match(PlSqlParser.TO)
                self.state = 19644
                _la = self._input.LA(1)
                if not(_la==931 or _la==1558):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19649
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2772,self._ctx)
                if la_ == 1:
                    self.state = 19645
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 19646
                    self.expression()
                    self.state = 19647
                    self.match(PlSqlParser.RIGHT_PAREN)


                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Precision_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def numeric(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.NumericContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.NumericContext,i)


        def ASTERISK(self):
            return self.getToken(PlSqlParser.ASTERISK, 0)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def BYTE(self):
            return self.getToken(PlSqlParser.BYTE, 0)

        def numeric_negative(self):
            return self.getTypedRuleContext(PlSqlParser.Numeric_negativeContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_precision_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterPrecision_part" ):
                listener.enterPrecision_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitPrecision_part" ):
                listener.exitPrecision_part(self)




    def precision_part(self):

        localctx = PlSqlParser.Precision_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2338, self.RULE_precision_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19653
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 19656
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2341, 2342]:
                self.state = 19654
                self.numeric()
                pass
            elif token in [2350]:
                self.state = 19655
                self.match(PlSqlParser.ASTERISK)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 19663
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2353:
                self.state = 19658
                self.match(PlSqlParser.COMMA)
                self.state = 19661
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2341, 2342]:
                    self.state = 19659
                    self.numeric()
                    pass
                elif token in [2352]:
                    self.state = 19660
                    self.numeric_negative()
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 19666
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==157 or _la==186:
                self.state = 19665
                _la = self._input.LA(1)
                if not(_la==157 or _la==186):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()


            self.state = 19668
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Native_datatype_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BINARY_INTEGER(self):
            return self.getToken(PlSqlParser.BINARY_INTEGER, 0)

        def PLS_INTEGER(self):
            return self.getToken(PlSqlParser.PLS_INTEGER, 0)

        def NATURAL(self):
            return self.getToken(PlSqlParser.NATURAL, 0)

        def BINARY_FLOAT(self):
            return self.getToken(PlSqlParser.BINARY_FLOAT, 0)

        def BINARY_DOUBLE(self):
            return self.getToken(PlSqlParser.BINARY_DOUBLE, 0)

        def NATURALN(self):
            return self.getToken(PlSqlParser.NATURALN, 0)

        def POSITIVE(self):
            return self.getToken(PlSqlParser.POSITIVE, 0)

        def POSITIVEN(self):
            return self.getToken(PlSqlParser.POSITIVEN, 0)

        def SIGNTYPE(self):
            return self.getToken(PlSqlParser.SIGNTYPE, 0)

        def SIMPLE_INTEGER(self):
            return self.getToken(PlSqlParser.SIMPLE_INTEGER, 0)

        def NVARCHAR2(self):
            return self.getToken(PlSqlParser.NVARCHAR2, 0)

        def DEC(self):
            return self.getToken(PlSqlParser.DEC, 0)

        def INTEGER(self):
            return self.getToken(PlSqlParser.INTEGER, 0)

        def INT(self):
            return self.getToken(PlSqlParser.INT, 0)

        def NUMERIC(self):
            return self.getToken(PlSqlParser.NUMERIC, 0)

        def SMALLINT(self):
            return self.getToken(PlSqlParser.SMALLINT, 0)

        def NUMBER(self):
            return self.getToken(PlSqlParser.NUMBER, 0)

        def DECIMAL(self):
            return self.getToken(PlSqlParser.DECIMAL, 0)

        def DOUBLE(self):
            return self.getToken(PlSqlParser.DOUBLE, 0)

        def PRECISION(self):
            return self.getToken(PlSqlParser.PRECISION, 0)

        def FLOAT(self):
            return self.getToken(PlSqlParser.FLOAT, 0)

        def REAL(self):
            return self.getToken(PlSqlParser.REAL, 0)

        def NCHAR(self):
            return self.getToken(PlSqlParser.NCHAR, 0)

        def LONG(self):
            return self.getToken(PlSqlParser.LONG, 0)

        def RAW(self):
            return self.getToken(PlSqlParser.RAW, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def CHARACTER(self):
            return self.getToken(PlSqlParser.CHARACTER, 0)

        def VARCHAR2(self):
            return self.getToken(PlSqlParser.VARCHAR2, 0)

        def VARCHAR(self):
            return self.getToken(PlSqlParser.VARCHAR, 0)

        def STRING(self):
            return self.getToken(PlSqlParser.STRING, 0)

        def BOOLEAN(self):
            return self.getToken(PlSqlParser.BOOLEAN, 0)

        def DATE(self):
            return self.getToken(PlSqlParser.DATE, 0)

        def ROWID(self):
            return self.getToken(PlSqlParser.ROWID, 0)

        def UROWID(self):
            return self.getToken(PlSqlParser.UROWID, 0)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def DAY(self):
            return self.getToken(PlSqlParser.DAY, 0)

        def HOUR(self):
            return self.getToken(PlSqlParser.HOUR, 0)

        def MINUTE(self):
            return self.getToken(PlSqlParser.MINUTE, 0)

        def SECOND(self):
            return self.getToken(PlSqlParser.SECOND, 0)

        def TIMEZONE_HOUR(self):
            return self.getToken(PlSqlParser.TIMEZONE_HOUR, 0)

        def TIMEZONE_MINUTE(self):
            return self.getToken(PlSqlParser.TIMEZONE_MINUTE, 0)

        def TIMEZONE_REGION(self):
            return self.getToken(PlSqlParser.TIMEZONE_REGION, 0)

        def TIMEZONE_ABBR(self):
            return self.getToken(PlSqlParser.TIMEZONE_ABBR, 0)

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def TIMESTAMP_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.TIMESTAMP_UNCONSTRAINED, 0)

        def TIMESTAMP_TZ_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.TIMESTAMP_TZ_UNCONSTRAINED, 0)

        def TIMESTAMP_LTZ_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.TIMESTAMP_LTZ_UNCONSTRAINED, 0)

        def YMINTERVAL_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.YMINTERVAL_UNCONSTRAINED, 0)

        def DSINTERVAL_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.DSINTERVAL_UNCONSTRAINED, 0)

        def BFILE(self):
            return self.getToken(PlSqlParser.BFILE, 0)

        def BLOB(self):
            return self.getToken(PlSqlParser.BLOB, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def NCLOB(self):
            return self.getToken(PlSqlParser.NCLOB, 0)

        def MLSLABEL(self):
            return self.getToken(PlSqlParser.MLSLABEL, 0)

        def XMLTYPE(self):
            return self.getToken(PlSqlParser.XMLTYPE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_native_datatype_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNative_datatype_element" ):
                listener.enterNative_datatype_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNative_datatype_element" ):
                listener.exitNative_datatype_element(self)




    def native_datatype_element(self):

        localctx = PlSqlParser.Native_datatype_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2340, self.RULE_native_datatype_element)
        self._la = 0 # Token type
        try:
            self.state = 19731
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [126]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19670
                self.match(PlSqlParser.BINARY_INTEGER)
                pass
            elif token in [1330]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19671
                self.match(PlSqlParser.PLS_INTEGER)
                pass
            elif token in [950]:
                self.enterOuterAlt(localctx, 3)
                self.state = 19672
                self.match(PlSqlParser.NATURAL)
                pass
            elif token in [123]:
                self.enterOuterAlt(localctx, 4)
                self.state = 19673
                self.match(PlSqlParser.BINARY_FLOAT)
                pass
            elif token in [120]:
                self.enterOuterAlt(localctx, 5)
                self.state = 19674
                self.match(PlSqlParser.BINARY_DOUBLE)
                pass
            elif token in [951]:
                self.enterOuterAlt(localctx, 6)
                self.state = 19675
                self.match(PlSqlParser.NATURALN)
                pass
            elif token in [1346]:
                self.enterOuterAlt(localctx, 7)
                self.state = 19676
                self.match(PlSqlParser.POSITIVE)
                pass
            elif token in [1345]:
                self.enterOuterAlt(localctx, 8)
                self.state = 19677
                self.match(PlSqlParser.POSITIVEN)
                pass
            elif token in [1610]:
                self.enterOuterAlt(localctx, 9)
                self.state = 19678
                self.match(PlSqlParser.SIGNTYPE)
                pass
            elif token in [1611]:
                self.enterOuterAlt(localctx, 10)
                self.state = 19679
                self.match(PlSqlParser.SIMPLE_INTEGER)
                pass
            elif token in [1169]:
                self.enterOuterAlt(localctx, 11)
                self.state = 19680
                self.match(PlSqlParser.NVARCHAR2)
                pass
            elif token in [359]:
                self.enterOuterAlt(localctx, 12)
                self.state = 19681
                self.match(PlSqlParser.DEC)
                pass
            elif token in [726]:
                self.enterOuterAlt(localctx, 13)
                self.state = 19682
                self.match(PlSqlParser.INTEGER)
                pass
            elif token in [734]:
                self.enterOuterAlt(localctx, 14)
                self.state = 19683
                self.match(PlSqlParser.INT)
                pass
            elif token in [1165]:
                self.enterOuterAlt(localctx, 15)
                self.state = 19684
                self.match(PlSqlParser.NUMERIC)
                pass
            elif token in [1623]:
                self.enterOuterAlt(localctx, 16)
                self.state = 19685
                self.match(PlSqlParser.SMALLINT)
                pass
            elif token in [1164]:
                self.enterOuterAlt(localctx, 17)
                self.state = 19686
                self.match(PlSqlParser.NUMBER)
                pass
            elif token in [360]:
                self.enterOuterAlt(localctx, 18)
                self.state = 19687
                self.match(PlSqlParser.DECIMAL)
                pass
            elif token in [434]:
                self.enterOuterAlt(localctx, 19)
                self.state = 19688
                self.match(PlSqlParser.DOUBLE)
                self.state = 19690
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1363:
                    self.state = 19689
                    self.match(PlSqlParser.PRECISION)


                pass
            elif token in [567]:
                self.enterOuterAlt(localctx, 20)
                self.state = 19692
                self.match(PlSqlParser.FLOAT)
                pass
            elif token in [1432]:
                self.enterOuterAlt(localctx, 21)
                self.state = 19693
                self.match(PlSqlParser.REAL)
                pass
            elif token in [954]:
                self.enterOuterAlt(localctx, 22)
                self.state = 19694
                self.match(PlSqlParser.NCHAR)
                pass
            elif token in [841]:
                self.enterOuterAlt(localctx, 23)
                self.state = 19695
                self.match(PlSqlParser.LONG)
                self.state = 19697
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1423:
                    self.state = 19696
                    self.match(PlSqlParser.RAW)


                pass
            elif token in [186]:
                self.enterOuterAlt(localctx, 24)
                self.state = 19699
                self.match(PlSqlParser.CHAR)
                pass
            elif token in [185]:
                self.enterOuterAlt(localctx, 25)
                self.state = 19700
                self.match(PlSqlParser.CHARACTER)
                pass
            elif token in [2166]:
                self.enterOuterAlt(localctx, 26)
                self.state = 19701
                self.match(PlSqlParser.VARCHAR2)
                pass
            elif token in [2167]:
                self.enterOuterAlt(localctx, 27)
                self.state = 19702
                self.match(PlSqlParser.VARCHAR)
                pass
            elif token in [1683]:
                self.enterOuterAlt(localctx, 28)
                self.state = 19703
                self.match(PlSqlParser.STRING)
                pass
            elif token in [1423]:
                self.enterOuterAlt(localctx, 29)
                self.state = 19704
                self.match(PlSqlParser.RAW)
                pass
            elif token in [142]:
                self.enterOuterAlt(localctx, 30)
                self.state = 19705
                self.match(PlSqlParser.BOOLEAN)
                pass
            elif token in [344]:
                self.enterOuterAlt(localctx, 31)
                self.state = 19706
                self.match(PlSqlParser.DATE)
                pass
            elif token in [1523]:
                self.enterOuterAlt(localctx, 32)
                self.state = 19707
                self.match(PlSqlParser.ROWID)
                pass
            elif token in [2121]:
                self.enterOuterAlt(localctx, 33)
                self.state = 19708
                self.match(PlSqlParser.UROWID)
                pass
            elif token in [2260]:
                self.enterOuterAlt(localctx, 34)
                self.state = 19709
                self.match(PlSqlParser.YEAR)
                pass
            elif token in [931]:
                self.enterOuterAlt(localctx, 35)
                self.state = 19710
                self.match(PlSqlParser.MONTH)
                pass
            elif token in [346]:
                self.enterOuterAlt(localctx, 36)
                self.state = 19711
                self.match(PlSqlParser.DAY)
                pass
            elif token in [638]:
                self.enterOuterAlt(localctx, 37)
                self.state = 19712
                self.match(PlSqlParser.HOUR)
                pass
            elif token in [904]:
                self.enterOuterAlt(localctx, 38)
                self.state = 19713
                self.match(PlSqlParser.MINUTE)
                pass
            elif token in [1558]:
                self.enterOuterAlt(localctx, 39)
                self.state = 19714
                self.match(PlSqlParser.SECOND)
                pass
            elif token in [2027]:
                self.enterOuterAlt(localctx, 40)
                self.state = 19715
                self.match(PlSqlParser.TIMEZONE_HOUR)
                pass
            elif token in [2028]:
                self.enterOuterAlt(localctx, 41)
                self.state = 19716
                self.match(PlSqlParser.TIMEZONE_MINUTE)
                pass
            elif token in [2030]:
                self.enterOuterAlt(localctx, 42)
                self.state = 19717
                self.match(PlSqlParser.TIMEZONE_REGION)
                pass
            elif token in [2026]:
                self.enterOuterAlt(localctx, 43)
                self.state = 19718
                self.match(PlSqlParser.TIMEZONE_ABBR)
                pass
            elif token in [2020]:
                self.enterOuterAlt(localctx, 44)
                self.state = 19719
                self.match(PlSqlParser.TIMESTAMP)
                pass
            elif token in [2022]:
                self.enterOuterAlt(localctx, 45)
                self.state = 19720
                self.match(PlSqlParser.TIMESTAMP_UNCONSTRAINED)
                pass
            elif token in [2021]:
                self.enterOuterAlt(localctx, 46)
                self.state = 19721
                self.match(PlSqlParser.TIMESTAMP_TZ_UNCONSTRAINED)
                pass
            elif token in [2019]:
                self.enterOuterAlt(localctx, 47)
                self.state = 19722
                self.match(PlSqlParser.TIMESTAMP_LTZ_UNCONSTRAINED)
                pass
            elif token in [2262]:
                self.enterOuterAlt(localctx, 48)
                self.state = 19723
                self.match(PlSqlParser.YMINTERVAL_UNCONSTRAINED)
                pass
            elif token in [440]:
                self.enterOuterAlt(localctx, 49)
                self.state = 19724
                self.match(PlSqlParser.DSINTERVAL_UNCONSTRAINED)
                pass
            elif token in [116]:
                self.enterOuterAlt(localctx, 50)
                self.state = 19725
                self.match(PlSqlParser.BFILE)
                pass
            elif token in [136]:
                self.enterOuterAlt(localctx, 51)
                self.state = 19726
                self.match(PlSqlParser.BLOB)
                pass
            elif token in [205]:
                self.enterOuterAlt(localctx, 52)
                self.state = 19727
                self.match(PlSqlParser.CLOB)
                pass
            elif token in [956]:
                self.enterOuterAlt(localctx, 53)
                self.state = 19728
                self.match(PlSqlParser.NCLOB)
                pass
            elif token in [912]:
                self.enterOuterAlt(localctx, 54)
                self.state = 19729
                self.match(PlSqlParser.MLSLABEL)
                pass
            elif token in [2253]:
                self.enterOuterAlt(localctx, 55)
                self.state = 19730
                self.match(PlSqlParser.XMLTYPE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Bind_variableContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def BINDVAR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.BINDVAR)
            else:
                return self.getToken(PlSqlParser.BINDVAR, i)

        def COLON(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.COLON)
            else:
                return self.getToken(PlSqlParser.COLON, i)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def general_element_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.General_element_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.General_element_partContext,i)


        def INDICATOR(self):
            return self.getToken(PlSqlParser.INDICATOR, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_bind_variable

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterBind_variable" ):
                listener.enterBind_variable(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitBind_variable" ):
                listener.exitBind_variable(self)




    def bind_variable(self):

        localctx = PlSqlParser.Bind_variableContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2342, self.RULE_bind_variable)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19736
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2359]:
                self.state = 19733
                self.match(PlSqlParser.BINDVAR)
                pass
            elif token in [2366]:
                self.state = 19734
                self.match(PlSqlParser.COLON)
                self.state = 19735
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                pass
            else:
                raise NoViableAltException(self)

            self.state = 19746
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2784,self._ctx)
            if la_ == 1:
                self.state = 19739
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==691:
                    self.state = 19738
                    self.match(PlSqlParser.INDICATOR)


                self.state = 19744
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2359]:
                    self.state = 19741
                    self.match(PlSqlParser.BINDVAR)
                    pass
                elif token in [2366]:
                    self.state = 19742
                    self.match(PlSqlParser.COLON)
                    self.state = 19743
                    self.match(PlSqlParser.UNSIGNED_INTEGER)
                    pass
                else:
                    raise NoViableAltException(self)



            self.state = 19752
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2785,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19748
                    self.match(PlSqlParser.PERIOD)
                    self.state = 19749
                    self.general_element_part() 
                self.state = 19754
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2785,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class General_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def general_element_part(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.General_element_partContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.General_element_partContext,i)


        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def general_element(self):
            return self.getTypedRuleContext(PlSqlParser.General_elementContext,0)


        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_general_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGeneral_element" ):
                listener.enterGeneral_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGeneral_element" ):
                listener.exitGeneral_element(self)



    def general_element(self, _p:int=0):
        _parentctx = self._ctx
        _parentState = self.state
        localctx = PlSqlParser.General_elementContext(self, self._ctx, _parentState)
        _prevctx = localctx
        _startState = 2344
        self.enterRecursionRule(localctx, 2344, self.RULE_general_element, _p)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19761
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                self.state = 19756
                self.general_element_part()
                pass
            elif token in [2347]:
                self.state = 19757
                self.match(PlSqlParser.LEFT_PAREN)
                self.state = 19758
                self.general_element(0)
                self.state = 19759
                self.match(PlSqlParser.RIGHT_PAREN)
                pass
            else:
                raise NoViableAltException(self)

            self._ctx.stop = self._input.LT(-1)
            self.state = 19772
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2788,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    if self._parseListeners is not None:
                        self.triggerExitRuleEvent()
                    _prevctx = localctx
                    localctx = PlSqlParser.General_elementContext(self, _parentctx, _parentState)
                    self.pushNewRecursionContext(localctx, _startState, self.RULE_general_element)
                    self.state = 19763
                    if not self.precpred(self._ctx, 2):
                        from antlr4.error.Errors import FailedPredicateException
                        raise FailedPredicateException(self, "self.precpred(self._ctx, 2)")
                    self.state = 19766 
                    self._errHandler.sync(self)
                    _alt = 1
                    while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                        if _alt == 1:
                            self.state = 19764
                            self.match(PlSqlParser.PERIOD)
                            self.state = 19765
                            self.general_element_part()

                        else:
                            raise NoViableAltException(self)
                        self.state = 19768 
                        self._errHandler.sync(self)
                        _alt = self._interp.adaptivePredict(self._input,2787,self._ctx)
             
                self.state = 19774
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2788,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.unrollRecursionContexts(_parentctx)
        return localctx


    class General_element_partContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def INTRODUCER(self):
            return self.getToken(PlSqlParser.INTRODUCER, 0)

        def char_set_name(self):
            return self.getTypedRuleContext(PlSqlParser.Char_set_nameContext,0)


        def AT_SIGN(self):
            return self.getToken(PlSqlParser.AT_SIGN, 0)

        def link_name(self):
            return self.getTypedRuleContext(PlSqlParser.Link_nameContext,0)


        def function_argument(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Function_argumentContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Function_argumentContext,i)


        def getRuleIndex(self):
            return PlSqlParser.RULE_general_element_part

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterGeneral_element_part" ):
                listener.enterGeneral_element_part(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitGeneral_element_part" ):
                listener.exitGeneral_element_part(self)




    def general_element_part(self):

        localctx = PlSqlParser.General_element_partContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2346, self.RULE_general_element_part)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19777
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2372:
                self.state = 19775
                self.match(PlSqlParser.INTRODUCER)
                self.state = 19776
                self.char_set_name()


            self.state = 19779
            self.id_expression()
            self.state = 19782
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2790,self._ctx)
            if la_ == 1:
                self.state = 19780
                self.match(PlSqlParser.AT_SIGN)
                self.state = 19781
                self.link_name()


            self.state = 19787
            self._errHandler.sync(self)
            _alt = self._interp.adaptivePredict(self._input,2791,self._ctx)
            while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER:
                if _alt==1:
                    self.state = 19784
                    self.function_argument() 
                self.state = 19789
                self._errHandler.sync(self)
                _alt = self._interp.adaptivePredict(self._input,2791,self._ctx)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Table_elementContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Id_expressionContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,i)


        def INTRODUCER(self):
            return self.getToken(PlSqlParser.INTRODUCER, 0)

        def char_set_name(self):
            return self.getTypedRuleContext(PlSqlParser.Char_set_nameContext,0)


        def PERIOD(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.PERIOD)
            else:
                return self.getToken(PlSqlParser.PERIOD, i)

        def getRuleIndex(self):
            return PlSqlParser.RULE_table_element

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterTable_element" ):
                listener.enterTable_element(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitTable_element" ):
                listener.exitTable_element(self)




    def table_element(self):

        localctx = PlSqlParser.Table_elementContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2348, self.RULE_table_element)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 19792
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2372:
                self.state = 19790
                self.match(PlSqlParser.INTRODUCER)
                self.state = 19791
                self.char_set_name()


            self.state = 19794
            self.id_expression()
            self.state = 19799
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            while _la==2340:
                self.state = 19795
                self.match(PlSqlParser.PERIOD)
                self.state = 19796
                self.id_expression()
                self.state = 19801
                self._errHandler.sync(self)
                _la = self._input.LA(1)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Object_privilegeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def PRIVILEGES(self):
            return self.getToken(PlSqlParser.PRIVILEGES, 0)

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def INHERIT(self):
            return self.getToken(PlSqlParser.INHERIT, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def REFRESH(self):
            return self.getToken(PlSqlParser.REFRESH, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def REWRITE(self):
            return self.getToken(PlSqlParser.REWRITE, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def SELECT(self):
            return self.getToken(PlSqlParser.SELECT, 0)

        def TRANSLATE(self):
            return self.getToken(PlSqlParser.TRANSLATE, 0)

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def UNDER(self):
            return self.getToken(PlSqlParser.UNDER, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def USE(self):
            return self.getToken(PlSqlParser.USE, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_object_privilege

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterObject_privilege" ):
                listener.enterObject_privilege(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitObject_privilege" ):
                listener.exitObject_privilege(self)




    def object_privilege(self):

        localctx = PlSqlParser.Object_privilegeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2350, self.RULE_object_privilege)
        try:
            self.state = 19834
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [38]:
                self.enterOuterAlt(localctx, 1)
                self.state = 19802
                self.match(PlSqlParser.ALL)
                self.state = 19804
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2794,self._ctx)
                if la_ == 1:
                    self.state = 19803
                    self.match(PlSqlParser.PRIVILEGES)


                pass
            elif token in [42]:
                self.enterOuterAlt(localctx, 2)
                self.state = 19806
                self.match(PlSqlParser.ALTER)
                pass
            elif token in [357]:
                self.enterOuterAlt(localctx, 3)
                self.state = 19807
                self.match(PlSqlParser.DEBUG)
                pass
            elif token in [381]:
                self.enterOuterAlt(localctx, 4)
                self.state = 19808
                self.match(PlSqlParser.DELETE)
                pass
            elif token in [505]:
                self.enterOuterAlt(localctx, 5)
                self.state = 19809
                self.match(PlSqlParser.EXECUTE)
                pass
            elif token in [565]:
                self.enterOuterAlt(localctx, 6)
                self.state = 19810
                self.match(PlSqlParser.FLASHBACK)
                self.state = 19811
                self.match(PlSqlParser.ARCHIVE)
                pass
            elif token in [675]:
                self.enterOuterAlt(localctx, 7)
                self.state = 19812
                self.match(PlSqlParser.INDEX)
                pass
            elif token in [695]:
                self.enterOuterAlt(localctx, 8)
                self.state = 19813
                self.match(PlSqlParser.INHERIT)
                self.state = 19814
                self.match(PlSqlParser.PRIVILEGES)
                pass
            elif token in [713]:
                self.enterOuterAlt(localctx, 9)
                self.state = 19815
                self.match(PlSqlParser.INSERT)
                pass
            elif token in [768]:
                self.enterOuterAlt(localctx, 10)
                self.state = 19816
                self.match(PlSqlParser.KEEP)
                self.state = 19817
                self.match(PlSqlParser.SEQUENCE)
                pass
            elif token in [892]:
                self.enterOuterAlt(localctx, 11)
                self.state = 19818
                self.match(PlSqlParser.MERGE)
                self.state = 19819
                self.match(PlSqlParser.VIEW)
                pass
            elif token in [1193]:
                self.enterOuterAlt(localctx, 12)
                self.state = 19820
                self.match(PlSqlParser.ON)
                self.state = 19821
                self.match(PlSqlParser.COMMIT)
                self.state = 19822
                self.match(PlSqlParser.REFRESH)
                pass
            elif token in [1409]:
                self.enterOuterAlt(localctx, 13)
                self.state = 19823
                self.match(PlSqlParser.QUERY)
                self.state = 19824
                self.match(PlSqlParser.REWRITE)
                pass
            elif token in [1429]:
                self.enterOuterAlt(localctx, 14)
                self.state = 19825
                self.match(PlSqlParser.READ)
                pass
            elif token in [1450]:
                self.enterOuterAlt(localctx, 15)
                self.state = 19826
                self.match(PlSqlParser.REFERENCES)
                pass
            elif token in [1569]:
                self.enterOuterAlt(localctx, 16)
                self.state = 19827
                self.match(PlSqlParser.SELECT)
                pass
            elif token in [2063]:
                self.enterOuterAlt(localctx, 17)
                self.state = 19828
                self.match(PlSqlParser.TRANSLATE)
                self.state = 19829
                self.match(PlSqlParser.SQL)
                pass
            elif token in [2086]:
                self.enterOuterAlt(localctx, 18)
                self.state = 19830
                self.match(PlSqlParser.UNDER)
                pass
            elif token in [2114]:
                self.enterOuterAlt(localctx, 19)
                self.state = 19831
                self.match(PlSqlParser.UPDATE)
                pass
            elif token in [2148]:
                self.enterOuterAlt(localctx, 20)
                self.state = 19832
                self.match(PlSqlParser.USE)
                pass
            elif token in [2216]:
                self.enterOuterAlt(localctx, 21)
                self.state = 19833
                self.match(PlSqlParser.WRITE)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class System_privilegeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ALL(self):
            return self.getToken(PlSqlParser.ALL, 0)

        def PRIVILEGES(self):
            return self.getToken(PlSqlParser.PRIVILEGES, 0)

        def ADVISOR(self):
            return self.getToken(PlSqlParser.ADVISOR, 0)

        def ADMINISTER(self):
            return self.getToken(PlSqlParser.ADMINISTER, 0)

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def TUNING(self):
            return self.getToken(PlSqlParser.TUNING, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def ANY(self):
            return self.getToken(PlSqlParser.ANY, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def ALTER(self):
            return self.getToken(PlSqlParser.ALTER, 0)

        def CREATE(self):
            return self.getToken(PlSqlParser.CREATE, 0)

        def DROP(self):
            return self.getToken(PlSqlParser.DROP, 0)

        def MANAGEMENT(self):
            return self.getToken(PlSqlParser.MANAGEMENT, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def EXEMPT(self):
            return self.getToken(PlSqlParser.EXEMPT, 0)

        def REDACTION(self):
            return self.getToken(PlSqlParser.REDACTION, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def CONNECT(self):
            return self.getToken(PlSqlParser.CONNECT, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def ANALYZE(self):
            return self.getToken(PlSqlParser.ANALYZE, 0)

        def DICTIONARY(self):
            return self.getToken(PlSqlParser.DICTIONARY, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def INDEX(self):
            return self.getToken(PlSqlParser.INDEX, 0)

        def INDEXTYPE(self):
            return self.getToken(PlSqlParser.INDEXTYPE, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def JOB(self):
            return self.getToken(PlSqlParser.JOB, 0)

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def CLASS(self):
            return self.getToken(PlSqlParser.CLASS, 0)

        def PROGRAM(self):
            return self.getToken(PlSqlParser.PROGRAM, 0)

        def MANAGE(self):
            return self.getToken(PlSqlParser.MANAGE, 0)

        def SCHEDULER(self):
            return self.getToken(PlSqlParser.SCHEDULER, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def LOGMINING(self):
            return self.getToken(PlSqlParser.LOGMINING, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def VIEW(self):
            return self.getToken(PlSqlParser.VIEW, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def REWRITE(self):
            return self.getToken(PlSqlParser.REWRITE, 0)

        def GLOBAL(self):
            return self.getToken(PlSqlParser.GLOBAL, 0)

        def ON(self):
            return self.getToken(PlSqlParser.ON, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def REFRESH(self):
            return self.getToken(PlSqlParser.REFRESH, 0)

        def MINING(self):
            return self.getToken(PlSqlParser.MINING, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def SELECT(self):
            return self.getToken(PlSqlParser.SELECT, 0)

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def CUBE(self):
            return self.getToken(PlSqlParser.CUBE, 0)

        def UPDATE(self):
            return self.getToken(PlSqlParser.UPDATE, 0)

        def MEASURE(self):
            return self.getToken(PlSqlParser.MEASURE, 0)

        def FOLDER(self):
            return self.getToken(PlSqlParser.FOLDER, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def INSERT(self):
            return self.getToken(PlSqlParser.INSERT, 0)

        def BUILD(self):
            return self.getToken(PlSqlParser.BUILD, 0)

        def PROCESS(self):
            return self.getToken(PlSqlParser.PROCESS, 0)

        def OPERATOR(self):
            return self.getToken(PlSqlParser.OPERATOR, 0)

        def OUTLINE(self):
            return self.getToken(PlSqlParser.OUTLINE, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def CONTAINER(self):
            return self.getToken(PlSqlParser.CONTAINER, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def GRANT(self):
            return self.getToken(PlSqlParser.GRANT, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def RESTRICTED(self):
            return self.getToken(PlSqlParser.RESTRICTED, 0)

        def RESOURCE(self):
            return self.getToken(PlSqlParser.RESOURCE, 0)

        def COST(self):
            return self.getToken(PlSqlParser.COST, 0)

        def TRANSLATION(self):
            return self.getToken(PlSqlParser.TRANSLATION, 0)

        def USE(self):
            return self.getToken(PlSqlParser.USE, 0)

        def TRANSLATE(self):
            return self.getToken(PlSqlParser.TRANSLATE, 0)

        def SYNONYM(self):
            return self.getToken(PlSqlParser.SYNONYM, 0)

        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def LOCK(self):
            return self.getToken(PlSqlParser.LOCK, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def UNDER(self):
            return self.getToken(PlSqlParser.UNDER, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def AUDIT(self):
            return self.getToken(PlSqlParser.AUDIT, 0)

        def BECOME(self):
            return self.getToken(PlSqlParser.BECOME, 0)

        def CHANGE(self):
            return self.getToken(PlSqlParser.CHANGE, 0)

        def NOTIFICATION(self):
            return self.getToken(PlSqlParser.NOTIFICATION, 0)

        def ACCESS(self):
            return self.getToken(PlSqlParser.ACCESS, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def TRANSACTION(self):
            return self.getToken(PlSqlParser.TRANSACTION, 0)

        def PRIVILEGE(self):
            return self.getToken(PlSqlParser.PRIVILEGE, 0)

        def INHERIT(self):
            return self.getToken(PlSqlParser.INHERIT, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def DATE(self):
            return self.getToken(PlSqlParser.DATE, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def SYSGUID(self):
            return self.getToken(PlSqlParser.SYSGUID, 0)

        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def DBA_RECYCLEBIN(self):
            return self.getToken(PlSqlParser.DBA_RECYCLEBIN, 0)

        def RESUMABLE(self):
            return self.getToken(PlSqlParser.RESUMABLE, 0)

        def SYSBACKUP(self):
            return self.getToken(PlSqlParser.SYSBACKUP, 0)

        def SYSDBA(self):
            return self.getToken(PlSqlParser.SYSDBA, 0)

        def SYSDG(self):
            return self.getToken(PlSqlParser.SYSDG, 0)

        def SYSKM(self):
            return self.getToken(PlSqlParser.SYSKM, 0)

        def SYSOPER(self):
            return self.getToken(PlSqlParser.SYSOPER, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_system_privilege

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterSystem_privilege" ):
                listener.enterSystem_privilege(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitSystem_privilege" ):
                listener.exitSystem_privilege(self)




    def system_privilege(self):

        localctx = PlSqlParser.System_privilegeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2352, self.RULE_system_privilege)
        self._la = 0 # Token type
        try:
            self.state = 20162
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2822,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 19836
                self.match(PlSqlParser.ALL)
                self.state = 19837
                self.match(PlSqlParser.PRIVILEGES)
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 19838
                self.match(PlSqlParser.ADVISOR)
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 19839
                self.match(PlSqlParser.ADMINISTER)
                self.state = 19841
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19840
                    self.match(PlSqlParser.ANY)


                self.state = 19843
                self.match(PlSqlParser.SQL)
                self.state = 19844
                self.match(PlSqlParser.TUNING)
                self.state = 19845
                self.match(PlSqlParser.SET)
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 19846
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19847
                self.match(PlSqlParser.ANY)
                self.state = 19848
                self.match(PlSqlParser.SQL)
                self.state = 19849
                self.match(PlSqlParser.PROFILE)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 19850
                self.match(PlSqlParser.ADMINISTER)
                self.state = 19851
                self.match(PlSqlParser.SQL)
                self.state = 19852
                self.match(PlSqlParser.MANAGEMENT)
                self.state = 19853
                self.match(PlSqlParser.OBJECT)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 19854
                self.match(PlSqlParser.CREATE)
                self.state = 19856
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19855
                    self.match(PlSqlParser.ANY)


                self.state = 19858
                self.match(PlSqlParser.CLUSTER)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 19859
                _la = self._input.LA(1)
                if not(_la==42 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19860
                self.match(PlSqlParser.ANY)
                self.state = 19861
                self.match(PlSqlParser.CLUSTER)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 19862
                _la = self._input.LA(1)
                if not(_la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19863
                self.match(PlSqlParser.ANY)
                self.state = 19864
                self.match(PlSqlParser.CONTEXT)
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 19865
                self.match(PlSqlParser.EXEMPT)
                self.state = 19866
                self.match(PlSqlParser.REDACTION)
                self.state = 19867
                self.match(PlSqlParser.POLICY)
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 19868
                self.match(PlSqlParser.ALTER)
                self.state = 19869
                self.match(PlSqlParser.DATABASE)
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 19870
                _la = self._input.LA(1)
                if not(_la==42 or _la==305):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19872
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1398:
                    self.state = 19871
                    self.match(PlSqlParser.PUBLIC)


                self.state = 19874
                self.match(PlSqlParser.DATABASE)
                self.state = 19875
                self.match(PlSqlParser.LINK)
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 19876
                self.match(PlSqlParser.DROP)
                self.state = 19877
                self.match(PlSqlParser.PUBLIC)
                self.state = 19878
                self.match(PlSqlParser.DATABASE)
                self.state = 19879
                self.match(PlSqlParser.LINK)
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 19880
                self.match(PlSqlParser.DEBUG)
                self.state = 19881
                self.match(PlSqlParser.CONNECT)
                self.state = 19882
                self.match(PlSqlParser.SESSION)
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 19883
                self.match(PlSqlParser.DEBUG)
                self.state = 19884
                self.match(PlSqlParser.ANY)
                self.state = 19885
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 19886
                self.match(PlSqlParser.ANALYZE)
                self.state = 19887
                self.match(PlSqlParser.ANY)
                self.state = 19888
                self.match(PlSqlParser.DICTIONARY)
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 19889
                self.match(PlSqlParser.CREATE)
                self.state = 19891
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19890
                    self.match(PlSqlParser.ANY)


                self.state = 19893
                self.match(PlSqlParser.DIMENSION)
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 19894
                _la = self._input.LA(1)
                if not(_la==42 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19895
                self.match(PlSqlParser.ANY)
                self.state = 19896
                self.match(PlSqlParser.DIMENSION)
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 19897
                _la = self._input.LA(1)
                if not(_la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19898
                self.match(PlSqlParser.ANY)
                self.state = 19899
                self.match(PlSqlParser.DIRECTORY)
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 19900
                _la = self._input.LA(1)
                if not(_la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19901
                self.match(PlSqlParser.ANY)
                self.state = 19902
                self.match(PlSqlParser.EDITION)
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 19903
                self.match(PlSqlParser.FLASHBACK)
                self.state = 19908
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [63]:
                    self.state = 19904
                    self.match(PlSqlParser.ARCHIVE)
                    self.state = 19905
                    self.match(PlSqlParser.ADMINISTER)
                    pass
                elif token in [54]:
                    self.state = 19906
                    self.match(PlSqlParser.ANY)
                    self.state = 19907
                    self.match(PlSqlParser.TABLE)
                    pass
                else:
                    raise NoViableAltException(self)

                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 19910
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19911
                self.match(PlSqlParser.ANY)
                self.state = 19912
                self.match(PlSqlParser.INDEX)
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 19913
                self.match(PlSqlParser.CREATE)
                self.state = 19915
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19914
                    self.match(PlSqlParser.ANY)


                self.state = 19917
                self.match(PlSqlParser.INDEXTYPE)
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 19918
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==505):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19919
                self.match(PlSqlParser.ANY)
                self.state = 19920
                self.match(PlSqlParser.INDEXTYPE)
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 19921
                self.match(PlSqlParser.CREATE)
                self.state = 19923
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54 or _la==523:
                    self.state = 19922
                    _la = self._input.LA(1)
                    if not(_la==54 or _la==523):
                        self._errHandler.recoverInline(self)
                    else:
                        self._errHandler.reportMatch(self)
                        self.consume()


                self.state = 19925
                self.match(PlSqlParser.JOB)
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 19926
                self.match(PlSqlParser.EXECUTE)
                self.state = 19927
                self.match(PlSqlParser.ANY)
                self.state = 19928
                _la = self._input.LA(1)
                if not(_la==196 or _la==1389):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 19929
                self.match(PlSqlParser.MANAGE)
                self.state = 19930
                self.match(PlSqlParser.SCHEDULER)
                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 19931
                self.match(PlSqlParser.ADMINISTER)
                self.state = 19932
                self.match(PlSqlParser.KEY)
                self.state = 19933
                self.match(PlSqlParser.MANAGEMENT)
                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 19934
                self.match(PlSqlParser.CREATE)
                self.state = 19936
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19935
                    self.match(PlSqlParser.ANY)


                self.state = 19938
                self.match(PlSqlParser.LIBRARY)
                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 19939
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==505):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19940
                self.match(PlSqlParser.ANY)
                self.state = 19941
                self.match(PlSqlParser.LIBRARY)
                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 19942
                self.match(PlSqlParser.LOGMINING)
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 19943
                self.match(PlSqlParser.CREATE)
                self.state = 19945
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19944
                    self.match(PlSqlParser.ANY)


                self.state = 19947
                self.match(PlSqlParser.MATERIALIZED)
                self.state = 19948
                self.match(PlSqlParser.VIEW)
                pass

            elif la_ == 32:
                self.enterOuterAlt(localctx, 32)
                self.state = 19949
                _la = self._input.LA(1)
                if not(_la==42 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19950
                self.match(PlSqlParser.ANY)
                self.state = 19951
                self.match(PlSqlParser.MATERIALIZED)
                self.state = 19952
                self.match(PlSqlParser.VIEW)
                pass

            elif la_ == 33:
                self.enterOuterAlt(localctx, 33)
                self.state = 19954
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==602:
                    self.state = 19953
                    self.match(PlSqlParser.GLOBAL)


                self.state = 19956
                self.match(PlSqlParser.QUERY)
                self.state = 19957
                self.match(PlSqlParser.REWRITE)
                pass

            elif la_ == 34:
                self.enterOuterAlt(localctx, 34)
                self.state = 19958
                self.match(PlSqlParser.ON)
                self.state = 19959
                self.match(PlSqlParser.COMMIT)
                self.state = 19960
                self.match(PlSqlParser.REFRESH)
                pass

            elif la_ == 35:
                self.enterOuterAlt(localctx, 35)
                self.state = 19961
                self.match(PlSqlParser.CREATE)
                self.state = 19963
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19962
                    self.match(PlSqlParser.ANY)


                self.state = 19965
                self.match(PlSqlParser.MINING)
                self.state = 19966
                self.match(PlSqlParser.MODEL)
                pass

            elif la_ == 36:
                self.enterOuterAlt(localctx, 36)
                self.state = 19967
                _la = self._input.LA(1)
                if not(_la==42 or _la==230 or _la==438 or _la==1569):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19968
                self.match(PlSqlParser.ANY)
                self.state = 19969
                self.match(PlSqlParser.MINING)
                self.state = 19970
                self.match(PlSqlParser.MODEL)
                pass

            elif la_ == 37:
                self.enterOuterAlt(localctx, 37)
                self.state = 19971
                self.match(PlSqlParser.CREATE)
                self.state = 19973
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19972
                    self.match(PlSqlParser.ANY)


                self.state = 19975
                self.match(PlSqlParser.CUBE)
                pass

            elif la_ == 38:
                self.enterOuterAlt(localctx, 38)
                self.state = 19976
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==1569 or _la==2114):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19977
                self.match(PlSqlParser.ANY)
                self.state = 19978
                self.match(PlSqlParser.CUBE)
                pass

            elif la_ == 39:
                self.enterOuterAlt(localctx, 39)
                self.state = 19979
                self.match(PlSqlParser.CREATE)
                self.state = 19981
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19980
                    self.match(PlSqlParser.ANY)


                self.state = 19983
                self.match(PlSqlParser.MEASURE)
                self.state = 19984
                self.match(PlSqlParser.FOLDER)
                pass

            elif la_ == 40:
                self.enterOuterAlt(localctx, 40)
                self.state = 19985
                _la = self._input.LA(1)
                if not(_la==381 or _la==438 or _la==713):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19986
                self.match(PlSqlParser.ANY)
                self.state = 19987
                self.match(PlSqlParser.MEASURE)
                self.state = 19988
                self.match(PlSqlParser.FOLDER)
                pass

            elif la_ == 41:
                self.enterOuterAlt(localctx, 41)
                self.state = 19989
                self.match(PlSqlParser.CREATE)
                self.state = 19991
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 19990
                    self.match(PlSqlParser.ANY)


                self.state = 19993
                self.match(PlSqlParser.CUBE)
                self.state = 19994
                self.match(PlSqlParser.DIMENSION)
                pass

            elif la_ == 42:
                self.enterOuterAlt(localctx, 42)
                self.state = 19995
                _la = self._input.LA(1)
                if not(_la==42 or _la==381 or _la==438 or _la==713 or _la==1569 or _la==2114):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 19996
                self.match(PlSqlParser.ANY)
                self.state = 19997
                self.match(PlSqlParser.CUBE)
                self.state = 19998
                self.match(PlSqlParser.DIMENSION)
                pass

            elif la_ == 43:
                self.enterOuterAlt(localctx, 43)
                self.state = 19999
                self.match(PlSqlParser.CREATE)
                self.state = 20001
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20000
                    self.match(PlSqlParser.ANY)


                self.state = 20003
                self.match(PlSqlParser.CUBE)
                self.state = 20004
                self.match(PlSqlParser.BUILD)
                self.state = 20005
                self.match(PlSqlParser.PROCESS)
                pass

            elif la_ == 44:
                self.enterOuterAlt(localctx, 44)
                self.state = 20006
                _la = self._input.LA(1)
                if not(_la==438 or _la==2114):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20007
                self.match(PlSqlParser.ANY)
                self.state = 20008
                self.match(PlSqlParser.CUBE)
                self.state = 20009
                self.match(PlSqlParser.BUILD)
                self.state = 20010
                self.match(PlSqlParser.PROCESS)
                pass

            elif la_ == 45:
                self.enterOuterAlt(localctx, 45)
                self.state = 20011
                self.match(PlSqlParser.CREATE)
                self.state = 20013
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20012
                    self.match(PlSqlParser.ANY)


                self.state = 20015
                self.match(PlSqlParser.OPERATOR)
                pass

            elif la_ == 46:
                self.enterOuterAlt(localctx, 46)
                self.state = 20016
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==505):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20017
                self.match(PlSqlParser.ANY)
                self.state = 20018
                self.match(PlSqlParser.OPERATOR)
                pass

            elif la_ == 47:
                self.enterOuterAlt(localctx, 47)
                self.state = 20019
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20020
                self.match(PlSqlParser.ANY)
                self.state = 20021
                self.match(PlSqlParser.OUTLINE)
                pass

            elif la_ == 48:
                self.enterOuterAlt(localctx, 48)
                self.state = 20022
                self.match(PlSqlParser.CREATE)
                self.state = 20023
                self.match(PlSqlParser.PLUGGABLE)
                self.state = 20024
                self.match(PlSqlParser.DATABASE)
                pass

            elif la_ == 49:
                self.enterOuterAlt(localctx, 49)
                self.state = 20025
                self.match(PlSqlParser.SET)
                self.state = 20026
                self.match(PlSqlParser.CONTAINER)
                pass

            elif la_ == 50:
                self.enterOuterAlt(localctx, 50)
                self.state = 20027
                self.match(PlSqlParser.CREATE)
                self.state = 20029
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20028
                    self.match(PlSqlParser.ANY)


                self.state = 20031
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 51:
                self.enterOuterAlt(localctx, 51)
                self.state = 20032
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==505):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20033
                self.match(PlSqlParser.ANY)
                self.state = 20034
                self.match(PlSqlParser.PROCEDURE)
                pass

            elif la_ == 52:
                self.enterOuterAlt(localctx, 52)
                self.state = 20035
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20036
                self.match(PlSqlParser.PROFILE)
                pass

            elif la_ == 53:
                self.enterOuterAlt(localctx, 53)
                self.state = 20037
                self.match(PlSqlParser.CREATE)
                self.state = 20038
                self.match(PlSqlParser.ROLE)
                pass

            elif la_ == 54:
                self.enterOuterAlt(localctx, 54)
                self.state = 20039
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==607):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20040
                self.match(PlSqlParser.ANY)
                self.state = 20041
                self.match(PlSqlParser.ROLE)
                pass

            elif la_ == 55:
                self.enterOuterAlt(localctx, 55)
                self.state = 20042
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20043
                self.match(PlSqlParser.ROLLBACK)
                self.state = 20044
                self.match(PlSqlParser.SEGMENT)
                pass

            elif la_ == 56:
                self.enterOuterAlt(localctx, 56)
                self.state = 20045
                self.match(PlSqlParser.CREATE)
                self.state = 20047
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20046
                    self.match(PlSqlParser.ANY)


                self.state = 20049
                self.match(PlSqlParser.SEQUENCE)
                pass

            elif la_ == 57:
                self.enterOuterAlt(localctx, 57)
                self.state = 20050
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==1569):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20051
                self.match(PlSqlParser.ANY)
                self.state = 20052
                self.match(PlSqlParser.SEQUENCE)
                pass

            elif la_ == 58:
                self.enterOuterAlt(localctx, 58)
                self.state = 20053
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==1498):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20054
                self.match(PlSqlParser.SESSION)
                pass

            elif la_ == 59:
                self.enterOuterAlt(localctx, 59)
                self.state = 20055
                self.match(PlSqlParser.ALTER)
                self.state = 20056
                self.match(PlSqlParser.RESOURCE)
                self.state = 20057
                self.match(PlSqlParser.COST)
                pass

            elif la_ == 60:
                self.enterOuterAlt(localctx, 60)
                self.state = 20058
                self.match(PlSqlParser.CREATE)
                self.state = 20060
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20059
                    self.match(PlSqlParser.ANY)


                self.state = 20062
                self.match(PlSqlParser.SQL)
                self.state = 20063
                self.match(PlSqlParser.TRANSLATION)
                self.state = 20064
                self.match(PlSqlParser.PROFILE)
                pass

            elif la_ == 61:
                self.enterOuterAlt(localctx, 61)
                self.state = 20065
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==2148):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20066
                self.match(PlSqlParser.ANY)
                self.state = 20067
                self.match(PlSqlParser.SQL)
                self.state = 20068
                self.match(PlSqlParser.TRANSLATION)
                self.state = 20069
                self.match(PlSqlParser.PROFILE)
                pass

            elif la_ == 62:
                self.enterOuterAlt(localctx, 62)
                self.state = 20070
                self.match(PlSqlParser.TRANSLATE)
                self.state = 20071
                self.match(PlSqlParser.ANY)
                self.state = 20072
                self.match(PlSqlParser.SQL)
                pass

            elif la_ == 63:
                self.enterOuterAlt(localctx, 63)
                self.state = 20073
                self.match(PlSqlParser.CREATE)
                self.state = 20075
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20074
                    self.match(PlSqlParser.ANY)


                self.state = 20077
                self.match(PlSqlParser.SYNONYM)
                pass

            elif la_ == 64:
                self.enterOuterAlt(localctx, 64)
                self.state = 20078
                self.match(PlSqlParser.DROP)
                self.state = 20079
                self.match(PlSqlParser.ANY)
                self.state = 20080
                self.match(PlSqlParser.SYNONYM)
                pass

            elif la_ == 65:
                self.enterOuterAlt(localctx, 65)
                self.state = 20081
                _la = self._input.LA(1)
                if not(_la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20082
                self.match(PlSqlParser.PUBLIC)
                self.state = 20083
                self.match(PlSqlParser.SYNONYM)
                pass

            elif la_ == 66:
                self.enterOuterAlt(localctx, 66)
                self.state = 20084
                self.match(PlSqlParser.CREATE)
                self.state = 20086
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20085
                    self.match(PlSqlParser.ANY)


                self.state = 20088
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 67:
                self.enterOuterAlt(localctx, 67)
                self.state = 20089
                _la = self._input.LA(1)
                if not(_la==42 or _la==100 or _la==230 or _la==381 or _la==438 or _la==713 or _la==829 or _la==1429 or _la==1569 or _la==2114):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20090
                self.match(PlSqlParser.ANY)
                self.state = 20091
                self.match(PlSqlParser.TABLE)
                pass

            elif la_ == 68:
                self.enterOuterAlt(localctx, 68)
                self.state = 20092
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438 or _la==852 or _la==2093):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20093
                self.match(PlSqlParser.TABLESPACE)
                pass

            elif la_ == 69:
                self.enterOuterAlt(localctx, 69)
                self.state = 20094
                self.match(PlSqlParser.CREATE)
                self.state = 20096
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20095
                    self.match(PlSqlParser.ANY)


                self.state = 20098
                self.match(PlSqlParser.TRIGGER)
                pass

            elif la_ == 70:
                self.enterOuterAlt(localctx, 70)
                self.state = 20099
                _la = self._input.LA(1)
                if not(_la==42 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20100
                self.match(PlSqlParser.ANY)
                self.state = 20101
                self.match(PlSqlParser.TRIGGER)
                pass

            elif la_ == 71:
                self.enterOuterAlt(localctx, 71)
                self.state = 20102
                self.match(PlSqlParser.ADMINISTER)
                self.state = 20103
                self.match(PlSqlParser.DATABASE)
                self.state = 20104
                self.match(PlSqlParser.TRIGGER)
                pass

            elif la_ == 72:
                self.enterOuterAlt(localctx, 72)
                self.state = 20105
                self.match(PlSqlParser.CREATE)
                self.state = 20107
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20106
                    self.match(PlSqlParser.ANY)


                self.state = 20109
                self.match(PlSqlParser.TYPE)
                pass

            elif la_ == 73:
                self.enterOuterAlt(localctx, 73)
                self.state = 20110
                _la = self._input.LA(1)
                if not(_la==42 or _la==438 or _la==505 or _la==2086):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20111
                self.match(PlSqlParser.ANY)
                self.state = 20112
                self.match(PlSqlParser.TYPE)
                pass

            elif la_ == 74:
                self.enterOuterAlt(localctx, 74)
                self.state = 20113
                _la = self._input.LA(1)
                if not(_la==42 or _la==305 or _la==438):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20114
                self.match(PlSqlParser.USER)
                pass

            elif la_ == 75:
                self.enterOuterAlt(localctx, 75)
                self.state = 20115
                self.match(PlSqlParser.CREATE)
                self.state = 20117
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20116
                    self.match(PlSqlParser.ANY)


                self.state = 20119
                self.match(PlSqlParser.VIEW)
                pass

            elif la_ == 76:
                self.enterOuterAlt(localctx, 76)
                self.state = 20120
                _la = self._input.LA(1)
                if not(_la==438 or _la==892 or _la==2086):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20121
                self.match(PlSqlParser.ANY)
                self.state = 20122
                self.match(PlSqlParser.VIEW)
                pass

            elif la_ == 77:
                self.enterOuterAlt(localctx, 77)
                self.state = 20123
                _la = self._input.LA(1)
                if not(_la==46 or _la==83):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20124
                self.match(PlSqlParser.ANY)
                pass

            elif la_ == 78:
                self.enterOuterAlt(localctx, 78)
                self.state = 20125
                self.match(PlSqlParser.BECOME)
                self.state = 20126
                self.match(PlSqlParser.USER)
                pass

            elif la_ == 79:
                self.enterOuterAlt(localctx, 79)
                self.state = 20127
                self.match(PlSqlParser.CHANGE)
                self.state = 20128
                self.match(PlSqlParser.NOTIFICATION)
                pass

            elif la_ == 80:
                self.enterOuterAlt(localctx, 80)
                self.state = 20129
                self.match(PlSqlParser.EXEMPT)
                self.state = 20130
                self.match(PlSqlParser.ACCESS)
                self.state = 20131
                self.match(PlSqlParser.POLICY)
                pass

            elif la_ == 81:
                self.enterOuterAlt(localctx, 81)
                self.state = 20132
                self.match(PlSqlParser.FORCE)
                self.state = 20134
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==54:
                    self.state = 20133
                    self.match(PlSqlParser.ANY)


                self.state = 20136
                self.match(PlSqlParser.TRANSACTION)
                pass

            elif la_ == 82:
                self.enterOuterAlt(localctx, 82)
                self.state = 20137
                self.match(PlSqlParser.GRANT)
                self.state = 20138
                self.match(PlSqlParser.ANY)
                self.state = 20140
                self._errHandler.sync(self)
                _la = self._input.LA(1)
                if _la==1172:
                    self.state = 20139
                    self.match(PlSqlParser.OBJECT)


                self.state = 20142
                self.match(PlSqlParser.PRIVILEGE)
                pass

            elif la_ == 83:
                self.enterOuterAlt(localctx, 83)
                self.state = 20143
                self.match(PlSqlParser.INHERIT)
                self.state = 20144
                self.match(PlSqlParser.ANY)
                self.state = 20145
                self.match(PlSqlParser.PRIVILEGES)
                pass

            elif la_ == 84:
                self.enterOuterAlt(localctx, 84)
                self.state = 20146
                self.match(PlSqlParser.KEEP)
                self.state = 20147
                self.match(PlSqlParser.DATE)
                self.state = 20148
                self.match(PlSqlParser.TIME)
                pass

            elif la_ == 85:
                self.enterOuterAlt(localctx, 85)
                self.state = 20149
                self.match(PlSqlParser.KEEP)
                self.state = 20150
                self.match(PlSqlParser.SYSGUID)
                pass

            elif la_ == 86:
                self.enterOuterAlt(localctx, 86)
                self.state = 20151
                self.match(PlSqlParser.PURGE)
                self.state = 20152
                self.match(PlSqlParser.DBA_RECYCLEBIN)
                pass

            elif la_ == 87:
                self.enterOuterAlt(localctx, 87)
                self.state = 20153
                self.match(PlSqlParser.RESUMABLE)
                pass

            elif la_ == 88:
                self.enterOuterAlt(localctx, 88)
                self.state = 20154
                self.match(PlSqlParser.SELECT)
                self.state = 20155
                self.match(PlSqlParser.ANY)
                self.state = 20156
                _la = self._input.LA(1)
                if not(_la==397 or _la==2058):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                pass

            elif la_ == 89:
                self.enterOuterAlt(localctx, 89)
                self.state = 20157
                self.match(PlSqlParser.SYSBACKUP)
                pass

            elif la_ == 90:
                self.enterOuterAlt(localctx, 90)
                self.state = 20158
                self.match(PlSqlParser.SYSDBA)
                pass

            elif la_ == 91:
                self.enterOuterAlt(localctx, 91)
                self.state = 20159
                self.match(PlSqlParser.SYSDG)
                pass

            elif la_ == 92:
                self.enterOuterAlt(localctx, 92)
                self.state = 20160
                self.match(PlSqlParser.SYSKM)
                pass

            elif la_ == 93:
                self.enterOuterAlt(localctx, 93)
                self.state = 20161
                self.match(PlSqlParser.SYSOPER)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class ConstantContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def quoted_string(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Quoted_stringContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Quoted_stringContext,i)


        def bind_variable(self, i:int=None):
            if i is None:
                return self.getTypedRuleContexts(PlSqlParser.Bind_variableContext)
            else:
                return self.getTypedRuleContext(PlSqlParser.Bind_variableContext,i)


        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def ZONE(self):
            return self.getToken(PlSqlParser.ZONE, 0)

        def INTERVAL(self):
            return self.getToken(PlSqlParser.INTERVAL, 0)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def DAY(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.DAY)
            else:
                return self.getToken(PlSqlParser.DAY, i)

        def HOUR(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.HOUR)
            else:
                return self.getToken(PlSqlParser.HOUR, i)

        def MINUTE(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.MINUTE)
            else:
                return self.getToken(PlSqlParser.MINUTE, i)

        def SECOND(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.SECOND)
            else:
                return self.getToken(PlSqlParser.SECOND, i)

        def general_element_part(self):
            return self.getTypedRuleContext(PlSqlParser.General_element_partContext,0)


        def LEFT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.LEFT_PAREN)
            else:
                return self.getToken(PlSqlParser.LEFT_PAREN, i)

        def RIGHT_PAREN(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.RIGHT_PAREN)
            else:
                return self.getToken(PlSqlParser.RIGHT_PAREN, i)

        def TO(self):
            return self.getToken(PlSqlParser.TO, 0)

        def UNSIGNED_INTEGER(self, i:int=None):
            if i is None:
                return self.getTokens(PlSqlParser.UNSIGNED_INTEGER)
            else:
                return self.getToken(PlSqlParser.UNSIGNED_INTEGER, i)

        def COMMA(self):
            return self.getToken(PlSqlParser.COMMA, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def DATE(self):
            return self.getToken(PlSqlParser.DATE, 0)

        def NULL_(self):
            return self.getToken(PlSqlParser.NULL_, 0)

        def TRUE(self):
            return self.getToken(PlSqlParser.TRUE, 0)

        def FALSE(self):
            return self.getToken(PlSqlParser.FALSE, 0)

        def DBTIMEZONE(self):
            return self.getToken(PlSqlParser.DBTIMEZONE, 0)

        def SESSIONTIMEZONE(self):
            return self.getToken(PlSqlParser.SESSIONTIMEZONE, 0)

        def MINVALUE(self):
            return self.getToken(PlSqlParser.MINVALUE, 0)

        def MAXVALUE(self):
            return self.getToken(PlSqlParser.MAXVALUE, 0)

        def DEFAULT(self):
            return self.getToken(PlSqlParser.DEFAULT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_constant

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterConstant" ):
                listener.enterConstant(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitConstant" ):
                listener.exitConstant(self)




    def constant(self):

        localctx = PlSqlParser.ConstantContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2354, self.RULE_constant)
        self._la = 0 # Token type
        try:
            self.state = 20226
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2020]:
                self.enterOuterAlt(localctx, 1)
                self.state = 20164
                self.match(PlSqlParser.TIMESTAMP)
                self.state = 20167
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2336, 2343]:
                    self.state = 20165
                    self.quoted_string()
                    pass
                elif token in [2359, 2366]:
                    self.state = 20166
                    self.bind_variable()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 20173
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2824,self._ctx)
                if la_ == 1:
                    self.state = 20169
                    self.match(PlSqlParser.AT)
                    self.state = 20170
                    self.match(PlSqlParser.TIME)
                    self.state = 20171
                    self.match(PlSqlParser.ZONE)
                    self.state = 20172
                    self.quoted_string()


                pass
            elif token in [733]:
                self.enterOuterAlt(localctx, 2)
                self.state = 20175
                self.match(PlSqlParser.INTERVAL)
                self.state = 20179
                self._errHandler.sync(self)
                token = self._input.LA(1)
                if token in [2336, 2343]:
                    self.state = 20176
                    self.quoted_string()
                    pass
                elif token in [2359, 2366]:
                    self.state = 20177
                    self.bind_variable()
                    pass
                elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2344, 2372, 2378]:
                    self.state = 20178
                    self.general_element_part()
                    pass
                else:
                    raise NoViableAltException(self)

                self.state = 20181
                _la = self._input.LA(1)
                if not(_la==346 or _la==638 or _la==904 or _la==931 or _la==1558 or _la==2260):
                    self._errHandler.recoverInline(self)
                else:
                    self._errHandler.reportMatch(self)
                    self.consume()
                self.state = 20195
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2829,self._ctx)
                if la_ == 1:
                    self.state = 20182
                    self.match(PlSqlParser.LEFT_PAREN)
                    self.state = 20185
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [2341]:
                        self.state = 20183
                        self.match(PlSqlParser.UNSIGNED_INTEGER)
                        pass
                    elif token in [2359, 2366]:
                        self.state = 20184
                        self.bind_variable()
                        pass
                    else:
                        raise NoViableAltException(self)

                    self.state = 20192
                    self._errHandler.sync(self)
                    _la = self._input.LA(1)
                    if _la==2353:
                        self.state = 20187
                        self.match(PlSqlParser.COMMA)
                        self.state = 20190
                        self._errHandler.sync(self)
                        token = self._input.LA(1)
                        if token in [2341]:
                            self.state = 20188
                            self.match(PlSqlParser.UNSIGNED_INTEGER)
                            pass
                        elif token in [2359, 2366]:
                            self.state = 20189
                            self.bind_variable()
                            pass
                        else:
                            raise NoViableAltException(self)



                    self.state = 20194
                    self.match(PlSqlParser.RIGHT_PAREN)


                self.state = 20212
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2833,self._ctx)
                if la_ == 1:
                    self.state = 20197
                    self.match(PlSqlParser.TO)
                    self.state = 20210
                    self._errHandler.sync(self)
                    token = self._input.LA(1)
                    if token in [346]:
                        self.state = 20198
                        self.match(PlSqlParser.DAY)
                        pass
                    elif token in [638]:
                        self.state = 20199
                        self.match(PlSqlParser.HOUR)
                        pass
                    elif token in [904]:
                        self.state = 20200
                        self.match(PlSqlParser.MINUTE)
                        pass
                    elif token in [1558]:
                        self.state = 20201
                        self.match(PlSqlParser.SECOND)
                        self.state = 20208
                        self._errHandler.sync(self)
                        la_ = self._interp.adaptivePredict(self._input,2831,self._ctx)
                        if la_ == 1:
                            self.state = 20202
                            self.match(PlSqlParser.LEFT_PAREN)
                            self.state = 20205
                            self._errHandler.sync(self)
                            token = self._input.LA(1)
                            if token in [2341]:
                                self.state = 20203
                                self.match(PlSqlParser.UNSIGNED_INTEGER)
                                pass
                            elif token in [2359, 2366]:
                                self.state = 20204
                                self.bind_variable()
                                pass
                            else:
                                raise NoViableAltException(self)

                            self.state = 20207
                            self.match(PlSqlParser.RIGHT_PAREN)


                        pass
                    else:
                        raise NoViableAltException(self)



                pass
            elif token in [2341, 2342]:
                self.enterOuterAlt(localctx, 3)
                self.state = 20214
                self.numeric()
                pass
            elif token in [344]:
                self.enterOuterAlt(localctx, 4)
                self.state = 20215
                self.match(PlSqlParser.DATE)
                self.state = 20216
                self.quoted_string()
                pass
            elif token in [2336, 2343]:
                self.enterOuterAlt(localctx, 5)
                self.state = 20217
                self.quoted_string()
                pass
            elif token in [1162]:
                self.enterOuterAlt(localctx, 6)
                self.state = 20218
                self.match(PlSqlParser.NULL_)
                pass
            elif token in [2068]:
                self.enterOuterAlt(localctx, 7)
                self.state = 20219
                self.match(PlSqlParser.TRUE)
                pass
            elif token in [538]:
                self.enterOuterAlt(localctx, 8)
                self.state = 20220
                self.match(PlSqlParser.FALSE)
                pass
            elif token in [352]:
                self.enterOuterAlt(localctx, 9)
                self.state = 20221
                self.match(PlSqlParser.DBTIMEZONE)
                pass
            elif token in [1588]:
                self.enterOuterAlt(localctx, 10)
                self.state = 20222
                self.match(PlSqlParser.SESSIONTIMEZONE)
                pass
            elif token in [906]:
                self.enterOuterAlt(localctx, 11)
                self.state = 20223
                self.match(PlSqlParser.MINVALUE)
                pass
            elif token in [878]:
                self.enterOuterAlt(localctx, 12)
                self.state = 20224
                self.match(PlSqlParser.MAXVALUE)
                pass
            elif token in [368]:
                self.enterOuterAlt(localctx, 13)
                self.state = 20225
                self.match(PlSqlParser.DEFAULT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class NumericContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def UNSIGNED_INTEGER(self):
            return self.getToken(PlSqlParser.UNSIGNED_INTEGER, 0)

        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def APPROXIMATE_NUM_LIT(self):
            return self.getToken(PlSqlParser.APPROXIMATE_NUM_LIT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_numeric

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNumeric" ):
                listener.enterNumeric(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNumeric" ):
                listener.exitNumeric(self)




    def numeric(self):

        localctx = PlSqlParser.NumericContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2356, self.RULE_numeric)
        try:
            self.state = 20233
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [2341]:
                self.enterOuterAlt(localctx, 1)
                self.state = 20228
                self.match(PlSqlParser.UNSIGNED_INTEGER)
                self.state = 20230
                self._errHandler.sync(self)
                la_ = self._interp.adaptivePredict(self._input,2835,self._ctx)
                if la_ == 1:
                    self.state = 20229
                    self.match(PlSqlParser.PERIOD)


                pass
            elif token in [2342]:
                self.enterOuterAlt(localctx, 2)
                self.state = 20232
                self.match(PlSqlParser.APPROXIMATE_NUM_LIT)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Numeric_negativeContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def MINUS_SIGN(self):
            return self.getToken(PlSqlParser.MINUS_SIGN, 0)

        def numeric(self):
            return self.getTypedRuleContext(PlSqlParser.NumericContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_numeric_negative

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNumeric_negative" ):
                listener.enterNumeric_negative(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNumeric_negative" ):
                listener.exitNumeric_negative(self)




    def numeric_negative(self):

        localctx = PlSqlParser.Numeric_negativeContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2358, self.RULE_numeric_negative)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20235
            self.match(PlSqlParser.MINUS_SIGN)
            self.state = 20236
            self.numeric()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Quoted_stringContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHAR_STRING(self):
            return self.getToken(PlSqlParser.CHAR_STRING, 0)

        def NATIONAL_CHAR_STRING_LIT(self):
            return self.getToken(PlSqlParser.NATIONAL_CHAR_STRING_LIT, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_quoted_string

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterQuoted_string" ):
                listener.enterQuoted_string(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitQuoted_string" ):
                listener.exitQuoted_string(self)




    def quoted_string(self):

        localctx = PlSqlParser.Quoted_stringContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2360, self.RULE_quoted_string)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20238
            _la = self._input.LA(1)
            if not(_la==2336 or _la==2343):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class IdentifierContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def id_expression(self):
            return self.getTypedRuleContext(PlSqlParser.Id_expressionContext,0)


        def INTRODUCER(self):
            return self.getToken(PlSqlParser.INTRODUCER, 0)

        def char_set_name(self):
            return self.getTypedRuleContext(PlSqlParser.Char_set_nameContext,0)


        def getRuleIndex(self):
            return PlSqlParser.RULE_identifier

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterIdentifier" ):
                listener.enterIdentifier(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitIdentifier" ):
                listener.exitIdentifier(self)




    def identifier(self):

        localctx = PlSqlParser.IdentifierContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2362, self.RULE_identifier)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20242
            self._errHandler.sync(self)
            _la = self._input.LA(1)
            if _la==2372:
                self.state = 20240
                self.match(PlSqlParser.INTRODUCER)
                self.state = 20241
                self.char_set_name()


            self.state = 20244
            self.id_expression()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Id_expressionContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def regular_id(self):
            return self.getTypedRuleContext(PlSqlParser.Regular_idContext,0)


        def DELIMITED_ID(self):
            return self.getToken(PlSqlParser.DELIMITED_ID, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_id_expression

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterId_expression" ):
                listener.enterId_expression(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitId_expression" ):
                listener.exitId_expression(self)




    def id_expression(self):

        localctx = PlSqlParser.Id_expressionContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2364, self.RULE_id_expression)
        try:
            self.state = 20248
            self._errHandler.sync(self)
            token = self._input.LA(1)
            if token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 338, 339, 340, 341, 342, 343, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 415, 416, 418, 419, 420, 421, 422, 423, 424, 431, 432, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 608, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 623, 624, 625, 626, 627, 628, 629, 630, 631, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 733, 734, 736, 737, 738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1192, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1234, 1235, 1236, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1298, 1299, 1300, 1301, 1305, 1306, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2206, 2207, 2208, 2209, 2210, 2211, 2213, 2214, 2215, 2216, 2217, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2236, 2237, 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2285, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2302, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2340, 2378]:
                self.enterOuterAlt(localctx, 1)
                self.state = 20246
                self.regular_id()
                pass
            elif token in [2344]:
                self.enterOuterAlt(localctx, 2)
                self.state = 20247
                self.match(PlSqlParser.DELIMITED_ID)
                pass
            else:
                raise NoViableAltException(self)

        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Inquiry_directiveContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def INQUIRY_DIRECTIVE(self):
            return self.getToken(PlSqlParser.INQUIRY_DIRECTIVE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_inquiry_directive

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterInquiry_directive" ):
                listener.enterInquiry_directive(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitInquiry_directive" ):
                listener.exitInquiry_directive(self)




    def inquiry_directive(self):

        localctx = PlSqlParser.Inquiry_directiveContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2366, self.RULE_inquiry_directive)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20250
            self.match(PlSqlParser.INQUIRY_DIRECTIVE)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Outer_join_signContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def LEFT_PAREN(self):
            return self.getToken(PlSqlParser.LEFT_PAREN, 0)

        def PLUS_SIGN(self):
            return self.getToken(PlSqlParser.PLUS_SIGN, 0)

        def RIGHT_PAREN(self):
            return self.getToken(PlSqlParser.RIGHT_PAREN, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_outer_join_sign

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterOuter_join_sign" ):
                listener.enterOuter_join_sign(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitOuter_join_sign" ):
                listener.exitOuter_join_sign(self)




    def outer_join_sign(self):

        localctx = PlSqlParser.Outer_join_signContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2368, self.RULE_outer_join_sign)
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20252
            self.match(PlSqlParser.LEFT_PAREN)
            self.state = 20253
            self.match(PlSqlParser.PLUS_SIGN)
            self.state = 20254
            self.match(PlSqlParser.RIGHT_PAREN)
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Regular_idContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def non_reserved_keywords_pre12c(self):
            return self.getTypedRuleContext(PlSqlParser.Non_reserved_keywords_pre12cContext,0)


        def non_reserved_keywords_in_12c(self):
            return self.getTypedRuleContext(PlSqlParser.Non_reserved_keywords_in_12cContext,0)


        def non_reserved_keywords_in_18c(self):
            return self.getTypedRuleContext(PlSqlParser.Non_reserved_keywords_in_18cContext,0)


        def REGULAR_ID(self):
            return self.getToken(PlSqlParser.REGULAR_ID, 0)

        def ABSENT(self):
            return self.getToken(PlSqlParser.ABSENT, 0)

        def A_LETTER(self):
            return self.getToken(PlSqlParser.A_LETTER, 0)

        def AGENT(self):
            return self.getToken(PlSqlParser.AGENT, 0)

        def AGGREGATE(self):
            return self.getToken(PlSqlParser.AGGREGATE, 0)

        def ANALYZE(self):
            return self.getToken(PlSqlParser.ANALYZE, 0)

        def AUTONOMOUS_TRANSACTION(self):
            return self.getToken(PlSqlParser.AUTONOMOUS_TRANSACTION, 0)

        def BACKINGFILE(self):
            return self.getToken(PlSqlParser.BACKINGFILE, 0)

        def BATCH(self):
            return self.getToken(PlSqlParser.BATCH, 0)

        def BINARY_INTEGER(self):
            return self.getToken(PlSqlParser.BINARY_INTEGER, 0)

        def BOOLEAN(self):
            return self.getToken(PlSqlParser.BOOLEAN, 0)

        def C_LETTER(self):
            return self.getToken(PlSqlParser.C_LETTER, 0)

        def CHAR(self):
            return self.getToken(PlSqlParser.CHAR, 0)

        def CHARSETID(self):
            return self.getToken(PlSqlParser.CHARSETID, 0)

        def CHARSETFORM(self):
            return self.getToken(PlSqlParser.CHARSETFORM, 0)

        def CLUSTER(self):
            return self.getToken(PlSqlParser.CLUSTER, 0)

        def CONSTRUCTOR(self):
            return self.getToken(PlSqlParser.CONSTRUCTOR, 0)

        def CUSTOMDATUM(self):
            return self.getToken(PlSqlParser.CUSTOMDATUM, 0)

        def CASESENSITIVE(self):
            return self.getToken(PlSqlParser.CASESENSITIVE, 0)

        def DECIMAL(self):
            return self.getToken(PlSqlParser.DECIMAL, 0)

        def DELETE(self):
            return self.getToken(PlSqlParser.DELETE, 0)

        def DEPRECATE(self):
            return self.getToken(PlSqlParser.DEPRECATE, 0)

        def DETERMINISTIC(self):
            return self.getToken(PlSqlParser.DETERMINISTIC, 0)

        def DSINTERVAL_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.DSINTERVAL_UNCONSTRAINED, 0)

        def DURATION(self):
            return self.getToken(PlSqlParser.DURATION, 0)

        def E_LETTER(self):
            return self.getToken(PlSqlParser.E_LETTER, 0)

        def ERROR_INDEX(self):
            return self.getToken(PlSqlParser.ERROR_INDEX, 0)

        def ERROR_CODE(self):
            return self.getToken(PlSqlParser.ERROR_CODE, 0)

        def ERR(self):
            return self.getToken(PlSqlParser.ERR, 0)

        def EXCEPTION(self):
            return self.getToken(PlSqlParser.EXCEPTION, 0)

        def EXCEPTION_INIT(self):
            return self.getToken(PlSqlParser.EXCEPTION_INIT, 0)

        def EXCEPTIONS(self):
            return self.getToken(PlSqlParser.EXCEPTIONS, 0)

        def EXISTS(self):
            return self.getToken(PlSqlParser.EXISTS, 0)

        def EXIT(self):
            return self.getToken(PlSqlParser.EXIT, 0)

        def EXTEND(self):
            return self.getToken(PlSqlParser.EXTEND, 0)

        def FILESTORE(self):
            return self.getToken(PlSqlParser.FILESTORE, 0)

        def FLOAT(self):
            return self.getToken(PlSqlParser.FLOAT, 0)

        def FORALL(self):
            return self.getToken(PlSqlParser.FORALL, 0)

        def G_LETTER(self):
            return self.getToken(PlSqlParser.G_LETTER, 0)

        def INDICES(self):
            return self.getToken(PlSqlParser.INDICES, 0)

        def INOUT(self):
            return self.getToken(PlSqlParser.INOUT, 0)

        def INTEGER(self):
            return self.getToken(PlSqlParser.INTEGER, 0)

        def JSON_TRANSFORM(self):
            return self.getToken(PlSqlParser.JSON_TRANSFORM, 0)

        def K_LETTER(self):
            return self.getToken(PlSqlParser.K_LETTER, 0)

        def LANGUAGE(self):
            return self.getToken(PlSqlParser.LANGUAGE, 0)

        def LONG(self):
            return self.getToken(PlSqlParser.LONG, 0)

        def LOOP(self):
            return self.getToken(PlSqlParser.LOOP, 0)

        def MAXLEN(self):
            return self.getToken(PlSqlParser.MAXLEN, 0)

        def MOUNTPOINT(self):
            return self.getToken(PlSqlParser.MOUNTPOINT, 0)

        def M_LETTER(self):
            return self.getToken(PlSqlParser.M_LETTER, 0)

        def MISSING(self):
            return self.getToken(PlSqlParser.MISSING, 0)

        def MISMATCH(self):
            return self.getToken(PlSqlParser.MISMATCH, 0)

        def NUMBER(self):
            return self.getToken(PlSqlParser.NUMBER, 0)

        def ORADATA(self):
            return self.getToken(PlSqlParser.ORADATA, 0)

        def OSERROR(self):
            return self.getToken(PlSqlParser.OSERROR, 0)

        def OUT(self):
            return self.getToken(PlSqlParser.OUT, 0)

        def OVERRIDING(self):
            return self.getToken(PlSqlParser.OVERRIDING, 0)

        def P_LETTER(self):
            return self.getToken(PlSqlParser.P_LETTER, 0)

        def PARALLEL_ENABLE(self):
            return self.getToken(PlSqlParser.PARALLEL_ENABLE, 0)

        def PIPELINED(self):
            return self.getToken(PlSqlParser.PIPELINED, 0)

        def PLS_INTEGER(self):
            return self.getToken(PlSqlParser.PLS_INTEGER, 0)

        def PMEM(self):
            return self.getToken(PlSqlParser.PMEM, 0)

        def POSITIVE(self):
            return self.getToken(PlSqlParser.POSITIVE, 0)

        def POSITIVEN(self):
            return self.getToken(PlSqlParser.POSITIVEN, 0)

        def PRAGMA(self):
            return self.getToken(PlSqlParser.PRAGMA, 0)

        def PUBLIC(self):
            return self.getToken(PlSqlParser.PUBLIC, 0)

        def RAISE(self):
            return self.getToken(PlSqlParser.RAISE, 0)

        def RAW(self):
            return self.getToken(PlSqlParser.RAW, 0)

        def RECORD(self):
            return self.getToken(PlSqlParser.RECORD, 0)

        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def RENAME(self):
            return self.getToken(PlSqlParser.RENAME, 0)

        def RESTRICT_REFERENCES(self):
            return self.getToken(PlSqlParser.RESTRICT_REFERENCES, 0)

        def RESULT(self):
            return self.getToken(PlSqlParser.RESULT, 0)

        def SDO_GEOMETRY(self):
            return self.getToken(PlSqlParser.SDO_GEOMETRY, 0)

        def SELF(self):
            return self.getToken(PlSqlParser.SELF, 0)

        def SERIALLY_REUSABLE(self):
            return self.getToken(PlSqlParser.SERIALLY_REUSABLE, 0)

        def SET(self):
            return self.getToken(PlSqlParser.SET, 0)

        def SEQ(self):
            return self.getToken(PlSqlParser.SEQ, 0)

        def SHARDSPACE(self):
            return self.getToken(PlSqlParser.SHARDSPACE, 0)

        def SIGNTYPE(self):
            return self.getToken(PlSqlParser.SIGNTYPE, 0)

        def SIMPLE_INTEGER(self):
            return self.getToken(PlSqlParser.SIMPLE_INTEGER, 0)

        def SMALLINT(self):
            return self.getToken(PlSqlParser.SMALLINT, 0)

        def STRUCT(self):
            return self.getToken(PlSqlParser.STRUCT, 0)

        def SQLDATA(self):
            return self.getToken(PlSqlParser.SQLDATA, 0)

        def SQLERROR(self):
            return self.getToken(PlSqlParser.SQLERROR, 0)

        def SUBTYPE(self):
            return self.getToken(PlSqlParser.SUBTYPE, 0)

        def T_LETTER(self):
            return self.getToken(PlSqlParser.T_LETTER, 0)

        def TDO(self):
            return self.getToken(PlSqlParser.TDO, 0)

        def TIMESTAMP_LTZ_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.TIMESTAMP_LTZ_UNCONSTRAINED, 0)

        def TIMESTAMP_TZ_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.TIMESTAMP_TZ_UNCONSTRAINED, 0)

        def TIMESTAMP_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.TIMESTAMP_UNCONSTRAINED, 0)

        def TIMEZONE(self):
            return self.getToken(PlSqlParser.TIMEZONE, 0)

        def TRIGGER(self):
            return self.getToken(PlSqlParser.TRIGGER, 0)

        def VARCHAR(self):
            return self.getToken(PlSqlParser.VARCHAR, 0)

        def VARCHAR2(self):
            return self.getToken(PlSqlParser.VARCHAR2, 0)

        def VARIABLE(self):
            return self.getToken(PlSqlParser.VARIABLE, 0)

        def WARNING(self):
            return self.getToken(PlSqlParser.WARNING, 0)

        def WHILE(self):
            return self.getToken(PlSqlParser.WHILE, 0)

        def WM_CONCAT(self):
            return self.getToken(PlSqlParser.WM_CONCAT, 0)

        def XMLAGG(self):
            return self.getToken(PlSqlParser.XMLAGG, 0)

        def YMINTERVAL_UNCONSTRAINED(self):
            return self.getToken(PlSqlParser.YMINTERVAL_UNCONSTRAINED, 0)

        def REGR_(self):
            return self.getToken(PlSqlParser.REGR_, 0)

        def VAR_(self):
            return self.getToken(PlSqlParser.VAR_, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def COVAR_(self):
            return self.getToken(PlSqlParser.COVAR_, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_regular_id

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterRegular_id" ):
                listener.enterRegular_id(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitRegular_id" ):
                listener.exitRegular_id(self)




    def regular_id(self):

        localctx = PlSqlParser.Regular_idContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2370, self.RULE_regular_id)
        try:
            self.state = 20367
            self._errHandler.sync(self)
            la_ = self._interp.adaptivePredict(self._input,2839,self._ctx)
            if la_ == 1:
                self.enterOuterAlt(localctx, 1)
                self.state = 20256
                self.non_reserved_keywords_pre12c()
                pass

            elif la_ == 2:
                self.enterOuterAlt(localctx, 2)
                self.state = 20257
                self.non_reserved_keywords_in_12c()
                pass

            elif la_ == 3:
                self.enterOuterAlt(localctx, 3)
                self.state = 20258
                self.non_reserved_keywords_in_18c()
                pass

            elif la_ == 4:
                self.enterOuterAlt(localctx, 4)
                self.state = 20259
                self.match(PlSqlParser.REGULAR_ID)
                pass

            elif la_ == 5:
                self.enterOuterAlt(localctx, 5)
                self.state = 20260
                self.match(PlSqlParser.ABSENT)
                pass

            elif la_ == 6:
                self.enterOuterAlt(localctx, 6)
                self.state = 20261
                self.match(PlSqlParser.A_LETTER)
                pass

            elif la_ == 7:
                self.enterOuterAlt(localctx, 7)
                self.state = 20262
                self.match(PlSqlParser.AGENT)
                pass

            elif la_ == 8:
                self.enterOuterAlt(localctx, 8)
                self.state = 20263
                self.match(PlSqlParser.AGGREGATE)
                pass

            elif la_ == 9:
                self.enterOuterAlt(localctx, 9)
                self.state = 20264
                self.match(PlSqlParser.ANALYZE)
                pass

            elif la_ == 10:
                self.enterOuterAlt(localctx, 10)
                self.state = 20265
                self.match(PlSqlParser.AUTONOMOUS_TRANSACTION)
                pass

            elif la_ == 11:
                self.enterOuterAlt(localctx, 11)
                self.state = 20266
                self.match(PlSqlParser.BACKINGFILE)
                pass

            elif la_ == 12:
                self.enterOuterAlt(localctx, 12)
                self.state = 20267
                self.match(PlSqlParser.BATCH)
                pass

            elif la_ == 13:
                self.enterOuterAlt(localctx, 13)
                self.state = 20268
                self.match(PlSqlParser.BINARY_INTEGER)
                pass

            elif la_ == 14:
                self.enterOuterAlt(localctx, 14)
                self.state = 20269
                self.match(PlSqlParser.BOOLEAN)
                pass

            elif la_ == 15:
                self.enterOuterAlt(localctx, 15)
                self.state = 20270
                self.match(PlSqlParser.C_LETTER)
                pass

            elif la_ == 16:
                self.enterOuterAlt(localctx, 16)
                self.state = 20271
                self.match(PlSqlParser.CHAR)
                pass

            elif la_ == 17:
                self.enterOuterAlt(localctx, 17)
                self.state = 20272
                self.match(PlSqlParser.CHARSETID)
                pass

            elif la_ == 18:
                self.enterOuterAlt(localctx, 18)
                self.state = 20273
                self.match(PlSqlParser.CHARSETFORM)
                pass

            elif la_ == 19:
                self.enterOuterAlt(localctx, 19)
                self.state = 20274
                self.match(PlSqlParser.CLUSTER)
                pass

            elif la_ == 20:
                self.enterOuterAlt(localctx, 20)
                self.state = 20275
                self.match(PlSqlParser.CONSTRUCTOR)
                pass

            elif la_ == 21:
                self.enterOuterAlt(localctx, 21)
                self.state = 20276
                self.match(PlSqlParser.CUSTOMDATUM)
                pass

            elif la_ == 22:
                self.enterOuterAlt(localctx, 22)
                self.state = 20277
                self.match(PlSqlParser.CASESENSITIVE)
                pass

            elif la_ == 23:
                self.enterOuterAlt(localctx, 23)
                self.state = 20278
                self.match(PlSqlParser.DECIMAL)
                pass

            elif la_ == 24:
                self.enterOuterAlt(localctx, 24)
                self.state = 20279
                self.match(PlSqlParser.DELETE)
                pass

            elif la_ == 25:
                self.enterOuterAlt(localctx, 25)
                self.state = 20280
                self.match(PlSqlParser.DEPRECATE)
                pass

            elif la_ == 26:
                self.enterOuterAlt(localctx, 26)
                self.state = 20281
                self.match(PlSqlParser.DETERMINISTIC)
                pass

            elif la_ == 27:
                self.enterOuterAlt(localctx, 27)
                self.state = 20282
                self.match(PlSqlParser.DSINTERVAL_UNCONSTRAINED)
                pass

            elif la_ == 28:
                self.enterOuterAlt(localctx, 28)
                self.state = 20283
                self.match(PlSqlParser.DURATION)
                pass

            elif la_ == 29:
                self.enterOuterAlt(localctx, 29)
                self.state = 20284
                self.match(PlSqlParser.E_LETTER)
                pass

            elif la_ == 30:
                self.enterOuterAlt(localctx, 30)
                self.state = 20285
                self.match(PlSqlParser.ERROR_INDEX)
                pass

            elif la_ == 31:
                self.enterOuterAlt(localctx, 31)
                self.state = 20286
                self.match(PlSqlParser.ERROR_CODE)
                pass

            elif la_ == 32:
                self.enterOuterAlt(localctx, 32)
                self.state = 20287
                self.match(PlSqlParser.E_LETTER)
                pass

            elif la_ == 33:
                self.enterOuterAlt(localctx, 33)
                self.state = 20288
                self.match(PlSqlParser.ERR)
                pass

            elif la_ == 34:
                self.enterOuterAlt(localctx, 34)
                self.state = 20289
                self.match(PlSqlParser.EXCEPTION)
                pass

            elif la_ == 35:
                self.enterOuterAlt(localctx, 35)
                self.state = 20290
                self.match(PlSqlParser.EXCEPTION_INIT)
                pass

            elif la_ == 36:
                self.enterOuterAlt(localctx, 36)
                self.state = 20291
                self.match(PlSqlParser.EXCEPTIONS)
                pass

            elif la_ == 37:
                self.enterOuterAlt(localctx, 37)
                self.state = 20292
                self.match(PlSqlParser.EXISTS)
                pass

            elif la_ == 38:
                self.enterOuterAlt(localctx, 38)
                self.state = 20293
                self.match(PlSqlParser.EXIT)
                pass

            elif la_ == 39:
                self.enterOuterAlt(localctx, 39)
                self.state = 20294
                self.match(PlSqlParser.EXTEND)
                pass

            elif la_ == 40:
                self.enterOuterAlt(localctx, 40)
                self.state = 20295
                self.match(PlSqlParser.FILESTORE)
                pass

            elif la_ == 41:
                self.enterOuterAlt(localctx, 41)
                self.state = 20296
                self.match(PlSqlParser.FLOAT)
                pass

            elif la_ == 42:
                self.enterOuterAlt(localctx, 42)
                self.state = 20297
                self.match(PlSqlParser.FORALL)
                pass

            elif la_ == 43:
                self.enterOuterAlt(localctx, 43)
                self.state = 20298
                self.match(PlSqlParser.G_LETTER)
                pass

            elif la_ == 44:
                self.enterOuterAlt(localctx, 44)
                self.state = 20299
                self.match(PlSqlParser.INDICES)
                pass

            elif la_ == 45:
                self.enterOuterAlt(localctx, 45)
                self.state = 20300
                self.match(PlSqlParser.INOUT)
                pass

            elif la_ == 46:
                self.enterOuterAlt(localctx, 46)
                self.state = 20301
                self.match(PlSqlParser.INTEGER)
                pass

            elif la_ == 47:
                self.enterOuterAlt(localctx, 47)
                self.state = 20302
                self.match(PlSqlParser.JSON_TRANSFORM)
                pass

            elif la_ == 48:
                self.enterOuterAlt(localctx, 48)
                self.state = 20303
                self.match(PlSqlParser.K_LETTER)
                pass

            elif la_ == 49:
                self.enterOuterAlt(localctx, 49)
                self.state = 20304
                self.match(PlSqlParser.LANGUAGE)
                pass

            elif la_ == 50:
                self.enterOuterAlt(localctx, 50)
                self.state = 20305
                self.match(PlSqlParser.LONG)
                pass

            elif la_ == 51:
                self.enterOuterAlt(localctx, 51)
                self.state = 20306
                self.match(PlSqlParser.LOOP)
                pass

            elif la_ == 52:
                self.enterOuterAlt(localctx, 52)
                self.state = 20307
                self.match(PlSqlParser.MAXLEN)
                pass

            elif la_ == 53:
                self.enterOuterAlt(localctx, 53)
                self.state = 20308
                self.match(PlSqlParser.MOUNTPOINT)
                pass

            elif la_ == 54:
                self.enterOuterAlt(localctx, 54)
                self.state = 20309
                self.match(PlSqlParser.M_LETTER)
                pass

            elif la_ == 55:
                self.enterOuterAlt(localctx, 55)
                self.state = 20310
                self.match(PlSqlParser.MISSING)
                pass

            elif la_ == 56:
                self.enterOuterAlt(localctx, 56)
                self.state = 20311
                self.match(PlSqlParser.MISMATCH)
                pass

            elif la_ == 57:
                self.enterOuterAlt(localctx, 57)
                self.state = 20312
                self.match(PlSqlParser.NUMBER)
                pass

            elif la_ == 58:
                self.enterOuterAlt(localctx, 58)
                self.state = 20313
                self.match(PlSqlParser.ORADATA)
                pass

            elif la_ == 59:
                self.enterOuterAlt(localctx, 59)
                self.state = 20314
                self.match(PlSqlParser.OSERROR)
                pass

            elif la_ == 60:
                self.enterOuterAlt(localctx, 60)
                self.state = 20315
                self.match(PlSqlParser.OUT)
                pass

            elif la_ == 61:
                self.enterOuterAlt(localctx, 61)
                self.state = 20316
                self.match(PlSqlParser.OVERRIDING)
                pass

            elif la_ == 62:
                self.enterOuterAlt(localctx, 62)
                self.state = 20317
                self.match(PlSqlParser.P_LETTER)
                pass

            elif la_ == 63:
                self.enterOuterAlt(localctx, 63)
                self.state = 20318
                self.match(PlSqlParser.PARALLEL_ENABLE)
                pass

            elif la_ == 64:
                self.enterOuterAlt(localctx, 64)
                self.state = 20319
                self.match(PlSqlParser.PIPELINED)
                pass

            elif la_ == 65:
                self.enterOuterAlt(localctx, 65)
                self.state = 20320
                self.match(PlSqlParser.PLS_INTEGER)
                pass

            elif la_ == 66:
                self.enterOuterAlt(localctx, 66)
                self.state = 20321
                self.match(PlSqlParser.PMEM)
                pass

            elif la_ == 67:
                self.enterOuterAlt(localctx, 67)
                self.state = 20322
                self.match(PlSqlParser.POSITIVE)
                pass

            elif la_ == 68:
                self.enterOuterAlt(localctx, 68)
                self.state = 20323
                self.match(PlSqlParser.POSITIVEN)
                pass

            elif la_ == 69:
                self.enterOuterAlt(localctx, 69)
                self.state = 20324
                self.match(PlSqlParser.PRAGMA)
                pass

            elif la_ == 70:
                self.enterOuterAlt(localctx, 70)
                self.state = 20325
                self.match(PlSqlParser.PUBLIC)
                pass

            elif la_ == 71:
                self.enterOuterAlt(localctx, 71)
                self.state = 20326
                self.match(PlSqlParser.RAISE)
                pass

            elif la_ == 72:
                self.enterOuterAlt(localctx, 72)
                self.state = 20327
                self.match(PlSqlParser.RAW)
                pass

            elif la_ == 73:
                self.enterOuterAlt(localctx, 73)
                self.state = 20328
                self.match(PlSqlParser.RECORD)
                pass

            elif la_ == 74:
                self.enterOuterAlt(localctx, 74)
                self.state = 20329
                self.match(PlSqlParser.REF)
                pass

            elif la_ == 75:
                self.enterOuterAlt(localctx, 75)
                self.state = 20330
                self.match(PlSqlParser.RENAME)
                pass

            elif la_ == 76:
                self.enterOuterAlt(localctx, 76)
                self.state = 20331
                self.match(PlSqlParser.RESTRICT_REFERENCES)
                pass

            elif la_ == 77:
                self.enterOuterAlt(localctx, 77)
                self.state = 20332
                self.match(PlSqlParser.RESULT)
                pass

            elif la_ == 78:
                self.enterOuterAlt(localctx, 78)
                self.state = 20333
                self.match(PlSqlParser.SDO_GEOMETRY)
                pass

            elif la_ == 79:
                self.enterOuterAlt(localctx, 79)
                self.state = 20334
                self.match(PlSqlParser.SELF)
                pass

            elif la_ == 80:
                self.enterOuterAlt(localctx, 80)
                self.state = 20335
                self.match(PlSqlParser.SERIALLY_REUSABLE)
                pass

            elif la_ == 81:
                self.enterOuterAlt(localctx, 81)
                self.state = 20336
                self.match(PlSqlParser.SET)
                pass

            elif la_ == 82:
                self.enterOuterAlt(localctx, 82)
                self.state = 20337
                self.match(PlSqlParser.SEQ)
                pass

            elif la_ == 83:
                self.enterOuterAlt(localctx, 83)
                self.state = 20338
                self.match(PlSqlParser.SHARDSPACE)
                pass

            elif la_ == 84:
                self.enterOuterAlt(localctx, 84)
                self.state = 20339
                self.match(PlSqlParser.SIGNTYPE)
                pass

            elif la_ == 85:
                self.enterOuterAlt(localctx, 85)
                self.state = 20340
                self.match(PlSqlParser.SIMPLE_INTEGER)
                pass

            elif la_ == 86:
                self.enterOuterAlt(localctx, 86)
                self.state = 20341
                self.match(PlSqlParser.SMALLINT)
                pass

            elif la_ == 87:
                self.enterOuterAlt(localctx, 87)
                self.state = 20342
                self.match(PlSqlParser.STRUCT)
                pass

            elif la_ == 88:
                self.enterOuterAlt(localctx, 88)
                self.state = 20343
                self.match(PlSqlParser.SQLDATA)
                pass

            elif la_ == 89:
                self.enterOuterAlt(localctx, 89)
                self.state = 20344
                self.match(PlSqlParser.SQLERROR)
                pass

            elif la_ == 90:
                self.enterOuterAlt(localctx, 90)
                self.state = 20345
                self.match(PlSqlParser.SUBTYPE)
                pass

            elif la_ == 91:
                self.enterOuterAlt(localctx, 91)
                self.state = 20346
                self.match(PlSqlParser.T_LETTER)
                pass

            elif la_ == 92:
                self.enterOuterAlt(localctx, 92)
                self.state = 20347
                self.match(PlSqlParser.TDO)
                pass

            elif la_ == 93:
                self.enterOuterAlt(localctx, 93)
                self.state = 20348
                self.match(PlSqlParser.TIMESTAMP_LTZ_UNCONSTRAINED)
                pass

            elif la_ == 94:
                self.enterOuterAlt(localctx, 94)
                self.state = 20349
                self.match(PlSqlParser.TIMESTAMP_TZ_UNCONSTRAINED)
                pass

            elif la_ == 95:
                self.enterOuterAlt(localctx, 95)
                self.state = 20350
                self.match(PlSqlParser.TIMESTAMP_UNCONSTRAINED)
                pass

            elif la_ == 96:
                self.enterOuterAlt(localctx, 96)
                self.state = 20351
                self.match(PlSqlParser.TIMEZONE)
                pass

            elif la_ == 97:
                self.enterOuterAlt(localctx, 97)
                self.state = 20352
                self.match(PlSqlParser.TRIGGER)
                pass

            elif la_ == 98:
                self.enterOuterAlt(localctx, 98)
                self.state = 20353
                self.match(PlSqlParser.VARCHAR)
                pass

            elif la_ == 99:
                self.enterOuterAlt(localctx, 99)
                self.state = 20354
                self.match(PlSqlParser.VARCHAR2)
                pass

            elif la_ == 100:
                self.enterOuterAlt(localctx, 100)
                self.state = 20355
                self.match(PlSqlParser.VARIABLE)
                pass

            elif la_ == 101:
                self.enterOuterAlt(localctx, 101)
                self.state = 20356
                self.match(PlSqlParser.WARNING)
                pass

            elif la_ == 102:
                self.enterOuterAlt(localctx, 102)
                self.state = 20357
                self.match(PlSqlParser.WHILE)
                pass

            elif la_ == 103:
                self.enterOuterAlt(localctx, 103)
                self.state = 20358
                self.match(PlSqlParser.WM_CONCAT)
                pass

            elif la_ == 104:
                self.enterOuterAlt(localctx, 104)
                self.state = 20359
                self.match(PlSqlParser.XMLAGG)
                pass

            elif la_ == 105:
                self.enterOuterAlt(localctx, 105)
                self.state = 20360
                self.match(PlSqlParser.YMINTERVAL_UNCONSTRAINED)
                pass

            elif la_ == 106:
                self.enterOuterAlt(localctx, 106)
                self.state = 20361
                self.match(PlSqlParser.REGR_)
                pass

            elif la_ == 107:
                self.enterOuterAlt(localctx, 107)
                self.state = 20362
                self.match(PlSqlParser.VAR_)
                pass

            elif la_ == 108:
                self.enterOuterAlt(localctx, 108)
                self.state = 20363
                self.match(PlSqlParser.VALUE)
                pass

            elif la_ == 109:
                self.enterOuterAlt(localctx, 109)
                self.state = 20364
                self.match(PlSqlParser.COVAR_)
                pass

            elif la_ == 110:
                self.enterOuterAlt(localctx, 110)
                self.state = 20365
                self.match(PlSqlParser.ERROR_INDEX)
                pass

            elif la_ == 111:
                self.enterOuterAlt(localctx, 111)
                self.state = 20366
                self.match(PlSqlParser.ERROR_CODE)
                pass


        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Non_reserved_keywords_in_18cContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def PERSISTABLE(self):
            return self.getToken(PlSqlParser.PERSISTABLE, 0)

        def POLYMORPHIC(self):
            return self.getToken(PlSqlParser.POLYMORPHIC, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_non_reserved_keywords_in_18c

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNon_reserved_keywords_in_18c" ):
                listener.enterNon_reserved_keywords_in_18c(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNon_reserved_keywords_in_18c" ):
                listener.exitNon_reserved_keywords_in_18c(self)




    def non_reserved_keywords_in_18c(self):

        localctx = PlSqlParser.Non_reserved_keywords_in_18cContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2372, self.RULE_non_reserved_keywords_in_18c)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20369
            _la = self._input.LA(1)
            if not(_la==2331 or _la==2332):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Non_reserved_keywords_in_12cContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ACL(self):
            return self.getToken(PlSqlParser.ACL, 0)

        def ACCESSIBLE(self):
            return self.getToken(PlSqlParser.ACCESSIBLE, 0)

        def ACROSS(self):
            return self.getToken(PlSqlParser.ACROSS, 0)

        def ACTION(self):
            return self.getToken(PlSqlParser.ACTION, 0)

        def ACTIONS(self):
            return self.getToken(PlSqlParser.ACTIONS, 0)

        def ACTIVE(self):
            return self.getToken(PlSqlParser.ACTIVE, 0)

        def ACTIVE_DATA(self):
            return self.getToken(PlSqlParser.ACTIVE_DATA, 0)

        def ACTIVITY(self):
            return self.getToken(PlSqlParser.ACTIVITY, 0)

        def ADAPTIVE_PLAN(self):
            return self.getToken(PlSqlParser.ADAPTIVE_PLAN, 0)

        def ADVANCED(self):
            return self.getToken(PlSqlParser.ADVANCED, 0)

        def AFD_DISKSTRING(self):
            return self.getToken(PlSqlParser.AFD_DISKSTRING, 0)

        def ALTERNATE(self):
            return self.getToken(PlSqlParser.ALTERNATE, 0)

        def ALGORITHM(self):
            return self.getToken(PlSqlParser.ALGORITHM, 0)

        def ANALYTIC(self):
            return self.getToken(PlSqlParser.ANALYTIC, 0)

        def ANCESTOR(self):
            return self.getToken(PlSqlParser.ANCESTOR, 0)

        def ANOMALY(self):
            return self.getToken(PlSqlParser.ANOMALY, 0)

        def ANSI_REARCH(self):
            return self.getToken(PlSqlParser.ANSI_REARCH, 0)

        def APPLICATION(self):
            return self.getToken(PlSqlParser.APPLICATION, 0)

        def APPROX_COUNT_DISTINCT(self):
            return self.getToken(PlSqlParser.APPROX_COUNT_DISTINCT, 0)

        def ARCHIVAL(self):
            return self.getToken(PlSqlParser.ARCHIVAL, 0)

        def ARCHIVED(self):
            return self.getToken(PlSqlParser.ARCHIVED, 0)

        def ASIS(self):
            return self.getToken(PlSqlParser.ASIS, 0)

        def ASSIGN(self):
            return self.getToken(PlSqlParser.ASSIGN, 0)

        def AUTO_LOGIN(self):
            return self.getToken(PlSqlParser.AUTO_LOGIN, 0)

        def AUTO_REOPTIMIZE(self):
            return self.getToken(PlSqlParser.AUTO_REOPTIMIZE, 0)

        def AVRO(self):
            return self.getToken(PlSqlParser.AVRO, 0)

        def BACKGROUND(self):
            return self.getToken(PlSqlParser.BACKGROUND, 0)

        def BACKUPS(self):
            return self.getToken(PlSqlParser.BACKUPS, 0)

        def BATCHSIZE(self):
            return self.getToken(PlSqlParser.BATCHSIZE, 0)

        def BATCH_TABLE_ACCESS_BY_ROWID(self):
            return self.getToken(PlSqlParser.BATCH_TABLE_ACCESS_BY_ROWID, 0)

        def BEGINNING(self):
            return self.getToken(PlSqlParser.BEGINNING, 0)

        def BEQUEATH(self):
            return self.getToken(PlSqlParser.BEQUEATH, 0)

        def BITMAP_AND(self):
            return self.getToken(PlSqlParser.BITMAP_AND, 0)

        def BLOCKCHAIN(self):
            return self.getToken(PlSqlParser.BLOCKCHAIN, 0)

        def BSON(self):
            return self.getToken(PlSqlParser.BSON, 0)

        def CACHING(self):
            return self.getToken(PlSqlParser.CACHING, 0)

        def CALCULATED(self):
            return self.getToken(PlSqlParser.CALCULATED, 0)

        def CALLBACK(self):
            return self.getToken(PlSqlParser.CALLBACK, 0)

        def CAPACITY(self):
            return self.getToken(PlSqlParser.CAPACITY, 0)

        def CAPTION(self):
            return self.getToken(PlSqlParser.CAPTION, 0)

        def CDBDEFAULT(self):
            return self.getToken(PlSqlParser.CDBDEFAULT, 0)

        def CLASSIFICATION(self):
            return self.getToken(PlSqlParser.CLASSIFICATION, 0)

        def CLASSIFIER(self):
            return self.getToken(PlSqlParser.CLASSIFIER, 0)

        def CLAUSE(self):
            return self.getToken(PlSqlParser.CLAUSE, 0)

        def CLEAN(self):
            return self.getToken(PlSqlParser.CLEAN, 0)

        def CLEANUP(self):
            return self.getToken(PlSqlParser.CLEANUP, 0)

        def CLIENT(self):
            return self.getToken(PlSqlParser.CLIENT, 0)

        def CLUSTERING(self):
            return self.getToken(PlSqlParser.CLUSTERING, 0)

        def CLUSTER_DETAILS(self):
            return self.getToken(PlSqlParser.CLUSTER_DETAILS, 0)

        def CLUSTER_DISTANCE(self):
            return self.getToken(PlSqlParser.CLUSTER_DISTANCE, 0)

        def COLLATE(self):
            return self.getToken(PlSqlParser.COLLATE, 0)

        def COLLATION(self):
            return self.getToken(PlSqlParser.COLLATION, 0)

        def COMMON(self):
            return self.getToken(PlSqlParser.COMMON, 0)

        def COMMON_DATA(self):
            return self.getToken(PlSqlParser.COMMON_DATA, 0)

        def COMPONENT(self):
            return self.getToken(PlSqlParser.COMPONENT, 0)

        def COMPONENTS(self):
            return self.getToken(PlSqlParser.COMPONENTS, 0)

        def CONDITION(self):
            return self.getToken(PlSqlParser.CONDITION, 0)

        def CONDITIONAL(self):
            return self.getToken(PlSqlParser.CONDITIONAL, 0)

        def CONTAINERS(self):
            return self.getToken(PlSqlParser.CONTAINERS, 0)

        def CONTAINERS_DEFAULT(self):
            return self.getToken(PlSqlParser.CONTAINERS_DEFAULT, 0)

        def CONTAINER_DATA(self):
            return self.getToken(PlSqlParser.CONTAINER_DATA, 0)

        def CONTAINER_MAP(self):
            return self.getToken(PlSqlParser.CONTAINER_MAP, 0)

        def CONVERSION(self):
            return self.getToken(PlSqlParser.CONVERSION, 0)

        def CON_DBID_TO_ID(self):
            return self.getToken(PlSqlParser.CON_DBID_TO_ID, 0)

        def CON_GUID_TO_ID(self):
            return self.getToken(PlSqlParser.CON_GUID_TO_ID, 0)

        def CON_ID(self):
            return self.getToken(PlSqlParser.CON_ID, 0)

        def CON_NAME_TO_ID(self):
            return self.getToken(PlSqlParser.CON_NAME_TO_ID, 0)

        def CON_UID_TO_ID(self):
            return self.getToken(PlSqlParser.CON_UID_TO_ID, 0)

        def COOKIE(self):
            return self.getToken(PlSqlParser.COOKIE, 0)

        def COPY(self):
            return self.getToken(PlSqlParser.COPY, 0)

        def CREATE_FILE_DEST(self):
            return self.getToken(PlSqlParser.CREATE_FILE_DEST, 0)

        def CREDENTIAL(self):
            return self.getToken(PlSqlParser.CREDENTIAL, 0)

        def CRITICAL(self):
            return self.getToken(PlSqlParser.CRITICAL, 0)

        def CUBE_AJ(self):
            return self.getToken(PlSqlParser.CUBE_AJ, 0)

        def CUBE_SJ(self):
            return self.getToken(PlSqlParser.CUBE_SJ, 0)

        def DATAMOVEMENT(self):
            return self.getToken(PlSqlParser.DATAMOVEMENT, 0)

        def DATAOBJ_TO_MAT_PARTITION(self):
            return self.getToken(PlSqlParser.DATAOBJ_TO_MAT_PARTITION, 0)

        def DATAPUMP(self):
            return self.getToken(PlSqlParser.DATAPUMP, 0)

        def DATA_SECURITY_REWRITE_LIMIT(self):
            return self.getToken(PlSqlParser.DATA_SECURITY_REWRITE_LIMIT, 0)

        def DAYS(self):
            return self.getToken(PlSqlParser.DAYS, 0)

        def DB_UNIQUE_NAME(self):
            return self.getToken(PlSqlParser.DB_UNIQUE_NAME, 0)

        def DECORRELATE(self):
            return self.getToken(PlSqlParser.DECORRELATE, 0)

        def DEFAULT_CREDENTIAL(self):
            return self.getToken(PlSqlParser.DEFAULT_CREDENTIAL, 0)

        def DEFAULT_COLLATION(self):
            return self.getToken(PlSqlParser.DEFAULT_COLLATION, 0)

        def DEFINE(self):
            return self.getToken(PlSqlParser.DEFINE, 0)

        def DEFINITION(self):
            return self.getToken(PlSqlParser.DEFINITION, 0)

        def DELEGATE(self):
            return self.getToken(PlSqlParser.DELEGATE, 0)

        def DELETE_ALL(self):
            return self.getToken(PlSqlParser.DELETE_ALL, 0)

        def DESCRIPTION(self):
            return self.getToken(PlSqlParser.DESCRIPTION, 0)

        def DESTROY(self):
            return self.getToken(PlSqlParser.DESTROY, 0)

        def DIMENSIONS(self):
            return self.getToken(PlSqlParser.DIMENSIONS, 0)

        def DISABLE_ALL(self):
            return self.getToken(PlSqlParser.DISABLE_ALL, 0)

        def DISABLE_PARALLEL_DML(self):
            return self.getToken(PlSqlParser.DISABLE_PARALLEL_DML, 0)

        def DISCARD(self):
            return self.getToken(PlSqlParser.DISCARD, 0)

        def DISTRIBUTE(self):
            return self.getToken(PlSqlParser.DISTRIBUTE, 0)

        def DUPLICATE(self):
            return self.getToken(PlSqlParser.DUPLICATE, 0)

        def DUPLICATED(self):
            return self.getToken(PlSqlParser.DUPLICATED, 0)

        def DV(self):
            return self.getToken(PlSqlParser.DV, 0)

        def EDITIONABLE(self):
            return self.getToken(PlSqlParser.EDITIONABLE, 0)

        def ELIM_GROUPBY(self):
            return self.getToken(PlSqlParser.ELIM_GROUPBY, 0)

        def EM(self):
            return self.getToken(PlSqlParser.EM, 0)

        def ENABLE_ALL(self):
            return self.getToken(PlSqlParser.ENABLE_ALL, 0)

        def ENABLE_PARALLEL_DML(self):
            return self.getToken(PlSqlParser.ENABLE_PARALLEL_DML, 0)

        def EQUIPART(self):
            return self.getToken(PlSqlParser.EQUIPART, 0)

        def EVAL(self):
            return self.getToken(PlSqlParser.EVAL, 0)

        def EVALUATE(self):
            return self.getToken(PlSqlParser.EVALUATE, 0)

        def EXISTING(self):
            return self.getToken(PlSqlParser.EXISTING, 0)

        def EXPRESS(self):
            return self.getToken(PlSqlParser.EXPRESS, 0)

        def EXTENDED(self):
            return self.getToken(PlSqlParser.EXTENDED, 0)

        def EXTRACTCLOBXML(self):
            return self.getToken(PlSqlParser.EXTRACTCLOBXML, 0)

        def FACTOR(self):
            return self.getToken(PlSqlParser.FACTOR, 0)

        def FAILOVER(self):
            return self.getToken(PlSqlParser.FAILOVER, 0)

        def FAILURE(self):
            return self.getToken(PlSqlParser.FAILURE, 0)

        def FAMILY(self):
            return self.getToken(PlSqlParser.FAMILY, 0)

        def FAR(self):
            return self.getToken(PlSqlParser.FAR, 0)

        def FASTSTART(self):
            return self.getToken(PlSqlParser.FASTSTART, 0)

        def FEATURE(self):
            return self.getToken(PlSqlParser.FEATURE, 0)

        def FEATURE_DETAILS(self):
            return self.getToken(PlSqlParser.FEATURE_DETAILS, 0)

        def FETCH(self):
            return self.getToken(PlSqlParser.FETCH, 0)

        def FILE_NAME_CONVERT(self):
            return self.getToken(PlSqlParser.FILE_NAME_CONVERT, 0)

        def FILEGROUP(self):
            return self.getToken(PlSqlParser.FILEGROUP, 0)

        def FIXED_VIEW_DATA(self):
            return self.getToken(PlSqlParser.FIXED_VIEW_DATA, 0)

        def FLEX(self):
            return self.getToken(PlSqlParser.FLEX, 0)

        def FORMAT(self):
            return self.getToken(PlSqlParser.FORMAT, 0)

        def FTP(self):
            return self.getToken(PlSqlParser.FTP, 0)

        def GATHER_OPTIMIZER_STATISTICS(self):
            return self.getToken(PlSqlParser.GATHER_OPTIMIZER_STATISTICS, 0)

        def GET(self):
            return self.getToken(PlSqlParser.GET, 0)

        def HALF_YEARS(self):
            return self.getToken(PlSqlParser.HALF_YEARS, 0)

        def HASHING(self):
            return self.getToken(PlSqlParser.HASHING, 0)

        def HIER_ORDER(self):
            return self.getToken(PlSqlParser.HIER_ORDER, 0)

        def HIERARCHICAL(self):
            return self.getToken(PlSqlParser.HIERARCHICAL, 0)

        def HOURS(self):
            return self.getToken(PlSqlParser.HOURS, 0)

        def HTTP(self):
            return self.getToken(PlSqlParser.HTTP, 0)

        def H_LETTER(self):
            return self.getToken(PlSqlParser.H_LETTER, 0)

        def IDLE(self):
            return self.getToken(PlSqlParser.IDLE, 0)

        def ILM(self):
            return self.getToken(PlSqlParser.ILM, 0)

        def IMMUTABLE(self):
            return self.getToken(PlSqlParser.IMMUTABLE, 0)

        def INACTIVE(self):
            return self.getToken(PlSqlParser.INACTIVE, 0)

        def INACTIVE_ACCOUNT_TIME(self):
            return self.getToken(PlSqlParser.INACTIVE_ACCOUNT_TIME, 0)

        def INDEXING(self):
            return self.getToken(PlSqlParser.INDEXING, 0)

        def INHERIT(self):
            return self.getToken(PlSqlParser.INHERIT, 0)

        def INMEMORY(self):
            return self.getToken(PlSqlParser.INMEMORY, 0)

        def INMEMORY_PRUNING(self):
            return self.getToken(PlSqlParser.INMEMORY_PRUNING, 0)

        def INPLACE(self):
            return self.getToken(PlSqlParser.INPLACE, 0)

        def INTERLEAVED(self):
            return self.getToken(PlSqlParser.INTERLEAVED, 0)

        def INVALIDATION(self):
            return self.getToken(PlSqlParser.INVALIDATION, 0)

        def ISOLATE(self):
            return self.getToken(PlSqlParser.ISOLATE, 0)

        def IS_LEAF(self):
            return self.getToken(PlSqlParser.IS_LEAF, 0)

        def JSON(self):
            return self.getToken(PlSqlParser.JSON, 0)

        def JSONGET(self):
            return self.getToken(PlSqlParser.JSONGET, 0)

        def JSONPARSE(self):
            return self.getToken(PlSqlParser.JSONPARSE, 0)

        def JSON_ARRAY(self):
            return self.getToken(PlSqlParser.JSON_ARRAY, 0)

        def JSON_ARRAYAGG(self):
            return self.getToken(PlSqlParser.JSON_ARRAYAGG, 0)

        def JSON_EQUAL(self):
            return self.getToken(PlSqlParser.JSON_EQUAL, 0)

        def JSON_EXISTS(self):
            return self.getToken(PlSqlParser.JSON_EXISTS, 0)

        def JSON_EXISTS2(self):
            return self.getToken(PlSqlParser.JSON_EXISTS2, 0)

        def JSON_OBJECT(self):
            return self.getToken(PlSqlParser.JSON_OBJECT, 0)

        def JSON_OBJECTAGG(self):
            return self.getToken(PlSqlParser.JSON_OBJECTAGG, 0)

        def JSON_QUERY(self):
            return self.getToken(PlSqlParser.JSON_QUERY, 0)

        def JSON_SERIALIZE(self):
            return self.getToken(PlSqlParser.JSON_SERIALIZE, 0)

        def JSON_TABLE(self):
            return self.getToken(PlSqlParser.JSON_TABLE, 0)

        def JSON_TEXTCONTAINS(self):
            return self.getToken(PlSqlParser.JSON_TEXTCONTAINS, 0)

        def JSON_TEXTCONTAINS2(self):
            return self.getToken(PlSqlParser.JSON_TEXTCONTAINS2, 0)

        def JSON_VALUE(self):
            return self.getToken(PlSqlParser.JSON_VALUE, 0)

        def KEYSTORE(self):
            return self.getToken(PlSqlParser.KEYSTORE, 0)

        def LABEL(self):
            return self.getToken(PlSqlParser.LABEL, 0)

        def LAX(self):
            return self.getToken(PlSqlParser.LAX, 0)

        def LEAD_CDB(self):
            return self.getToken(PlSqlParser.LEAD_CDB, 0)

        def LEAD_CDB_URI(self):
            return self.getToken(PlSqlParser.LEAD_CDB_URI, 0)

        def LEVEL_NAME(self):
            return self.getToken(PlSqlParser.LEVEL_NAME, 0)

        def LIFECYCLE(self):
            return self.getToken(PlSqlParser.LIFECYCLE, 0)

        def LINEAR(self):
            return self.getToken(PlSqlParser.LINEAR, 0)

        def LOCKDOWN(self):
            return self.getToken(PlSqlParser.LOCKDOWN, 0)

        def LOCKING(self):
            return self.getToken(PlSqlParser.LOCKING, 0)

        def LOGMINING(self):
            return self.getToken(PlSqlParser.LOGMINING, 0)

        def LOST(self):
            return self.getToken(PlSqlParser.LOST, 0)

        def MANDATORY(self):
            return self.getToken(PlSqlParser.MANDATORY, 0)

        def MAP(self):
            return self.getToken(PlSqlParser.MAP, 0)

        def MATCH(self):
            return self.getToken(PlSqlParser.MATCH, 0)

        def MATCHES(self):
            return self.getToken(PlSqlParser.MATCHES, 0)

        def MATCH_NUMBER(self):
            return self.getToken(PlSqlParser.MATCH_NUMBER, 0)

        def MATCH_RECOGNIZE(self):
            return self.getToken(PlSqlParser.MATCH_RECOGNIZE, 0)

        def MAX_SHARED_TEMP_SIZE(self):
            return self.getToken(PlSqlParser.MAX_SHARED_TEMP_SIZE, 0)

        def MEMCOMPRESS(self):
            return self.getToken(PlSqlParser.MEMCOMPRESS, 0)

        def METADATA(self):
            return self.getToken(PlSqlParser.METADATA, 0)

        def MEMBER_CAPTION(self):
            return self.getToken(PlSqlParser.MEMBER_CAPTION, 0)

        def MEMBER_DESCRIPTION(self):
            return self.getToken(PlSqlParser.MEMBER_DESCRIPTION, 0)

        def MEMBER_NAME(self):
            return self.getToken(PlSqlParser.MEMBER_NAME, 0)

        def MEMBER_UNIQUE_NAME(self):
            return self.getToken(PlSqlParser.MEMBER_UNIQUE_NAME, 0)

        def MEMOPTIMIZE(self):
            return self.getToken(PlSqlParser.MEMOPTIMIZE, 0)

        def MINUTES(self):
            return self.getToken(PlSqlParser.MINUTES, 0)

        def MODEL_NB(self):
            return self.getToken(PlSqlParser.MODEL_NB, 0)

        def MODEL_SV(self):
            return self.getToken(PlSqlParser.MODEL_SV, 0)

        def MODIFICATION(self):
            return self.getToken(PlSqlParser.MODIFICATION, 0)

        def MODULE(self):
            return self.getToken(PlSqlParser.MODULE, 0)

        def MONTHS(self):
            return self.getToken(PlSqlParser.MONTHS, 0)

        def MULTIDIMENSIONAL(self):
            return self.getToken(PlSqlParser.MULTIDIMENSIONAL, 0)

        def NEG(self):
            return self.getToken(PlSqlParser.NEG, 0)

        def NOCOPY(self):
            return self.getToken(PlSqlParser.NOCOPY, 0)

        def NOKEEP(self):
            return self.getToken(PlSqlParser.NOKEEP, 0)

        def NONEDITIONABLE(self):
            return self.getToken(PlSqlParser.NONEDITIONABLE, 0)

        def NOPARTITION(self):
            return self.getToken(PlSqlParser.NOPARTITION, 0)

        def NORELOCATE(self):
            return self.getToken(PlSqlParser.NORELOCATE, 0)

        def NOREPLAY(self):
            return self.getToken(PlSqlParser.NOREPLAY, 0)

        def NO_ADAPTIVE_PLAN(self):
            return self.getToken(PlSqlParser.NO_ADAPTIVE_PLAN, 0)

        def NO_ANSI_REARCH(self):
            return self.getToken(PlSqlParser.NO_ANSI_REARCH, 0)

        def NO_AUTO_REOPTIMIZE(self):
            return self.getToken(PlSqlParser.NO_AUTO_REOPTIMIZE, 0)

        def NO_BATCH_TABLE_ACCESS_BY_ROWID(self):
            return self.getToken(PlSqlParser.NO_BATCH_TABLE_ACCESS_BY_ROWID, 0)

        def NO_CLUSTERING(self):
            return self.getToken(PlSqlParser.NO_CLUSTERING, 0)

        def NO_COMMON_DATA(self):
            return self.getToken(PlSqlParser.NO_COMMON_DATA, 0)

        def NO_DATA_SECURITY_REWRITE(self):
            return self.getToken(PlSqlParser.NO_DATA_SECURITY_REWRITE, 0)

        def NO_DECORRELATE(self):
            return self.getToken(PlSqlParser.NO_DECORRELATE, 0)

        def NO_ELIM_GROUPBY(self):
            return self.getToken(PlSqlParser.NO_ELIM_GROUPBY, 0)

        def NO_GATHER_OPTIMIZER_STATISTICS(self):
            return self.getToken(PlSqlParser.NO_GATHER_OPTIMIZER_STATISTICS, 0)

        def NO_INMEMORY(self):
            return self.getToken(PlSqlParser.NO_INMEMORY, 0)

        def NO_INMEMORY_PRUNING(self):
            return self.getToken(PlSqlParser.NO_INMEMORY_PRUNING, 0)

        def NO_OBJECT_LINK(self):
            return self.getToken(PlSqlParser.NO_OBJECT_LINK, 0)

        def NO_PARTIAL_JOIN(self):
            return self.getToken(PlSqlParser.NO_PARTIAL_JOIN, 0)

        def NO_PARTIAL_ROLLUP_PUSHDOWN(self):
            return self.getToken(PlSqlParser.NO_PARTIAL_ROLLUP_PUSHDOWN, 0)

        def NO_PQ_CONCURRENT_UNION(self):
            return self.getToken(PlSqlParser.NO_PQ_CONCURRENT_UNION, 0)

        def NO_PQ_REPLICATE(self):
            return self.getToken(PlSqlParser.NO_PQ_REPLICATE, 0)

        def NO_PQ_SKEW(self):
            return self.getToken(PlSqlParser.NO_PQ_SKEW, 0)

        def NOPROMPT(self):
            return self.getToken(PlSqlParser.NOPROMPT, 0)

        def NO_PX_FAULT_TOLERANCE(self):
            return self.getToken(PlSqlParser.NO_PX_FAULT_TOLERANCE, 0)

        def NO_ROOT_SW_FOR_LOCAL(self):
            return self.getToken(PlSqlParser.NO_ROOT_SW_FOR_LOCAL, 0)

        def NO_SQL_TRANSLATION(self):
            return self.getToken(PlSqlParser.NO_SQL_TRANSLATION, 0)

        def NO_USE_CUBE(self):
            return self.getToken(PlSqlParser.NO_USE_CUBE, 0)

        def NO_USE_VECTOR_AGGREGATION(self):
            return self.getToken(PlSqlParser.NO_USE_VECTOR_AGGREGATION, 0)

        def NO_VECTOR_TRANSFORM(self):
            return self.getToken(PlSqlParser.NO_VECTOR_TRANSFORM, 0)

        def NO_VECTOR_TRANSFORM_DIMS(self):
            return self.getToken(PlSqlParser.NO_VECTOR_TRANSFORM_DIMS, 0)

        def NO_VECTOR_TRANSFORM_FACT(self):
            return self.getToken(PlSqlParser.NO_VECTOR_TRANSFORM_FACT, 0)

        def NO_ZONEMAP(self):
            return self.getToken(PlSqlParser.NO_ZONEMAP, 0)

        def OBJ_ID(self):
            return self.getToken(PlSqlParser.OBJ_ID, 0)

        def OFFSET(self):
            return self.getToken(PlSqlParser.OFFSET, 0)

        def OLS(self):
            return self.getToken(PlSqlParser.OLS, 0)

        def OMIT(self):
            return self.getToken(PlSqlParser.OMIT, 0)

        def ONE(self):
            return self.getToken(PlSqlParser.ONE, 0)

        def ORACLE_DATAPUMP(self):
            return self.getToken(PlSqlParser.ORACLE_DATAPUMP, 0)

        def ORACLE_HDFS(self):
            return self.getToken(PlSqlParser.ORACLE_HDFS, 0)

        def ORACLE_HIVE(self):
            return self.getToken(PlSqlParser.ORACLE_HIVE, 0)

        def ORACLE_LOADER(self):
            return self.getToken(PlSqlParser.ORACLE_LOADER, 0)

        def ORA_CHECK_ACL(self):
            return self.getToken(PlSqlParser.ORA_CHECK_ACL, 0)

        def ORA_CHECK_PRIVILEGE(self):
            return self.getToken(PlSqlParser.ORA_CHECK_PRIVILEGE, 0)

        def ORA_CLUSTERING(self):
            return self.getToken(PlSqlParser.ORA_CLUSTERING, 0)

        def ORA_INVOKING_USER(self):
            return self.getToken(PlSqlParser.ORA_INVOKING_USER, 0)

        def ORA_INVOKING_USERID(self):
            return self.getToken(PlSqlParser.ORA_INVOKING_USERID, 0)

        def ORA_INVOKING_XS_USER(self):
            return self.getToken(PlSqlParser.ORA_INVOKING_XS_USER, 0)

        def ORA_INVOKING_XS_USER_GUID(self):
            return self.getToken(PlSqlParser.ORA_INVOKING_XS_USER_GUID, 0)

        def ORA_RAWCOMPARE(self):
            return self.getToken(PlSqlParser.ORA_RAWCOMPARE, 0)

        def ORA_RAWCONCAT(self):
            return self.getToken(PlSqlParser.ORA_RAWCONCAT, 0)

        def ORA_WRITE_TIME(self):
            return self.getToken(PlSqlParser.ORA_WRITE_TIME, 0)

        def PARENT_LEVEL_NAME(self):
            return self.getToken(PlSqlParser.PARENT_LEVEL_NAME, 0)

        def PARENT_UNIQUE_NAME(self):
            return self.getToken(PlSqlParser.PARENT_UNIQUE_NAME, 0)

        def PASSWORD_ROLLOVER_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_ROLLOVER_TIME, 0)

        def PARTIAL(self):
            return self.getToken(PlSqlParser.PARTIAL, 0)

        def PARTIAL_JOIN(self):
            return self.getToken(PlSqlParser.PARTIAL_JOIN, 0)

        def PARTIAL_ROLLUP_PUSHDOWN(self):
            return self.getToken(PlSqlParser.PARTIAL_ROLLUP_PUSHDOWN, 0)

        def PAST(self):
            return self.getToken(PlSqlParser.PAST, 0)

        def PATCH(self):
            return self.getToken(PlSqlParser.PATCH, 0)

        def PATH_PREFIX(self):
            return self.getToken(PlSqlParser.PATH_PREFIX, 0)

        def PATTERN(self):
            return self.getToken(PlSqlParser.PATTERN, 0)

        def PER(self):
            return self.getToken(PlSqlParser.PER, 0)

        def PERIOD(self):
            return self.getToken(PlSqlParser.PERIOD, 0)

        def PERIOD_KEYWORD(self):
            return self.getToken(PlSqlParser.PERIOD_KEYWORD, 0)

        def PERMUTE(self):
            return self.getToken(PlSqlParser.PERMUTE, 0)

        def PLUGGABLE(self):
            return self.getToken(PlSqlParser.PLUGGABLE, 0)

        def POOL_16K(self):
            return self.getToken(PlSqlParser.POOL_16K, 0)

        def POOL_2K(self):
            return self.getToken(PlSqlParser.POOL_2K, 0)

        def POOL_32K(self):
            return self.getToken(PlSqlParser.POOL_32K, 0)

        def POOL_4K(self):
            return self.getToken(PlSqlParser.POOL_4K, 0)

        def POOL_8K(self):
            return self.getToken(PlSqlParser.POOL_8K, 0)

        def PQ_CONCURRENT_UNION(self):
            return self.getToken(PlSqlParser.PQ_CONCURRENT_UNION, 0)

        def PQ_DISTRIBUTE_WINDOW(self):
            return self.getToken(PlSqlParser.PQ_DISTRIBUTE_WINDOW, 0)

        def PQ_FILTER(self):
            return self.getToken(PlSqlParser.PQ_FILTER, 0)

        def PQ_REPLICATE(self):
            return self.getToken(PlSqlParser.PQ_REPLICATE, 0)

        def PQ_SKEW(self):
            return self.getToken(PlSqlParser.PQ_SKEW, 0)

        def PRELOAD(self):
            return self.getToken(PlSqlParser.PRELOAD, 0)

        def PRETTY(self):
            return self.getToken(PlSqlParser.PRETTY, 0)

        def PREV(self):
            return self.getToken(PlSqlParser.PREV, 0)

        def PRINTBLOBTOCLOB(self):
            return self.getToken(PlSqlParser.PRINTBLOBTOCLOB, 0)

        def PRIORITY(self):
            return self.getToken(PlSqlParser.PRIORITY, 0)

        def PRIVILEGED(self):
            return self.getToken(PlSqlParser.PRIVILEGED, 0)

        def PROPERTY(self):
            return self.getToken(PlSqlParser.PROPERTY, 0)

        def PROTOCOL(self):
            return self.getToken(PlSqlParser.PROTOCOL, 0)

        def PROXY(self):
            return self.getToken(PlSqlParser.PROXY, 0)

        def PRUNING(self):
            return self.getToken(PlSqlParser.PRUNING, 0)

        def PX_FAULT_TOLERANCE(self):
            return self.getToken(PlSqlParser.PX_FAULT_TOLERANCE, 0)

        def QUARTERS(self):
            return self.getToken(PlSqlParser.QUARTERS, 0)

        def QUOTAGROUP(self):
            return self.getToken(PlSqlParser.QUOTAGROUP, 0)

        def REALM(self):
            return self.getToken(PlSqlParser.REALM, 0)

        def REDEFINE(self):
            return self.getToken(PlSqlParser.REDEFINE, 0)

        def RELOCATE(self):
            return self.getToken(PlSqlParser.RELOCATE, 0)

        def REMOTE(self):
            return self.getToken(PlSqlParser.REMOTE, 0)

        def RESTART(self):
            return self.getToken(PlSqlParser.RESTART, 0)

        def ROLESET(self):
            return self.getToken(PlSqlParser.ROLESET, 0)

        def ROWID_MAPPING_TABLE(self):
            return self.getToken(PlSqlParser.ROWID_MAPPING_TABLE, 0)

        def RUNNING(self):
            return self.getToken(PlSqlParser.RUNNING, 0)

        def SAVE(self):
            return self.getToken(PlSqlParser.SAVE, 0)

        def SCRUB(self):
            return self.getToken(PlSqlParser.SCRUB, 0)

        def SDO_GEOM_MBR(self):
            return self.getToken(PlSqlParser.SDO_GEOM_MBR, 0)

        def SECONDS(self):
            return self.getToken(PlSqlParser.SECONDS, 0)

        def SECRET(self):
            return self.getToken(PlSqlParser.SECRET, 0)

        def SERIAL(self):
            return self.getToken(PlSqlParser.SERIAL, 0)

        def SERVICES(self):
            return self.getToken(PlSqlParser.SERVICES, 0)

        def SERVICE_NAME_CONVERT(self):
            return self.getToken(PlSqlParser.SERVICE_NAME_CONVERT, 0)

        def SHARDED(self):
            return self.getToken(PlSqlParser.SHARDED, 0)

        def SHARING(self):
            return self.getToken(PlSqlParser.SHARING, 0)

        def SHELFLIFE(self):
            return self.getToken(PlSqlParser.SHELFLIFE, 0)

        def SITE(self):
            return self.getToken(PlSqlParser.SITE, 0)

        def SOURCE_FILE_DIRECTORY(self):
            return self.getToken(PlSqlParser.SOURCE_FILE_DIRECTORY, 0)

        def SOURCE_FILE_NAME_CONVERT(self):
            return self.getToken(PlSqlParser.SOURCE_FILE_NAME_CONVERT, 0)

        def SQL_TRANSLATION_PROFILE(self):
            return self.getToken(PlSqlParser.SQL_TRANSLATION_PROFILE, 0)

        def STANDARD(self):
            return self.getToken(PlSqlParser.STANDARD, 0)

        def STANDARD_HASH(self):
            return self.getToken(PlSqlParser.STANDARD_HASH, 0)

        def STANDBYS(self):
            return self.getToken(PlSqlParser.STANDBYS, 0)

        def STATE(self):
            return self.getToken(PlSqlParser.STATE, 0)

        def STATEMENT(self):
            return self.getToken(PlSqlParser.STATEMENT, 0)

        def STREAM(self):
            return self.getToken(PlSqlParser.STREAM, 0)

        def SUBSCRIBE(self):
            return self.getToken(PlSqlParser.SUBSCRIBE, 0)

        def SUBSET(self):
            return self.getToken(PlSqlParser.SUBSET, 0)

        def SUCCESS(self):
            return self.getToken(PlSqlParser.SUCCESS, 0)

        def SYS(self):
            return self.getToken(PlSqlParser.SYS, 0)

        def SYSBACKUP(self):
            return self.getToken(PlSqlParser.SYSBACKUP, 0)

        def SYSDG(self):
            return self.getToken(PlSqlParser.SYSDG, 0)

        def SYSGUID(self):
            return self.getToken(PlSqlParser.SYSGUID, 0)

        def SYSKM(self):
            return self.getToken(PlSqlParser.SYSKM, 0)

        def SYSOBJ(self):
            return self.getToken(PlSqlParser.SYSOBJ, 0)

        def SYS_CHECK_PRIVILEGE(self):
            return self.getToken(PlSqlParser.SYS_CHECK_PRIVILEGE, 0)

        def SYS_GET_COL_ACLIDS(self):
            return self.getToken(PlSqlParser.SYS_GET_COL_ACLIDS, 0)

        def SYS_MKXTI(self):
            return self.getToken(PlSqlParser.SYS_MKXTI, 0)

        def SYS_OP_CYCLED_SEQ(self):
            return self.getToken(PlSqlParser.SYS_OP_CYCLED_SEQ, 0)

        def SYS_OP_HASH(self):
            return self.getToken(PlSqlParser.SYS_OP_HASH, 0)

        def SYS_OP_KEY_VECTOR_CREATE(self):
            return self.getToken(PlSqlParser.SYS_OP_KEY_VECTOR_CREATE, 0)

        def SYS_OP_KEY_VECTOR_FILTER(self):
            return self.getToken(PlSqlParser.SYS_OP_KEY_VECTOR_FILTER, 0)

        def SYS_OP_KEY_VECTOR_FILTER_LIST(self):
            return self.getToken(PlSqlParser.SYS_OP_KEY_VECTOR_FILTER_LIST, 0)

        def SYS_OP_KEY_VECTOR_SUCCEEDED(self):
            return self.getToken(PlSqlParser.SYS_OP_KEY_VECTOR_SUCCEEDED, 0)

        def SYS_OP_KEY_VECTOR_USE(self):
            return self.getToken(PlSqlParser.SYS_OP_KEY_VECTOR_USE, 0)

        def SYS_OP_PART_ID(self):
            return self.getToken(PlSqlParser.SYS_OP_PART_ID, 0)

        def SYS_OP_ZONE_ID(self):
            return self.getToken(PlSqlParser.SYS_OP_ZONE_ID, 0)

        def SYS_RAW_TO_XSID(self):
            return self.getToken(PlSqlParser.SYS_RAW_TO_XSID, 0)

        def SYS_XSID_TO_RAW(self):
            return self.getToken(PlSqlParser.SYS_XSID_TO_RAW, 0)

        def SYS_ZMAP_FILTER(self):
            return self.getToken(PlSqlParser.SYS_ZMAP_FILTER, 0)

        def SYS_ZMAP_REFRESH(self):
            return self.getToken(PlSqlParser.SYS_ZMAP_REFRESH, 0)

        def TAG(self):
            return self.getToken(PlSqlParser.TAG, 0)

        def TEXT(self):
            return self.getToken(PlSqlParser.TEXT, 0)

        def TIER(self):
            return self.getToken(PlSqlParser.TIER, 0)

        def TIES(self):
            return self.getToken(PlSqlParser.TIES, 0)

        def TO_ACLID(self):
            return self.getToken(PlSqlParser.TO_ACLID, 0)

        def TRANSFORM(self):
            return self.getToken(PlSqlParser.TRANSFORM, 0)

        def TRANSLATION(self):
            return self.getToken(PlSqlParser.TRANSLATION, 0)

        def TRUST(self):
            return self.getToken(PlSqlParser.TRUST, 0)

        def UCS2(self):
            return self.getToken(PlSqlParser.UCS2, 0)

        def UNCONDITIONAL(self):
            return self.getToken(PlSqlParser.UNCONDITIONAL, 0)

        def UNITE(self):
            return self.getToken(PlSqlParser.UNITE, 0)

        def UNMATCHED(self):
            return self.getToken(PlSqlParser.UNMATCHED, 0)

        def UNPLUG(self):
            return self.getToken(PlSqlParser.UNPLUG, 0)

        def UNSUBSCRIBE(self):
            return self.getToken(PlSqlParser.UNSUBSCRIBE, 0)

        def USABLE(self):
            return self.getToken(PlSqlParser.USABLE, 0)

        def USER_DATA(self):
            return self.getToken(PlSqlParser.USER_DATA, 0)

        def USER_TABLESPACES(self):
            return self.getToken(PlSqlParser.USER_TABLESPACES, 0)

        def USE_CUBE(self):
            return self.getToken(PlSqlParser.USE_CUBE, 0)

        def USE_HIDDEN_PARTITIONS(self):
            return self.getToken(PlSqlParser.USE_HIDDEN_PARTITIONS, 0)

        def USE_VECTOR_AGGREGATION(self):
            return self.getToken(PlSqlParser.USE_VECTOR_AGGREGATION, 0)

        def USING_NO_EXPAND(self):
            return self.getToken(PlSqlParser.USING_NO_EXPAND, 0)

        def USING_NLS_COMP(self):
            return self.getToken(PlSqlParser.USING_NLS_COMP, 0)

        def UTF16BE(self):
            return self.getToken(PlSqlParser.UTF16BE, 0)

        def UTF16LE(self):
            return self.getToken(PlSqlParser.UTF16LE, 0)

        def UTF32(self):
            return self.getToken(PlSqlParser.UTF32, 0)

        def UTF8(self):
            return self.getToken(PlSqlParser.UTF8, 0)

        def V1(self):
            return self.getToken(PlSqlParser.V1, 0)

        def V2(self):
            return self.getToken(PlSqlParser.V2, 0)

        def VALIDATE_CONVERSION(self):
            return self.getToken(PlSqlParser.VALIDATE_CONVERSION, 0)

        def VALID_TIME_END(self):
            return self.getToken(PlSqlParser.VALID_TIME_END, 0)

        def VECTOR_TRANSFORM(self):
            return self.getToken(PlSqlParser.VECTOR_TRANSFORM, 0)

        def VECTOR_TRANSFORM_DIMS(self):
            return self.getToken(PlSqlParser.VECTOR_TRANSFORM_DIMS, 0)

        def VECTOR_TRANSFORM_FACT(self):
            return self.getToken(PlSqlParser.VECTOR_TRANSFORM_FACT, 0)

        def VERIFIER(self):
            return self.getToken(PlSqlParser.VERIFIER, 0)

        def VIOLATION(self):
            return self.getToken(PlSqlParser.VIOLATION, 0)

        def VISIBILITY(self):
            return self.getToken(PlSqlParser.VISIBILITY, 0)

        def WEEK(self):
            return self.getToken(PlSqlParser.WEEK, 0)

        def WEEKS(self):
            return self.getToken(PlSqlParser.WEEKS, 0)

        def WITH_PLSQL(self):
            return self.getToken(PlSqlParser.WITH_PLSQL, 0)

        def WRAPPER(self):
            return self.getToken(PlSqlParser.WRAPPER, 0)

        def XS(self):
            return self.getToken(PlSqlParser.XS, 0)

        def YEARS(self):
            return self.getToken(PlSqlParser.YEARS, 0)

        def ZONEMAP(self):
            return self.getToken(PlSqlParser.ZONEMAP, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_non_reserved_keywords_in_12c

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNon_reserved_keywords_in_12c" ):
                listener.enterNon_reserved_keywords_in_12c(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNon_reserved_keywords_in_12c" ):
                listener.exitNon_reserved_keywords_in_12c(self)




    def non_reserved_keywords_in_12c(self):

        localctx = PlSqlParser.Non_reserved_keywords_in_12cContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2374, self.RULE_non_reserved_keywords_in_12c)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20371
            _la = self._input.LA(1)
            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 7500929902172527936) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 1279997159408897) != 0) or ((((_la - 131)) & ~0x3f) == 0 and ((1 << (_la - 131)) & 35611721465857) != 0) or ((((_la - 197)) & ~0x3f) == 0 and ((1 << (_la - 197)) & 1040358108360261791) != 0) or ((((_la - 275)) & ~0x3f) == 0 and ((1 << (_la - 275)) & -9223367035365344753) != 0) or ((((_la - 340)) & ~0x3f) == 0 and ((1 << (_la - 340)) & -8633398798812438387) != 0) or ((((_la - 405)) & ~0x3f) == 0 and ((1 << (_la - 405)) & -6771090021739888607) != 0) or ((((_la - 481)) & ~0x3f) == 0 and ((1 << (_la - 481)) & -5943607741091146751) != 0) or ((((_la - 545)) & ~0x3f) == 0 and ((1 << (_la - 545)) & 74872412541550801) != 0) or ((((_la - 617)) & ~0x3f) == 0 and ((1 << (_la - 617)) & 576474221400580097) != 0) or ((((_la - 695)) & ~0x3f) == 0 and ((1 << (_la - 695)) & -17939627423806975) != 0) or ((((_la - 759)) & ~0x3f) == 0 and ((1 << (_la - 759)) & 4513496851185759) != 0) or ((((_la - 826)) & ~0x3f) == 0 and ((1 << (_la - 826)) & 4468134298385516549) != 0) or ((((_la - 894)) & ~0x3f) == 0 and ((1 << (_la - 894)) & 35752666728449) != 0) or ((((_la - 958)) & ~0x3f) == 0 and ((1 << (_la - 958)) & 361004851770949633) != 0) or ((((_la - 1023)) & ~0x3f) == 0 and ((1 << (_la - 1023)) & 9147940509582433) != 0) or ((((_la - 1087)) & ~0x3f) == 0 and ((1 << (_la - 1087)) & -6899514491151039577) != 0) or ((((_la - 1151)) & ~0x3f) == 0 and ((1 << (_la - 1151)) & 2017613080011211011) != 0) or ((((_la - 1220)) & ~0x3f) == 0 and ((1 << (_la - 1220)) & 7529455627011135) != 0) or ((((_la - 1286)) & ~0x3f) == 0 and ((1 << (_la - 1286)) & 559572257056227501) != 0) or ((((_la - 1351)) & ~0x3f) == 0 and ((1 << (_la - 1351)) & 76686540360679629) != 0) or ((((_la - 1416)) & ~0x3f) == 0 and ((1 << (_la - 1416)) & 5188146770865061889) != 0) or ((((_la - 1494)) & ~0x3f) == 0 and ((1 << (_la - 1494)) & 1297072976839049217) != 0) or ((((_la - 1559)) & ~0x3f) == 0 and ((1 << (_la - 1559)) & 144036067278851) != 0) or ((((_la - 1628)) & ~0x3f) == 0 and ((1 << (_la - 1628)) & 9007205702991875) != 0) or ((((_la - 1694)) & ~0x3f) == 0 and ((1 << (_la - 1694)) & 1783988404582089219) != 0) or ((((_la - 1776)) & ~0x3f) == 0 and ((1 << (_la - 1776)) & 17592187064321) != 0) or _la==1848 or _la==1859 or ((((_la - 1990)) & ~0x3f) == 0 and ((1 << (_la - 1990)) & 35184574466055) != 0) or ((((_la - 2059)) & ~0x3f) == 0 and ((1 << (_la - 2059)) & -9222791357207142367) != 0) or ((((_la - 2126)) & ~0x3f) == 0 and ((1 << (_la - 2126)) & 16888687421949969) != 0) or ((((_la - 2191)) & ~0x3f) == 0 and ((1 << (_la - 2191)) & 17827333) != 0) or ((((_la - 2257)) & ~0x3f) == 0 and ((1 << (_la - 2257)) & 2251814174965829) != 0) or _la==2340):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Non_reserved_keywords_pre12cContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def ABORT(self):
            return self.getToken(PlSqlParser.ABORT, 0)

        def ABS(self):
            return self.getToken(PlSqlParser.ABS, 0)

        def ACCESSED(self):
            return self.getToken(PlSqlParser.ACCESSED, 0)

        def ACCESS(self):
            return self.getToken(PlSqlParser.ACCESS, 0)

        def ACCOUNT(self):
            return self.getToken(PlSqlParser.ACCOUNT, 0)

        def ACOS(self):
            return self.getToken(PlSqlParser.ACOS, 0)

        def ACTIVATE(self):
            return self.getToken(PlSqlParser.ACTIVATE, 0)

        def ACTIVE_COMPONENT(self):
            return self.getToken(PlSqlParser.ACTIVE_COMPONENT, 0)

        def ACTIVE_FUNCTION(self):
            return self.getToken(PlSqlParser.ACTIVE_FUNCTION, 0)

        def ACTIVE_TAG(self):
            return self.getToken(PlSqlParser.ACTIVE_TAG, 0)

        def ADD_COLUMN(self):
            return self.getToken(PlSqlParser.ADD_COLUMN, 0)

        def ADD_GROUP(self):
            return self.getToken(PlSqlParser.ADD_GROUP, 0)

        def ADD_MONTHS(self):
            return self.getToken(PlSqlParser.ADD_MONTHS, 0)

        def ADD(self):
            return self.getToken(PlSqlParser.ADD, 0)

        def ADJ_DATE(self):
            return self.getToken(PlSqlParser.ADJ_DATE, 0)

        def ADMINISTER(self):
            return self.getToken(PlSqlParser.ADMINISTER, 0)

        def ADMINISTRATOR(self):
            return self.getToken(PlSqlParser.ADMINISTRATOR, 0)

        def ADMIN(self):
            return self.getToken(PlSqlParser.ADMIN, 0)

        def ADVISE(self):
            return self.getToken(PlSqlParser.ADVISE, 0)

        def ADVISOR(self):
            return self.getToken(PlSqlParser.ADVISOR, 0)

        def AFTER(self):
            return self.getToken(PlSqlParser.AFTER, 0)

        def ALIAS(self):
            return self.getToken(PlSqlParser.ALIAS, 0)

        def ALLOCATE(self):
            return self.getToken(PlSqlParser.ALLOCATE, 0)

        def ALLOW(self):
            return self.getToken(PlSqlParser.ALLOW, 0)

        def ALL_ROWS(self):
            return self.getToken(PlSqlParser.ALL_ROWS, 0)

        def ALWAYS(self):
            return self.getToken(PlSqlParser.ALWAYS, 0)

        def ANALYZE(self):
            return self.getToken(PlSqlParser.ANALYZE, 0)

        def ANCILLARY(self):
            return self.getToken(PlSqlParser.ANCILLARY, 0)

        def AND_EQUAL(self):
            return self.getToken(PlSqlParser.AND_EQUAL, 0)

        def ANTIJOIN(self):
            return self.getToken(PlSqlParser.ANTIJOIN, 0)

        def ANYSCHEMA(self):
            return self.getToken(PlSqlParser.ANYSCHEMA, 0)

        def APPENDCHILDXML(self):
            return self.getToken(PlSqlParser.APPENDCHILDXML, 0)

        def APPEND(self):
            return self.getToken(PlSqlParser.APPEND, 0)

        def APPEND_VALUES(self):
            return self.getToken(PlSqlParser.APPEND_VALUES, 0)

        def APPLY(self):
            return self.getToken(PlSqlParser.APPLY, 0)

        def ARCHIVELOG(self):
            return self.getToken(PlSqlParser.ARCHIVELOG, 0)

        def ARCHIVE(self):
            return self.getToken(PlSqlParser.ARCHIVE, 0)

        def ARRAY(self):
            return self.getToken(PlSqlParser.ARRAY, 0)

        def ASCII(self):
            return self.getToken(PlSqlParser.ASCII, 0)

        def ASCIISTR(self):
            return self.getToken(PlSqlParser.ASCIISTR, 0)

        def ASIN(self):
            return self.getToken(PlSqlParser.ASIN, 0)

        def ASSEMBLY(self):
            return self.getToken(PlSqlParser.ASSEMBLY, 0)

        def ASSOCIATE(self):
            return self.getToken(PlSqlParser.ASSOCIATE, 0)

        def ASYNCHRONOUS(self):
            return self.getToken(PlSqlParser.ASYNCHRONOUS, 0)

        def ASYNC(self):
            return self.getToken(PlSqlParser.ASYNC, 0)

        def ATAN2(self):
            return self.getToken(PlSqlParser.ATAN2, 0)

        def ATAN(self):
            return self.getToken(PlSqlParser.ATAN, 0)

        def AT(self):
            return self.getToken(PlSqlParser.AT, 0)

        def ATTRIBUTE(self):
            return self.getToken(PlSqlParser.ATTRIBUTE, 0)

        def ATTRIBUTES(self):
            return self.getToken(PlSqlParser.ATTRIBUTES, 0)

        def AUTHENTICATED(self):
            return self.getToken(PlSqlParser.AUTHENTICATED, 0)

        def AUTHENTICATION(self):
            return self.getToken(PlSqlParser.AUTHENTICATION, 0)

        def AUTHID(self):
            return self.getToken(PlSqlParser.AUTHID, 0)

        def AUTHORIZATION(self):
            return self.getToken(PlSqlParser.AUTHORIZATION, 0)

        def AUTOALLOCATE(self):
            return self.getToken(PlSqlParser.AUTOALLOCATE, 0)

        def AUTOEXTEND(self):
            return self.getToken(PlSqlParser.AUTOEXTEND, 0)

        def AUTOMATIC(self):
            return self.getToken(PlSqlParser.AUTOMATIC, 0)

        def AUTO(self):
            return self.getToken(PlSqlParser.AUTO, 0)

        def AVAILABILITY(self):
            return self.getToken(PlSqlParser.AVAILABILITY, 0)

        def AVG(self):
            return self.getToken(PlSqlParser.AVG, 0)

        def BACKUP(self):
            return self.getToken(PlSqlParser.BACKUP, 0)

        def BASICFILE(self):
            return self.getToken(PlSqlParser.BASICFILE, 0)

        def BASIC(self):
            return self.getToken(PlSqlParser.BASIC, 0)

        def BATCH(self):
            return self.getToken(PlSqlParser.BATCH, 0)

        def BECOME(self):
            return self.getToken(PlSqlParser.BECOME, 0)

        def BEFORE(self):
            return self.getToken(PlSqlParser.BEFORE, 0)

        def BEGIN(self):
            return self.getToken(PlSqlParser.BEGIN, 0)

        def BEGIN_OUTLINE_DATA(self):
            return self.getToken(PlSqlParser.BEGIN_OUTLINE_DATA, 0)

        def BEHALF(self):
            return self.getToken(PlSqlParser.BEHALF, 0)

        def BFILE(self):
            return self.getToken(PlSqlParser.BFILE, 0)

        def BFILENAME(self):
            return self.getToken(PlSqlParser.BFILENAME, 0)

        def BIGFILE(self):
            return self.getToken(PlSqlParser.BIGFILE, 0)

        def BINARY_DOUBLE_INFINITY(self):
            return self.getToken(PlSqlParser.BINARY_DOUBLE_INFINITY, 0)

        def BINARY_DOUBLE(self):
            return self.getToken(PlSqlParser.BINARY_DOUBLE, 0)

        def BINARY_DOUBLE_NAN(self):
            return self.getToken(PlSqlParser.BINARY_DOUBLE_NAN, 0)

        def BINARY_FLOAT_INFINITY(self):
            return self.getToken(PlSqlParser.BINARY_FLOAT_INFINITY, 0)

        def BINARY_FLOAT(self):
            return self.getToken(PlSqlParser.BINARY_FLOAT, 0)

        def BINARY_FLOAT_NAN(self):
            return self.getToken(PlSqlParser.BINARY_FLOAT_NAN, 0)

        def BINARY(self):
            return self.getToken(PlSqlParser.BINARY, 0)

        def BIND_AWARE(self):
            return self.getToken(PlSqlParser.BIND_AWARE, 0)

        def BINDING(self):
            return self.getToken(PlSqlParser.BINDING, 0)

        def BIN_TO_NUM(self):
            return self.getToken(PlSqlParser.BIN_TO_NUM, 0)

        def BITAND(self):
            return self.getToken(PlSqlParser.BITAND, 0)

        def BITMAP(self):
            return self.getToken(PlSqlParser.BITMAP, 0)

        def BITMAPS(self):
            return self.getToken(PlSqlParser.BITMAPS, 0)

        def BITMAP_TREE(self):
            return self.getToken(PlSqlParser.BITMAP_TREE, 0)

        def BITS(self):
            return self.getToken(PlSqlParser.BITS, 0)

        def BLOB(self):
            return self.getToken(PlSqlParser.BLOB, 0)

        def BLOCK(self):
            return self.getToken(PlSqlParser.BLOCK, 0)

        def BLOCK_RANGE(self):
            return self.getToken(PlSqlParser.BLOCK_RANGE, 0)

        def BLOCKSIZE(self):
            return self.getToken(PlSqlParser.BLOCKSIZE, 0)

        def BLOCKS(self):
            return self.getToken(PlSqlParser.BLOCKS, 0)

        def BODY(self):
            return self.getToken(PlSqlParser.BODY, 0)

        def BOTH(self):
            return self.getToken(PlSqlParser.BOTH, 0)

        def BOUND(self):
            return self.getToken(PlSqlParser.BOUND, 0)

        def BRANCH(self):
            return self.getToken(PlSqlParser.BRANCH, 0)

        def BREADTH(self):
            return self.getToken(PlSqlParser.BREADTH, 0)

        def BROADCAST(self):
            return self.getToken(PlSqlParser.BROADCAST, 0)

        def BUFFER_CACHE(self):
            return self.getToken(PlSqlParser.BUFFER_CACHE, 0)

        def BUFFER(self):
            return self.getToken(PlSqlParser.BUFFER, 0)

        def BUFFER_POOL(self):
            return self.getToken(PlSqlParser.BUFFER_POOL, 0)

        def BUILD(self):
            return self.getToken(PlSqlParser.BUILD, 0)

        def BULK(self):
            return self.getToken(PlSqlParser.BULK, 0)

        def BYPASS_RECURSIVE_CHECK(self):
            return self.getToken(PlSqlParser.BYPASS_RECURSIVE_CHECK, 0)

        def BYPASS_UJVC(self):
            return self.getToken(PlSqlParser.BYPASS_UJVC, 0)

        def BYTE(self):
            return self.getToken(PlSqlParser.BYTE, 0)

        def CACHE_CB(self):
            return self.getToken(PlSqlParser.CACHE_CB, 0)

        def CACHE_INSTANCES(self):
            return self.getToken(PlSqlParser.CACHE_INSTANCES, 0)

        def CACHE(self):
            return self.getToken(PlSqlParser.CACHE, 0)

        def CACHE_TEMP_TABLE(self):
            return self.getToken(PlSqlParser.CACHE_TEMP_TABLE, 0)

        def CALL(self):
            return self.getToken(PlSqlParser.CALL, 0)

        def CANCEL(self):
            return self.getToken(PlSqlParser.CANCEL, 0)

        def CARDINALITY(self):
            return self.getToken(PlSqlParser.CARDINALITY, 0)

        def CASCADE(self):
            return self.getToken(PlSqlParser.CASCADE, 0)

        def CASE(self):
            return self.getToken(PlSqlParser.CASE, 0)

        def CAST(self):
            return self.getToken(PlSqlParser.CAST, 0)

        def CATEGORY(self):
            return self.getToken(PlSqlParser.CATEGORY, 0)

        def CEIL(self):
            return self.getToken(PlSqlParser.CEIL, 0)

        def CELL_FLASH_CACHE(self):
            return self.getToken(PlSqlParser.CELL_FLASH_CACHE, 0)

        def CERTIFICATE(self):
            return self.getToken(PlSqlParser.CERTIFICATE, 0)

        def CFILE(self):
            return self.getToken(PlSqlParser.CFILE, 0)

        def CHAINED(self):
            return self.getToken(PlSqlParser.CHAINED, 0)

        def CHANGE_DUPKEY_ERROR_INDEX(self):
            return self.getToken(PlSqlParser.CHANGE_DUPKEY_ERROR_INDEX, 0)

        def CHANGE(self):
            return self.getToken(PlSqlParser.CHANGE, 0)

        def CHARACTER(self):
            return self.getToken(PlSqlParser.CHARACTER, 0)

        def CHAR_CS(self):
            return self.getToken(PlSqlParser.CHAR_CS, 0)

        def CHARTOROWID(self):
            return self.getToken(PlSqlParser.CHARTOROWID, 0)

        def CHECK_ACL_REWRITE(self):
            return self.getToken(PlSqlParser.CHECK_ACL_REWRITE, 0)

        def CHECKPOINT(self):
            return self.getToken(PlSqlParser.CHECKPOINT, 0)

        def CHILD(self):
            return self.getToken(PlSqlParser.CHILD, 0)

        def CHOOSE(self):
            return self.getToken(PlSqlParser.CHOOSE, 0)

        def CHR(self):
            return self.getToken(PlSqlParser.CHR, 0)

        def CHUNK(self):
            return self.getToken(PlSqlParser.CHUNK, 0)

        def CLASS(self):
            return self.getToken(PlSqlParser.CLASS, 0)

        def CLEAR(self):
            return self.getToken(PlSqlParser.CLEAR, 0)

        def CLOB(self):
            return self.getToken(PlSqlParser.CLOB, 0)

        def CLONE(self):
            return self.getToken(PlSqlParser.CLONE, 0)

        def CLOSE_CACHED_OPEN_CURSORS(self):
            return self.getToken(PlSqlParser.CLOSE_CACHED_OPEN_CURSORS, 0)

        def CLOSE(self):
            return self.getToken(PlSqlParser.CLOSE, 0)

        def CLUSTER_BY_ROWID(self):
            return self.getToken(PlSqlParser.CLUSTER_BY_ROWID, 0)

        def CLUSTER_ID(self):
            return self.getToken(PlSqlParser.CLUSTER_ID, 0)

        def CLUSTERING_FACTOR(self):
            return self.getToken(PlSqlParser.CLUSTERING_FACTOR, 0)

        def CLUSTER_PROBABILITY(self):
            return self.getToken(PlSqlParser.CLUSTER_PROBABILITY, 0)

        def CLUSTER_SET(self):
            return self.getToken(PlSqlParser.CLUSTER_SET, 0)

        def COALESCE(self):
            return self.getToken(PlSqlParser.COALESCE, 0)

        def COALESCE_SQ(self):
            return self.getToken(PlSqlParser.COALESCE_SQ, 0)

        def COARSE(self):
            return self.getToken(PlSqlParser.COARSE, 0)

        def CO_AUTH_IND(self):
            return self.getToken(PlSqlParser.CO_AUTH_IND, 0)

        def COLD(self):
            return self.getToken(PlSqlParser.COLD, 0)

        def COLLECT(self):
            return self.getToken(PlSqlParser.COLLECT, 0)

        def COLUMNAR(self):
            return self.getToken(PlSqlParser.COLUMNAR, 0)

        def COLUMN_AUTH_INDICATOR(self):
            return self.getToken(PlSqlParser.COLUMN_AUTH_INDICATOR, 0)

        def COLUMN(self):
            return self.getToken(PlSqlParser.COLUMN, 0)

        def COLUMNS(self):
            return self.getToken(PlSqlParser.COLUMNS, 0)

        def COLUMN_STATS(self):
            return self.getToken(PlSqlParser.COLUMN_STATS, 0)

        def COLUMN_VALUE(self):
            return self.getToken(PlSqlParser.COLUMN_VALUE, 0)

        def COMMENT(self):
            return self.getToken(PlSqlParser.COMMENT, 0)

        def COMMIT(self):
            return self.getToken(PlSqlParser.COMMIT, 0)

        def COMMITTED(self):
            return self.getToken(PlSqlParser.COMMITTED, 0)

        def COMPACT(self):
            return self.getToken(PlSqlParser.COMPACT, 0)

        def COMPATIBILITY(self):
            return self.getToken(PlSqlParser.COMPATIBILITY, 0)

        def COMPILE(self):
            return self.getToken(PlSqlParser.COMPILE, 0)

        def COMPLETE(self):
            return self.getToken(PlSqlParser.COMPLETE, 0)

        def COMPLIANCE(self):
            return self.getToken(PlSqlParser.COMPLIANCE, 0)

        def COMPOSE(self):
            return self.getToken(PlSqlParser.COMPOSE, 0)

        def COMPOSITE_LIMIT(self):
            return self.getToken(PlSqlParser.COMPOSITE_LIMIT, 0)

        def COMPOSITE(self):
            return self.getToken(PlSqlParser.COMPOSITE, 0)

        def COMPOUND(self):
            return self.getToken(PlSqlParser.COMPOUND, 0)

        def COMPUTE(self):
            return self.getToken(PlSqlParser.COMPUTE, 0)

        def CONCAT(self):
            return self.getToken(PlSqlParser.CONCAT, 0)

        def CONFIRM(self):
            return self.getToken(PlSqlParser.CONFIRM, 0)

        def CONFORMING(self):
            return self.getToken(PlSqlParser.CONFORMING, 0)

        def CONNECT_BY_CB_WHR_ONLY(self):
            return self.getToken(PlSqlParser.CONNECT_BY_CB_WHR_ONLY, 0)

        def CONNECT_BY_COMBINE_SW(self):
            return self.getToken(PlSqlParser.CONNECT_BY_COMBINE_SW, 0)

        def CONNECT_BY_COST_BASED(self):
            return self.getToken(PlSqlParser.CONNECT_BY_COST_BASED, 0)

        def CONNECT_BY_ELIM_DUPS(self):
            return self.getToken(PlSqlParser.CONNECT_BY_ELIM_DUPS, 0)

        def CONNECT_BY_FILTERING(self):
            return self.getToken(PlSqlParser.CONNECT_BY_FILTERING, 0)

        def CONNECT_BY_ISCYCLE(self):
            return self.getToken(PlSqlParser.CONNECT_BY_ISCYCLE, 0)

        def CONNECT_BY_ISLEAF(self):
            return self.getToken(PlSqlParser.CONNECT_BY_ISLEAF, 0)

        def CONNECT_BY_ROOT(self):
            return self.getToken(PlSqlParser.CONNECT_BY_ROOT, 0)

        def CONNECT_TIME(self):
            return self.getToken(PlSqlParser.CONNECT_TIME, 0)

        def CONSIDER(self):
            return self.getToken(PlSqlParser.CONSIDER, 0)

        def CONSISTENT(self):
            return self.getToken(PlSqlParser.CONSISTENT, 0)

        def CONSTANT(self):
            return self.getToken(PlSqlParser.CONSTANT, 0)

        def CONST(self):
            return self.getToken(PlSqlParser.CONST, 0)

        def CONSTRAINT(self):
            return self.getToken(PlSqlParser.CONSTRAINT, 0)

        def CONSTRAINTS(self):
            return self.getToken(PlSqlParser.CONSTRAINTS, 0)

        def CONTAINER(self):
            return self.getToken(PlSqlParser.CONTAINER, 0)

        def CONTENT(self):
            return self.getToken(PlSqlParser.CONTENT, 0)

        def CONTENTS(self):
            return self.getToken(PlSqlParser.CONTENTS, 0)

        def CONTEXT(self):
            return self.getToken(PlSqlParser.CONTEXT, 0)

        def CONTINUE(self):
            return self.getToken(PlSqlParser.CONTINUE, 0)

        def CONTROLFILE(self):
            return self.getToken(PlSqlParser.CONTROLFILE, 0)

        def CONVERT(self):
            return self.getToken(PlSqlParser.CONVERT, 0)

        def CORR_K(self):
            return self.getToken(PlSqlParser.CORR_K, 0)

        def CORR(self):
            return self.getToken(PlSqlParser.CORR, 0)

        def CORR_S(self):
            return self.getToken(PlSqlParser.CORR_S, 0)

        def CORRUPTION(self):
            return self.getToken(PlSqlParser.CORRUPTION, 0)

        def CORRUPT_XID_ALL(self):
            return self.getToken(PlSqlParser.CORRUPT_XID_ALL, 0)

        def CORRUPT_XID(self):
            return self.getToken(PlSqlParser.CORRUPT_XID, 0)

        def COSH(self):
            return self.getToken(PlSqlParser.COSH, 0)

        def COS(self):
            return self.getToken(PlSqlParser.COS, 0)

        def COST(self):
            return self.getToken(PlSqlParser.COST, 0)

        def COST_XML_QUERY_REWRITE(self):
            return self.getToken(PlSqlParser.COST_XML_QUERY_REWRITE, 0)

        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def COVAR_POP(self):
            return self.getToken(PlSqlParser.COVAR_POP, 0)

        def COVAR_SAMP(self):
            return self.getToken(PlSqlParser.COVAR_SAMP, 0)

        def CPU_COSTING(self):
            return self.getToken(PlSqlParser.CPU_COSTING, 0)

        def CPU_PER_CALL(self):
            return self.getToken(PlSqlParser.CPU_PER_CALL, 0)

        def CPU_PER_SESSION(self):
            return self.getToken(PlSqlParser.CPU_PER_SESSION, 0)

        def CRASH(self):
            return self.getToken(PlSqlParser.CRASH, 0)

        def CREATE_STORED_OUTLINES(self):
            return self.getToken(PlSqlParser.CREATE_STORED_OUTLINES, 0)

        def CREATION(self):
            return self.getToken(PlSqlParser.CREATION, 0)

        def CROSSEDITION(self):
            return self.getToken(PlSqlParser.CROSSEDITION, 0)

        def CROSS(self):
            return self.getToken(PlSqlParser.CROSS, 0)

        def CSCONVERT(self):
            return self.getToken(PlSqlParser.CSCONVERT, 0)

        def CUBE_GB(self):
            return self.getToken(PlSqlParser.CUBE_GB, 0)

        def CUBE(self):
            return self.getToken(PlSqlParser.CUBE, 0)

        def CUME_DISTM(self):
            return self.getToken(PlSqlParser.CUME_DISTM, 0)

        def CUME_DIST(self):
            return self.getToken(PlSqlParser.CUME_DIST, 0)

        def CURRENT_DATE(self):
            return self.getToken(PlSqlParser.CURRENT_DATE, 0)

        def CURRENT(self):
            return self.getToken(PlSqlParser.CURRENT, 0)

        def CURRENT_SCHEMA(self):
            return self.getToken(PlSqlParser.CURRENT_SCHEMA, 0)

        def CURRENT_TIME(self):
            return self.getToken(PlSqlParser.CURRENT_TIME, 0)

        def CURRENT_TIMESTAMP(self):
            return self.getToken(PlSqlParser.CURRENT_TIMESTAMP, 0)

        def CURRENT_USER(self):
            return self.getToken(PlSqlParser.CURRENT_USER, 0)

        def CURRENTV(self):
            return self.getToken(PlSqlParser.CURRENTV, 0)

        def CURSOR(self):
            return self.getToken(PlSqlParser.CURSOR, 0)

        def CURSOR_SHARING_EXACT(self):
            return self.getToken(PlSqlParser.CURSOR_SHARING_EXACT, 0)

        def CURSOR_SPECIFIC_SEGMENT(self):
            return self.getToken(PlSqlParser.CURSOR_SPECIFIC_SEGMENT, 0)

        def CV(self):
            return self.getToken(PlSqlParser.CV, 0)

        def CYCLE(self):
            return self.getToken(PlSqlParser.CYCLE, 0)

        def DANGLING(self):
            return self.getToken(PlSqlParser.DANGLING, 0)

        def DATABASE(self):
            return self.getToken(PlSqlParser.DATABASE, 0)

        def DATAFILE(self):
            return self.getToken(PlSqlParser.DATAFILE, 0)

        def DATAFILES(self):
            return self.getToken(PlSqlParser.DATAFILES, 0)

        def DATA(self):
            return self.getToken(PlSqlParser.DATA, 0)

        def DATAOBJNO(self):
            return self.getToken(PlSqlParser.DATAOBJNO, 0)

        def DATAOBJ_TO_PARTITION(self):
            return self.getToken(PlSqlParser.DATAOBJ_TO_PARTITION, 0)

        def DATE_MODE(self):
            return self.getToken(PlSqlParser.DATE_MODE, 0)

        def DAY(self):
            return self.getToken(PlSqlParser.DAY, 0)

        def DBA(self):
            return self.getToken(PlSqlParser.DBA, 0)

        def DBA_RECYCLEBIN(self):
            return self.getToken(PlSqlParser.DBA_RECYCLEBIN, 0)

        def DBMS_STATS(self):
            return self.getToken(PlSqlParser.DBMS_STATS, 0)

        def DB_ROLE_CHANGE(self):
            return self.getToken(PlSqlParser.DB_ROLE_CHANGE, 0)

        def DBTIMEZONE(self):
            return self.getToken(PlSqlParser.DBTIMEZONE, 0)

        def DB_VERSION(self):
            return self.getToken(PlSqlParser.DB_VERSION, 0)

        def DDL(self):
            return self.getToken(PlSqlParser.DDL, 0)

        def DEALLOCATE(self):
            return self.getToken(PlSqlParser.DEALLOCATE, 0)

        def DEBUGGER(self):
            return self.getToken(PlSqlParser.DEBUGGER, 0)

        def DEBUG(self):
            return self.getToken(PlSqlParser.DEBUG, 0)

        def DECLARE(self):
            return self.getToken(PlSqlParser.DECLARE, 0)

        def DEC(self):
            return self.getToken(PlSqlParser.DEC, 0)

        def DECOMPOSE(self):
            return self.getToken(PlSqlParser.DECOMPOSE, 0)

        def DECREMENT(self):
            return self.getToken(PlSqlParser.DECREMENT, 0)

        def DECR(self):
            return self.getToken(PlSqlParser.DECR, 0)

        def DECRYPT(self):
            return self.getToken(PlSqlParser.DECRYPT, 0)

        def DEDUPLICATE(self):
            return self.getToken(PlSqlParser.DEDUPLICATE, 0)

        def DEFAULTS(self):
            return self.getToken(PlSqlParser.DEFAULTS, 0)

        def DEFERRABLE(self):
            return self.getToken(PlSqlParser.DEFERRABLE, 0)

        def DEFERRED(self):
            return self.getToken(PlSqlParser.DEFERRED, 0)

        def DEFINED(self):
            return self.getToken(PlSqlParser.DEFINED, 0)

        def DEFINER(self):
            return self.getToken(PlSqlParser.DEFINER, 0)

        def DEGREE(self):
            return self.getToken(PlSqlParser.DEGREE, 0)

        def DELAY(self):
            return self.getToken(PlSqlParser.DELAY, 0)

        def DELETEXML(self):
            return self.getToken(PlSqlParser.DELETEXML, 0)

        def DEMAND(self):
            return self.getToken(PlSqlParser.DEMAND, 0)

        def DENSE_RANKM(self):
            return self.getToken(PlSqlParser.DENSE_RANKM, 0)

        def DENSE_RANK(self):
            return self.getToken(PlSqlParser.DENSE_RANK, 0)

        def DEPENDENT(self):
            return self.getToken(PlSqlParser.DEPENDENT, 0)

        def DEPTH(self):
            return self.getToken(PlSqlParser.DEPTH, 0)

        def DEQUEUE(self):
            return self.getToken(PlSqlParser.DEQUEUE, 0)

        def DEREF(self):
            return self.getToken(PlSqlParser.DEREF, 0)

        def DEREF_NO_REWRITE(self):
            return self.getToken(PlSqlParser.DEREF_NO_REWRITE, 0)

        def DETACHED(self):
            return self.getToken(PlSqlParser.DETACHED, 0)

        def DETERMINES(self):
            return self.getToken(PlSqlParser.DETERMINES, 0)

        def DICTIONARY(self):
            return self.getToken(PlSqlParser.DICTIONARY, 0)

        def DIMENSION(self):
            return self.getToken(PlSqlParser.DIMENSION, 0)

        def DIRECT_LOAD(self):
            return self.getToken(PlSqlParser.DIRECT_LOAD, 0)

        def DIRECTORY(self):
            return self.getToken(PlSqlParser.DIRECTORY, 0)

        def DIRECT_PATH(self):
            return self.getToken(PlSqlParser.DIRECT_PATH, 0)

        def DISABLE(self):
            return self.getToken(PlSqlParser.DISABLE, 0)

        def DISABLE_PRESET(self):
            return self.getToken(PlSqlParser.DISABLE_PRESET, 0)

        def DISABLE_RPKE(self):
            return self.getToken(PlSqlParser.DISABLE_RPKE, 0)

        def DISALLOW(self):
            return self.getToken(PlSqlParser.DISALLOW, 0)

        def DISASSOCIATE(self):
            return self.getToken(PlSqlParser.DISASSOCIATE, 0)

        def DISCONNECT(self):
            return self.getToken(PlSqlParser.DISCONNECT, 0)

        def DISKGROUP(self):
            return self.getToken(PlSqlParser.DISKGROUP, 0)

        def DISK(self):
            return self.getToken(PlSqlParser.DISK, 0)

        def DISKS(self):
            return self.getToken(PlSqlParser.DISKS, 0)

        def DISMOUNT(self):
            return self.getToken(PlSqlParser.DISMOUNT, 0)

        def DISTINGUISHED(self):
            return self.getToken(PlSqlParser.DISTINGUISHED, 0)

        def DISTRIBUTED(self):
            return self.getToken(PlSqlParser.DISTRIBUTED, 0)

        def DML(self):
            return self.getToken(PlSqlParser.DML, 0)

        def DML_UPDATE(self):
            return self.getToken(PlSqlParser.DML_UPDATE, 0)

        def DOCFIDELITY(self):
            return self.getToken(PlSqlParser.DOCFIDELITY, 0)

        def DOCUMENT(self):
            return self.getToken(PlSqlParser.DOCUMENT, 0)

        def DOMAIN_INDEX_FILTER(self):
            return self.getToken(PlSqlParser.DOMAIN_INDEX_FILTER, 0)

        def DOMAIN_INDEX_NO_SORT(self):
            return self.getToken(PlSqlParser.DOMAIN_INDEX_NO_SORT, 0)

        def DOMAIN_INDEX_SORT(self):
            return self.getToken(PlSqlParser.DOMAIN_INDEX_SORT, 0)

        def DOUBLE(self):
            return self.getToken(PlSqlParser.DOUBLE, 0)

        def DOWNGRADE(self):
            return self.getToken(PlSqlParser.DOWNGRADE, 0)

        def DRIVING_SITE(self):
            return self.getToken(PlSqlParser.DRIVING_SITE, 0)

        def DROP_COLUMN(self):
            return self.getToken(PlSqlParser.DROP_COLUMN, 0)

        def DROP_GROUP(self):
            return self.getToken(PlSqlParser.DROP_GROUP, 0)

        def DST_UPGRADE_INSERT_CONV(self):
            return self.getToken(PlSqlParser.DST_UPGRADE_INSERT_CONV, 0)

        def DUMP(self):
            return self.getToken(PlSqlParser.DUMP, 0)

        def DYNAMIC(self):
            return self.getToken(PlSqlParser.DYNAMIC, 0)

        def DYNAMIC_SAMPLING_EST_CDN(self):
            return self.getToken(PlSqlParser.DYNAMIC_SAMPLING_EST_CDN, 0)

        def DYNAMIC_SAMPLING(self):
            return self.getToken(PlSqlParser.DYNAMIC_SAMPLING, 0)

        def EACH(self):
            return self.getToken(PlSqlParser.EACH, 0)

        def EDITIONING(self):
            return self.getToken(PlSqlParser.EDITIONING, 0)

        def EDITION(self):
            return self.getToken(PlSqlParser.EDITION, 0)

        def EDITIONS(self):
            return self.getToken(PlSqlParser.EDITIONS, 0)

        def ELEMENT(self):
            return self.getToken(PlSqlParser.ELEMENT, 0)

        def ELIMINATE_JOIN(self):
            return self.getToken(PlSqlParser.ELIMINATE_JOIN, 0)

        def ELIMINATE_OBY(self):
            return self.getToken(PlSqlParser.ELIMINATE_OBY, 0)

        def ELIMINATE_OUTER_JOIN(self):
            return self.getToken(PlSqlParser.ELIMINATE_OUTER_JOIN, 0)

        def EMPTY_BLOB(self):
            return self.getToken(PlSqlParser.EMPTY_BLOB, 0)

        def EMPTY_CLOB(self):
            return self.getToken(PlSqlParser.EMPTY_CLOB, 0)

        def EMPTY_(self):
            return self.getToken(PlSqlParser.EMPTY_, 0)

        def ENABLE(self):
            return self.getToken(PlSqlParser.ENABLE, 0)

        def ENABLE_PRESET(self):
            return self.getToken(PlSqlParser.ENABLE_PRESET, 0)

        def ENCODING(self):
            return self.getToken(PlSqlParser.ENCODING, 0)

        def ENCRYPTION(self):
            return self.getToken(PlSqlParser.ENCRYPTION, 0)

        def ENCRYPT(self):
            return self.getToken(PlSqlParser.ENCRYPT, 0)

        def END_OUTLINE_DATA(self):
            return self.getToken(PlSqlParser.END_OUTLINE_DATA, 0)

        def ENFORCED(self):
            return self.getToken(PlSqlParser.ENFORCED, 0)

        def ENFORCE(self):
            return self.getToken(PlSqlParser.ENFORCE, 0)

        def ENQUEUE(self):
            return self.getToken(PlSqlParser.ENQUEUE, 0)

        def ENTERPRISE(self):
            return self.getToken(PlSqlParser.ENTERPRISE, 0)

        def ENTITYESCAPING(self):
            return self.getToken(PlSqlParser.ENTITYESCAPING, 0)

        def ENTRY(self):
            return self.getToken(PlSqlParser.ENTRY, 0)

        def ERROR_ARGUMENT(self):
            return self.getToken(PlSqlParser.ERROR_ARGUMENT, 0)

        def ERROR(self):
            return self.getToken(PlSqlParser.ERROR, 0)

        def ERROR_ON_OVERLAP_TIME(self):
            return self.getToken(PlSqlParser.ERROR_ON_OVERLAP_TIME, 0)

        def ERRORS(self):
            return self.getToken(PlSqlParser.ERRORS, 0)

        def ESCAPE(self):
            return self.getToken(PlSqlParser.ESCAPE, 0)

        def ESTIMATE(self):
            return self.getToken(PlSqlParser.ESTIMATE, 0)

        def EVALNAME(self):
            return self.getToken(PlSqlParser.EVALNAME, 0)

        def EVALUATION(self):
            return self.getToken(PlSqlParser.EVALUATION, 0)

        def EVENTS(self):
            return self.getToken(PlSqlParser.EVENTS, 0)

        def EVERY(self):
            return self.getToken(PlSqlParser.EVERY, 0)

        def EXCEPTIONS(self):
            return self.getToken(PlSqlParser.EXCEPTIONS, 0)

        def EXCEPT(self):
            return self.getToken(PlSqlParser.EXCEPT, 0)

        def EXCHANGE(self):
            return self.getToken(PlSqlParser.EXCHANGE, 0)

        def EXCLUDE(self):
            return self.getToken(PlSqlParser.EXCLUDE, 0)

        def EXCLUDING(self):
            return self.getToken(PlSqlParser.EXCLUDING, 0)

        def EXECUTE(self):
            return self.getToken(PlSqlParser.EXECUTE, 0)

        def EXEMPT(self):
            return self.getToken(PlSqlParser.EXEMPT, 0)

        def EXISTSNODE(self):
            return self.getToken(PlSqlParser.EXISTSNODE, 0)

        def EXPAND_GSET_TO_UNION(self):
            return self.getToken(PlSqlParser.EXPAND_GSET_TO_UNION, 0)

        def EXPAND_TABLE(self):
            return self.getToken(PlSqlParser.EXPAND_TABLE, 0)

        def EXPIRE(self):
            return self.getToken(PlSqlParser.EXPIRE, 0)

        def EXPLAIN(self):
            return self.getToken(PlSqlParser.EXPLAIN, 0)

        def EXPLOSION(self):
            return self.getToken(PlSqlParser.EXPLOSION, 0)

        def EXP(self):
            return self.getToken(PlSqlParser.EXP, 0)

        def EXPORT(self):
            return self.getToken(PlSqlParser.EXPORT, 0)

        def EXPR_CORR_CHECK(self):
            return self.getToken(PlSqlParser.EXPR_CORR_CHECK, 0)

        def EXTENDS(self):
            return self.getToken(PlSqlParser.EXTENDS, 0)

        def EXTENT(self):
            return self.getToken(PlSqlParser.EXTENT, 0)

        def EXTENTS(self):
            return self.getToken(PlSqlParser.EXTENTS, 0)

        def EXTERNALLY(self):
            return self.getToken(PlSqlParser.EXTERNALLY, 0)

        def EXTERNAL(self):
            return self.getToken(PlSqlParser.EXTERNAL, 0)

        def EXTRACT(self):
            return self.getToken(PlSqlParser.EXTRACT, 0)

        def EXTRACTVALUE(self):
            return self.getToken(PlSqlParser.EXTRACTVALUE, 0)

        def EXTRA(self):
            return self.getToken(PlSqlParser.EXTRA, 0)

        def FACILITY(self):
            return self.getToken(PlSqlParser.FACILITY, 0)

        def FACT(self):
            return self.getToken(PlSqlParser.FACT, 0)

        def FACTORIZE_JOIN(self):
            return self.getToken(PlSqlParser.FACTORIZE_JOIN, 0)

        def FAILED_LOGIN_ATTEMPTS(self):
            return self.getToken(PlSqlParser.FAILED_LOGIN_ATTEMPTS, 0)

        def FAILED(self):
            return self.getToken(PlSqlParser.FAILED, 0)

        def FAILGROUP(self):
            return self.getToken(PlSqlParser.FAILGROUP, 0)

        def FALSE(self):
            return self.getToken(PlSqlParser.FALSE, 0)

        def FAST(self):
            return self.getToken(PlSqlParser.FAST, 0)

        def FBTSCAN(self):
            return self.getToken(PlSqlParser.FBTSCAN, 0)

        def FEATURE_ID(self):
            return self.getToken(PlSqlParser.FEATURE_ID, 0)

        def FEATURE_SET(self):
            return self.getToken(PlSqlParser.FEATURE_SET, 0)

        def FEATURE_VALUE(self):
            return self.getToken(PlSqlParser.FEATURE_VALUE, 0)

        def FILE(self):
            return self.getToken(PlSqlParser.FILE, 0)

        def FILESYSTEM_LIKE_LOGGING(self):
            return self.getToken(PlSqlParser.FILESYSTEM_LIKE_LOGGING, 0)

        def FILTER(self):
            return self.getToken(PlSqlParser.FILTER, 0)

        def FINAL(self):
            return self.getToken(PlSqlParser.FINAL, 0)

        def FINE(self):
            return self.getToken(PlSqlParser.FINE, 0)

        def FINISH(self):
            return self.getToken(PlSqlParser.FINISH, 0)

        def FIRSTM(self):
            return self.getToken(PlSqlParser.FIRSTM, 0)

        def FIRST(self):
            return self.getToken(PlSqlParser.FIRST, 0)

        def FIRST_ROWS(self):
            return self.getToken(PlSqlParser.FIRST_ROWS, 0)

        def FIRST_VALUE(self):
            return self.getToken(PlSqlParser.FIRST_VALUE, 0)

        def FLAGGER(self):
            return self.getToken(PlSqlParser.FLAGGER, 0)

        def FLASHBACK(self):
            return self.getToken(PlSqlParser.FLASHBACK, 0)

        def FLASH_CACHE(self):
            return self.getToken(PlSqlParser.FLASH_CACHE, 0)

        def FLOB(self):
            return self.getToken(PlSqlParser.FLOB, 0)

        def FLOOR(self):
            return self.getToken(PlSqlParser.FLOOR, 0)

        def FLUSH(self):
            return self.getToken(PlSqlParser.FLUSH, 0)

        def FOLDER(self):
            return self.getToken(PlSqlParser.FOLDER, 0)

        def FOLLOWING(self):
            return self.getToken(PlSqlParser.FOLLOWING, 0)

        def FOLLOWS(self):
            return self.getToken(PlSqlParser.FOLLOWS, 0)

        def FORCE(self):
            return self.getToken(PlSqlParser.FORCE, 0)

        def FORCE_XML_QUERY_REWRITE(self):
            return self.getToken(PlSqlParser.FORCE_XML_QUERY_REWRITE, 0)

        def FOREIGN(self):
            return self.getToken(PlSqlParser.FOREIGN, 0)

        def FOREVER(self):
            return self.getToken(PlSqlParser.FOREVER, 0)

        def FORWARD(self):
            return self.getToken(PlSqlParser.FORWARD, 0)

        def FRAGMENT_NUMBER(self):
            return self.getToken(PlSqlParser.FRAGMENT_NUMBER, 0)

        def FREELIST(self):
            return self.getToken(PlSqlParser.FREELIST, 0)

        def FREELISTS(self):
            return self.getToken(PlSqlParser.FREELISTS, 0)

        def FREEPOOLS(self):
            return self.getToken(PlSqlParser.FREEPOOLS, 0)

        def FRESH(self):
            return self.getToken(PlSqlParser.FRESH, 0)

        def FROM_TZ(self):
            return self.getToken(PlSqlParser.FROM_TZ, 0)

        def FULL(self):
            return self.getToken(PlSqlParser.FULL, 0)

        def FULL_OUTER_JOIN_TO_OUTER(self):
            return self.getToken(PlSqlParser.FULL_OUTER_JOIN_TO_OUTER, 0)

        def FUNCTION(self):
            return self.getToken(PlSqlParser.FUNCTION, 0)

        def FUNCTIONS(self):
            return self.getToken(PlSqlParser.FUNCTIONS, 0)

        def GATHER_PLAN_STATISTICS(self):
            return self.getToken(PlSqlParser.GATHER_PLAN_STATISTICS, 0)

        def GBY_CONC_ROLLUP(self):
            return self.getToken(PlSqlParser.GBY_CONC_ROLLUP, 0)

        def GBY_PUSHDOWN(self):
            return self.getToken(PlSqlParser.GBY_PUSHDOWN, 0)

        def GENERATED(self):
            return self.getToken(PlSqlParser.GENERATED, 0)

        def GLOBALLY(self):
            return self.getToken(PlSqlParser.GLOBALLY, 0)

        def GLOBAL(self):
            return self.getToken(PlSqlParser.GLOBAL, 0)

        def GLOBAL_NAME(self):
            return self.getToken(PlSqlParser.GLOBAL_NAME, 0)

        def GLOBAL_TOPIC_ENABLED(self):
            return self.getToken(PlSqlParser.GLOBAL_TOPIC_ENABLED, 0)

        def GREATEST(self):
            return self.getToken(PlSqlParser.GREATEST, 0)

        def GROUP_BY(self):
            return self.getToken(PlSqlParser.GROUP_BY, 0)

        def GROUP_ID(self):
            return self.getToken(PlSqlParser.GROUP_ID, 0)

        def GROUPING_ID(self):
            return self.getToken(PlSqlParser.GROUPING_ID, 0)

        def GROUPING(self):
            return self.getToken(PlSqlParser.GROUPING, 0)

        def GROUPS(self):
            return self.getToken(PlSqlParser.GROUPS, 0)

        def GUARANTEED(self):
            return self.getToken(PlSqlParser.GUARANTEED, 0)

        def GUARANTEE(self):
            return self.getToken(PlSqlParser.GUARANTEE, 0)

        def GUARD(self):
            return self.getToken(PlSqlParser.GUARD, 0)

        def HASH_AJ(self):
            return self.getToken(PlSqlParser.HASH_AJ, 0)

        def HASHKEYS(self):
            return self.getToken(PlSqlParser.HASHKEYS, 0)

        def HASH(self):
            return self.getToken(PlSqlParser.HASH, 0)

        def HASH_SJ(self):
            return self.getToken(PlSqlParser.HASH_SJ, 0)

        def HEADER(self):
            return self.getToken(PlSqlParser.HEADER, 0)

        def HEAP(self):
            return self.getToken(PlSqlParser.HEAP, 0)

        def HELP(self):
            return self.getToken(PlSqlParser.HELP, 0)

        def HEXTORAW(self):
            return self.getToken(PlSqlParser.HEXTORAW, 0)

        def HEXTOREF(self):
            return self.getToken(PlSqlParser.HEXTOREF, 0)

        def HIDDEN_KEYWORD(self):
            return self.getToken(PlSqlParser.HIDDEN_KEYWORD, 0)

        def HIDE(self):
            return self.getToken(PlSqlParser.HIDE, 0)

        def HIERARCHY(self):
            return self.getToken(PlSqlParser.HIERARCHY, 0)

        def HIGH(self):
            return self.getToken(PlSqlParser.HIGH, 0)

        def HINTSET_BEGIN(self):
            return self.getToken(PlSqlParser.HINTSET_BEGIN, 0)

        def HINTSET_END(self):
            return self.getToken(PlSqlParser.HINTSET_END, 0)

        def HOT(self):
            return self.getToken(PlSqlParser.HOT, 0)

        def HOUR(self):
            return self.getToken(PlSqlParser.HOUR, 0)

        def HWM_BROKERED(self):
            return self.getToken(PlSqlParser.HWM_BROKERED, 0)

        def HYBRID(self):
            return self.getToken(PlSqlParser.HYBRID, 0)

        def IDENTIFIER(self):
            return self.getToken(PlSqlParser.IDENTIFIER, 0)

        def IDENTITY(self):
            return self.getToken(PlSqlParser.IDENTITY, 0)

        def IDGENERATORS(self):
            return self.getToken(PlSqlParser.IDGENERATORS, 0)

        def IDLE_TIME(self):
            return self.getToken(PlSqlParser.IDLE_TIME, 0)

        def ID(self):
            return self.getToken(PlSqlParser.ID, 0)

        def IF(self):
            return self.getToken(PlSqlParser.IF, 0)

        def IGNORE(self):
            return self.getToken(PlSqlParser.IGNORE, 0)

        def IGNORE_OPTIM_EMBEDDED_HINTS(self):
            return self.getToken(PlSqlParser.IGNORE_OPTIM_EMBEDDED_HINTS, 0)

        def IGNORE_ROW_ON_DUPKEY_INDEX(self):
            return self.getToken(PlSqlParser.IGNORE_ROW_ON_DUPKEY_INDEX, 0)

        def IGNORE_WHERE_CLAUSE(self):
            return self.getToken(PlSqlParser.IGNORE_WHERE_CLAUSE, 0)

        def IMMEDIATE(self):
            return self.getToken(PlSqlParser.IMMEDIATE, 0)

        def IMPACT(self):
            return self.getToken(PlSqlParser.IMPACT, 0)

        def IMPORT(self):
            return self.getToken(PlSqlParser.IMPORT, 0)

        def INCLUDE(self):
            return self.getToken(PlSqlParser.INCLUDE, 0)

        def INCLUDE_VERSION(self):
            return self.getToken(PlSqlParser.INCLUDE_VERSION, 0)

        def INCLUDING(self):
            return self.getToken(PlSqlParser.INCLUDING, 0)

        def INCREMENTAL(self):
            return self.getToken(PlSqlParser.INCREMENTAL, 0)

        def INCREMENT(self):
            return self.getToken(PlSqlParser.INCREMENT, 0)

        def INCR(self):
            return self.getToken(PlSqlParser.INCR, 0)

        def INDENT(self):
            return self.getToken(PlSqlParser.INDENT, 0)

        def INDEX_ASC(self):
            return self.getToken(PlSqlParser.INDEX_ASC, 0)

        def INDEX_COMBINE(self):
            return self.getToken(PlSqlParser.INDEX_COMBINE, 0)

        def INDEX_DESC(self):
            return self.getToken(PlSqlParser.INDEX_DESC, 0)

        def INDEXED(self):
            return self.getToken(PlSqlParser.INDEXED, 0)

        def INDEXES(self):
            return self.getToken(PlSqlParser.INDEXES, 0)

        def INDEX_FFS(self):
            return self.getToken(PlSqlParser.INDEX_FFS, 0)

        def INDEX_FILTER(self):
            return self.getToken(PlSqlParser.INDEX_FILTER, 0)

        def INDEX_JOIN(self):
            return self.getToken(PlSqlParser.INDEX_JOIN, 0)

        def INDEX_ROWS(self):
            return self.getToken(PlSqlParser.INDEX_ROWS, 0)

        def INDEX_RRS(self):
            return self.getToken(PlSqlParser.INDEX_RRS, 0)

        def INDEX_RS_ASC(self):
            return self.getToken(PlSqlParser.INDEX_RS_ASC, 0)

        def INDEX_RS_DESC(self):
            return self.getToken(PlSqlParser.INDEX_RS_DESC, 0)

        def INDEX_RS(self):
            return self.getToken(PlSqlParser.INDEX_RS, 0)

        def INDEX_SCAN(self):
            return self.getToken(PlSqlParser.INDEX_SCAN, 0)

        def INDEX_SKIP_SCAN(self):
            return self.getToken(PlSqlParser.INDEX_SKIP_SCAN, 0)

        def INDEX_SS_ASC(self):
            return self.getToken(PlSqlParser.INDEX_SS_ASC, 0)

        def INDEX_SS_DESC(self):
            return self.getToken(PlSqlParser.INDEX_SS_DESC, 0)

        def INDEX_SS(self):
            return self.getToken(PlSqlParser.INDEX_SS, 0)

        def INDEX_STATS(self):
            return self.getToken(PlSqlParser.INDEX_STATS, 0)

        def INDEXTYPE(self):
            return self.getToken(PlSqlParser.INDEXTYPE, 0)

        def INDEXTYPES(self):
            return self.getToken(PlSqlParser.INDEXTYPES, 0)

        def INDICATOR(self):
            return self.getToken(PlSqlParser.INDICATOR, 0)

        def INFINITE(self):
            return self.getToken(PlSqlParser.INFINITE, 0)

        def INFORMATIONAL(self):
            return self.getToken(PlSqlParser.INFORMATIONAL, 0)

        def INITCAP(self):
            return self.getToken(PlSqlParser.INITCAP, 0)

        def INITIALIZED(self):
            return self.getToken(PlSqlParser.INITIALIZED, 0)

        def INITIALLY(self):
            return self.getToken(PlSqlParser.INITIALLY, 0)

        def INITIAL(self):
            return self.getToken(PlSqlParser.INITIAL, 0)

        def INITRANS(self):
            return self.getToken(PlSqlParser.INITRANS, 0)

        def INLINE(self):
            return self.getToken(PlSqlParser.INLINE, 0)

        def INLINE_XMLTYPE_NT(self):
            return self.getToken(PlSqlParser.INLINE_XMLTYPE_NT, 0)

        def IN_MEMORY_METADATA(self):
            return self.getToken(PlSqlParser.IN_MEMORY_METADATA, 0)

        def INNER(self):
            return self.getToken(PlSqlParser.INNER, 0)

        def INSERTCHILDXMLAFTER(self):
            return self.getToken(PlSqlParser.INSERTCHILDXMLAFTER, 0)

        def INSERTCHILDXMLBEFORE(self):
            return self.getToken(PlSqlParser.INSERTCHILDXMLBEFORE, 0)

        def INSERTCHILDXML(self):
            return self.getToken(PlSqlParser.INSERTCHILDXML, 0)

        def INSERTXMLAFTER(self):
            return self.getToken(PlSqlParser.INSERTXMLAFTER, 0)

        def INSERTXMLBEFORE(self):
            return self.getToken(PlSqlParser.INSERTXMLBEFORE, 0)

        def INSTANCE(self):
            return self.getToken(PlSqlParser.INSTANCE, 0)

        def INSTANCES(self):
            return self.getToken(PlSqlParser.INSTANCES, 0)

        def INSTANTIABLE(self):
            return self.getToken(PlSqlParser.INSTANTIABLE, 0)

        def INSTANTLY(self):
            return self.getToken(PlSqlParser.INSTANTLY, 0)

        def INSTEAD(self):
            return self.getToken(PlSqlParser.INSTEAD, 0)

        def INSTR2(self):
            return self.getToken(PlSqlParser.INSTR2, 0)

        def INSTR4(self):
            return self.getToken(PlSqlParser.INSTR4, 0)

        def INSTRB(self):
            return self.getToken(PlSqlParser.INSTRB, 0)

        def INSTRC(self):
            return self.getToken(PlSqlParser.INSTRC, 0)

        def INSTR(self):
            return self.getToken(PlSqlParser.INSTR, 0)

        def INTERMEDIATE(self):
            return self.getToken(PlSqlParser.INTERMEDIATE, 0)

        def INTERNAL_CONVERT(self):
            return self.getToken(PlSqlParser.INTERNAL_CONVERT, 0)

        def INTERNAL_USE(self):
            return self.getToken(PlSqlParser.INTERNAL_USE, 0)

        def INTERPRETED(self):
            return self.getToken(PlSqlParser.INTERPRETED, 0)

        def INTERVAL(self):
            return self.getToken(PlSqlParser.INTERVAL, 0)

        def INT(self):
            return self.getToken(PlSqlParser.INT, 0)

        def INVALIDATE(self):
            return self.getToken(PlSqlParser.INVALIDATE, 0)

        def INVISIBLE(self):
            return self.getToken(PlSqlParser.INVISIBLE, 0)

        def IN_XQUERY(self):
            return self.getToken(PlSqlParser.IN_XQUERY, 0)

        def ISOLATION_LEVEL(self):
            return self.getToken(PlSqlParser.ISOLATION_LEVEL, 0)

        def ISOLATION(self):
            return self.getToken(PlSqlParser.ISOLATION, 0)

        def ITERATE(self):
            return self.getToken(PlSqlParser.ITERATE, 0)

        def ITERATION_NUMBER(self):
            return self.getToken(PlSqlParser.ITERATION_NUMBER, 0)

        def JAVA(self):
            return self.getToken(PlSqlParser.JAVA, 0)

        def JOB(self):
            return self.getToken(PlSqlParser.JOB, 0)

        def JOIN(self):
            return self.getToken(PlSqlParser.JOIN, 0)

        def KEEP_DUPLICATES(self):
            return self.getToken(PlSqlParser.KEEP_DUPLICATES, 0)

        def KEEP(self):
            return self.getToken(PlSqlParser.KEEP, 0)

        def KERBEROS(self):
            return self.getToken(PlSqlParser.KERBEROS, 0)

        def KEY_LENGTH(self):
            return self.getToken(PlSqlParser.KEY_LENGTH, 0)

        def KEY(self):
            return self.getToken(PlSqlParser.KEY, 0)

        def KEYSIZE(self):
            return self.getToken(PlSqlParser.KEYSIZE, 0)

        def KEYS(self):
            return self.getToken(PlSqlParser.KEYS, 0)

        def KILL(self):
            return self.getToken(PlSqlParser.KILL, 0)

        def LAG(self):
            return self.getToken(PlSqlParser.LAG, 0)

        def LAST_DAY(self):
            return self.getToken(PlSqlParser.LAST_DAY, 0)

        def LAST(self):
            return self.getToken(PlSqlParser.LAST, 0)

        def LAST_VALUE(self):
            return self.getToken(PlSqlParser.LAST_VALUE, 0)

        def LATERAL(self):
            return self.getToken(PlSqlParser.LATERAL, 0)

        def LAYER(self):
            return self.getToken(PlSqlParser.LAYER, 0)

        def LDAP_REGISTRATION_ENABLED(self):
            return self.getToken(PlSqlParser.LDAP_REGISTRATION_ENABLED, 0)

        def LDAP_REGISTRATION(self):
            return self.getToken(PlSqlParser.LDAP_REGISTRATION, 0)

        def LDAP_REG_SYNC_INTERVAL(self):
            return self.getToken(PlSqlParser.LDAP_REG_SYNC_INTERVAL, 0)

        def LEADING(self):
            return self.getToken(PlSqlParser.LEADING, 0)

        def LEAD(self):
            return self.getToken(PlSqlParser.LEAD, 0)

        def LEAF(self):
            return self.getToken(PlSqlParser.LEAF, 0)

        def LEAST(self):
            return self.getToken(PlSqlParser.LEAST, 0)

        def LEFT(self):
            return self.getToken(PlSqlParser.LEFT, 0)

        def LENGTH2(self):
            return self.getToken(PlSqlParser.LENGTH2, 0)

        def LENGTH4(self):
            return self.getToken(PlSqlParser.LENGTH4, 0)

        def LENGTHB(self):
            return self.getToken(PlSqlParser.LENGTHB, 0)

        def LENGTHC(self):
            return self.getToken(PlSqlParser.LENGTHC, 0)

        def LENGTH(self):
            return self.getToken(PlSqlParser.LENGTH, 0)

        def LESS(self):
            return self.getToken(PlSqlParser.LESS, 0)

        def LEVEL(self):
            return self.getToken(PlSqlParser.LEVEL, 0)

        def LEVELS(self):
            return self.getToken(PlSqlParser.LEVELS, 0)

        def LIBRARY(self):
            return self.getToken(PlSqlParser.LIBRARY, 0)

        def LIFE(self):
            return self.getToken(PlSqlParser.LIFE, 0)

        def LIFETIME(self):
            return self.getToken(PlSqlParser.LIFETIME, 0)

        def LIKE2(self):
            return self.getToken(PlSqlParser.LIKE2, 0)

        def LIKE4(self):
            return self.getToken(PlSqlParser.LIKE4, 0)

        def LIKEC(self):
            return self.getToken(PlSqlParser.LIKEC, 0)

        def LIKE_EXPAND(self):
            return self.getToken(PlSqlParser.LIKE_EXPAND, 0)

        def LIMIT(self):
            return self.getToken(PlSqlParser.LIMIT, 0)

        def LINK(self):
            return self.getToken(PlSqlParser.LINK, 0)

        def LISTAGG(self):
            return self.getToken(PlSqlParser.LISTAGG, 0)

        def LIST(self):
            return self.getToken(PlSqlParser.LIST, 0)

        def LN(self):
            return self.getToken(PlSqlParser.LN, 0)

        def LNNVL(self):
            return self.getToken(PlSqlParser.LNNVL, 0)

        def LOAD(self):
            return self.getToken(PlSqlParser.LOAD, 0)

        def LOB(self):
            return self.getToken(PlSqlParser.LOB, 0)

        def LOBNVL(self):
            return self.getToken(PlSqlParser.LOBNVL, 0)

        def LOBS(self):
            return self.getToken(PlSqlParser.LOBS, 0)

        def LOCAL_INDEXES(self):
            return self.getToken(PlSqlParser.LOCAL_INDEXES, 0)

        def LOCAL(self):
            return self.getToken(PlSqlParser.LOCAL, 0)

        def LOCALTIME(self):
            return self.getToken(PlSqlParser.LOCALTIME, 0)

        def LOCALTIMESTAMP(self):
            return self.getToken(PlSqlParser.LOCALTIMESTAMP, 0)

        def LOCATION(self):
            return self.getToken(PlSqlParser.LOCATION, 0)

        def LOCATOR(self):
            return self.getToken(PlSqlParser.LOCATOR, 0)

        def LOCKED(self):
            return self.getToken(PlSqlParser.LOCKED, 0)

        def LOGFILE(self):
            return self.getToken(PlSqlParser.LOGFILE, 0)

        def LOGFILES(self):
            return self.getToken(PlSqlParser.LOGFILES, 0)

        def LOGGING(self):
            return self.getToken(PlSqlParser.LOGGING, 0)

        def LOGICAL(self):
            return self.getToken(PlSqlParser.LOGICAL, 0)

        def LOGICAL_READS_PER_CALL(self):
            return self.getToken(PlSqlParser.LOGICAL_READS_PER_CALL, 0)

        def LOGICAL_READS_PER_SESSION(self):
            return self.getToken(PlSqlParser.LOGICAL_READS_PER_SESSION, 0)

        def LOG(self):
            return self.getToken(PlSqlParser.LOG, 0)

        def LOGOFF(self):
            return self.getToken(PlSqlParser.LOGOFF, 0)

        def LOGON(self):
            return self.getToken(PlSqlParser.LOGON, 0)

        def LOG_READ_ONLY_VIOLATIONS(self):
            return self.getToken(PlSqlParser.LOG_READ_ONLY_VIOLATIONS, 0)

        def LOWER(self):
            return self.getToken(PlSqlParser.LOWER, 0)

        def LOW(self):
            return self.getToken(PlSqlParser.LOW, 0)

        def LPAD(self):
            return self.getToken(PlSqlParser.LPAD, 0)

        def LTRIM(self):
            return self.getToken(PlSqlParser.LTRIM, 0)

        def MAIN(self):
            return self.getToken(PlSqlParser.MAIN, 0)

        def MAKE_REF(self):
            return self.getToken(PlSqlParser.MAKE_REF, 0)

        def MANAGED(self):
            return self.getToken(PlSqlParser.MANAGED, 0)

        def MANAGEMENT(self):
            return self.getToken(PlSqlParser.MANAGEMENT, 0)

        def MANAGE(self):
            return self.getToken(PlSqlParser.MANAGE, 0)

        def MANAGER(self):
            return self.getToken(PlSqlParser.MANAGER, 0)

        def MANUAL(self):
            return self.getToken(PlSqlParser.MANUAL, 0)

        def MAPPING(self):
            return self.getToken(PlSqlParser.MAPPING, 0)

        def MASTER(self):
            return self.getToken(PlSqlParser.MASTER, 0)

        def MATCHED(self):
            return self.getToken(PlSqlParser.MATCHED, 0)

        def MATERIALIZED(self):
            return self.getToken(PlSqlParser.MATERIALIZED, 0)

        def MATERIALIZE(self):
            return self.getToken(PlSqlParser.MATERIALIZE, 0)

        def MAXARCHLOGS(self):
            return self.getToken(PlSqlParser.MAXARCHLOGS, 0)

        def MAXDATAFILES(self):
            return self.getToken(PlSqlParser.MAXDATAFILES, 0)

        def MAXEXTENTS(self):
            return self.getToken(PlSqlParser.MAXEXTENTS, 0)

        def MAXIMIZE(self):
            return self.getToken(PlSqlParser.MAXIMIZE, 0)

        def MAXINSTANCES(self):
            return self.getToken(PlSqlParser.MAXINSTANCES, 0)

        def MAXLOGFILES(self):
            return self.getToken(PlSqlParser.MAXLOGFILES, 0)

        def MAXLOGHISTORY(self):
            return self.getToken(PlSqlParser.MAXLOGHISTORY, 0)

        def MAXLOGMEMBERS(self):
            return self.getToken(PlSqlParser.MAXLOGMEMBERS, 0)

        def MAX(self):
            return self.getToken(PlSqlParser.MAX, 0)

        def MAXSIZE(self):
            return self.getToken(PlSqlParser.MAXSIZE, 0)

        def MAXTRANS(self):
            return self.getToken(PlSqlParser.MAXTRANS, 0)

        def MAXVALUE(self):
            return self.getToken(PlSqlParser.MAXVALUE, 0)

        def MEASURE(self):
            return self.getToken(PlSqlParser.MEASURE, 0)

        def MEASURES(self):
            return self.getToken(PlSqlParser.MEASURES, 0)

        def MEDIAN(self):
            return self.getToken(PlSqlParser.MEDIAN, 0)

        def MEDIUM(self):
            return self.getToken(PlSqlParser.MEDIUM, 0)

        def MEMBER(self):
            return self.getToken(PlSqlParser.MEMBER, 0)

        def MEMOPTIMIZE(self):
            return self.getToken(PlSqlParser.MEMOPTIMIZE, 0)

        def MEMORY(self):
            return self.getToken(PlSqlParser.MEMORY, 0)

        def MERGEACTIONS(self):
            return self.getToken(PlSqlParser.MERGEACTIONS, 0)

        def MERGE_AJ(self):
            return self.getToken(PlSqlParser.MERGE_AJ, 0)

        def MERGE_CONST_ON(self):
            return self.getToken(PlSqlParser.MERGE_CONST_ON, 0)

        def MERGE(self):
            return self.getToken(PlSqlParser.MERGE, 0)

        def MERGE_SJ(self):
            return self.getToken(PlSqlParser.MERGE_SJ, 0)

        def METHOD(self):
            return self.getToken(PlSqlParser.METHOD, 0)

        def MIGRATE(self):
            return self.getToken(PlSqlParser.MIGRATE, 0)

        def MIGRATION(self):
            return self.getToken(PlSqlParser.MIGRATION, 0)

        def MINEXTENTS(self):
            return self.getToken(PlSqlParser.MINEXTENTS, 0)

        def MINIMIZE(self):
            return self.getToken(PlSqlParser.MINIMIZE, 0)

        def MINIMUM(self):
            return self.getToken(PlSqlParser.MINIMUM, 0)

        def MINING(self):
            return self.getToken(PlSqlParser.MINING, 0)

        def MIN(self):
            return self.getToken(PlSqlParser.MIN, 0)

        def MINUS_NULL(self):
            return self.getToken(PlSqlParser.MINUS_NULL, 0)

        def MINUTE(self):
            return self.getToken(PlSqlParser.MINUTE, 0)

        def MINVALUE(self):
            return self.getToken(PlSqlParser.MINVALUE, 0)

        def MIRRORCOLD(self):
            return self.getToken(PlSqlParser.MIRRORCOLD, 0)

        def MIRRORHOT(self):
            return self.getToken(PlSqlParser.MIRRORHOT, 0)

        def MIRROR(self):
            return self.getToken(PlSqlParser.MIRROR, 0)

        def MLSLABEL(self):
            return self.getToken(PlSqlParser.MLSLABEL, 0)

        def MODEL_COMPILE_SUBQUERY(self):
            return self.getToken(PlSqlParser.MODEL_COMPILE_SUBQUERY, 0)

        def MODEL_DONTVERIFY_UNIQUENESS(self):
            return self.getToken(PlSqlParser.MODEL_DONTVERIFY_UNIQUENESS, 0)

        def MODEL_DYNAMIC_SUBQUERY(self):
            return self.getToken(PlSqlParser.MODEL_DYNAMIC_SUBQUERY, 0)

        def MODEL_MIN_ANALYSIS(self):
            return self.getToken(PlSqlParser.MODEL_MIN_ANALYSIS, 0)

        def MODEL(self):
            return self.getToken(PlSqlParser.MODEL, 0)

        def MODEL_NO_ANALYSIS(self):
            return self.getToken(PlSqlParser.MODEL_NO_ANALYSIS, 0)

        def MODEL_PBY(self):
            return self.getToken(PlSqlParser.MODEL_PBY, 0)

        def MODEL_PUSH_REF(self):
            return self.getToken(PlSqlParser.MODEL_PUSH_REF, 0)

        def MODIFY_COLUMN_TYPE(self):
            return self.getToken(PlSqlParser.MODIFY_COLUMN_TYPE, 0)

        def MODIFY(self):
            return self.getToken(PlSqlParser.MODIFY, 0)

        def MOD(self):
            return self.getToken(PlSqlParser.MOD, 0)

        def MONITORING(self):
            return self.getToken(PlSqlParser.MONITORING, 0)

        def MONITOR(self):
            return self.getToken(PlSqlParser.MONITOR, 0)

        def MONTH(self):
            return self.getToken(PlSqlParser.MONTH, 0)

        def MONTHS_BETWEEN(self):
            return self.getToken(PlSqlParser.MONTHS_BETWEEN, 0)

        def MOUNT(self):
            return self.getToken(PlSqlParser.MOUNT, 0)

        def MOUNTPATH(self):
            return self.getToken(PlSqlParser.MOUNTPATH, 0)

        def MOVEMENT(self):
            return self.getToken(PlSqlParser.MOVEMENT, 0)

        def MOVE(self):
            return self.getToken(PlSqlParser.MOVE, 0)

        def MULTISET(self):
            return self.getToken(PlSqlParser.MULTISET, 0)

        def MV_MERGE(self):
            return self.getToken(PlSqlParser.MV_MERGE, 0)

        def NAMED(self):
            return self.getToken(PlSqlParser.NAMED, 0)

        def NAME(self):
            return self.getToken(PlSqlParser.NAME, 0)

        def NAMESPACE(self):
            return self.getToken(PlSqlParser.NAMESPACE, 0)

        def NAN(self):
            return self.getToken(PlSqlParser.NAN, 0)

        def NANVL(self):
            return self.getToken(PlSqlParser.NANVL, 0)

        def NATIONAL(self):
            return self.getToken(PlSqlParser.NATIONAL, 0)

        def NATIVE_FULL_OUTER_JOIN(self):
            return self.getToken(PlSqlParser.NATIVE_FULL_OUTER_JOIN, 0)

        def NATIVE(self):
            return self.getToken(PlSqlParser.NATIVE, 0)

        def NATURAL(self):
            return self.getToken(PlSqlParser.NATURAL, 0)

        def NAV(self):
            return self.getToken(PlSqlParser.NAV, 0)

        def NCHAR_CS(self):
            return self.getToken(PlSqlParser.NCHAR_CS, 0)

        def NCHAR(self):
            return self.getToken(PlSqlParser.NCHAR, 0)

        def NCHR(self):
            return self.getToken(PlSqlParser.NCHR, 0)

        def NCLOB(self):
            return self.getToken(PlSqlParser.NCLOB, 0)

        def NEEDED(self):
            return self.getToken(PlSqlParser.NEEDED, 0)

        def NESTED(self):
            return self.getToken(PlSqlParser.NESTED, 0)

        def NESTED_TABLE_FAST_INSERT(self):
            return self.getToken(PlSqlParser.NESTED_TABLE_FAST_INSERT, 0)

        def NESTED_TABLE_GET_REFS(self):
            return self.getToken(PlSqlParser.NESTED_TABLE_GET_REFS, 0)

        def NESTED_TABLE_ID(self):
            return self.getToken(PlSqlParser.NESTED_TABLE_ID, 0)

        def NESTED_TABLE_SET_REFS(self):
            return self.getToken(PlSqlParser.NESTED_TABLE_SET_REFS, 0)

        def NESTED_TABLE_SET_SETID(self):
            return self.getToken(PlSqlParser.NESTED_TABLE_SET_SETID, 0)

        def NETWORK(self):
            return self.getToken(PlSqlParser.NETWORK, 0)

        def NEVER(self):
            return self.getToken(PlSqlParser.NEVER, 0)

        def NEW(self):
            return self.getToken(PlSqlParser.NEW, 0)

        def NEW_TIME(self):
            return self.getToken(PlSqlParser.NEW_TIME, 0)

        def NEXT_DAY(self):
            return self.getToken(PlSqlParser.NEXT_DAY, 0)

        def NEXT(self):
            return self.getToken(PlSqlParser.NEXT, 0)

        def NL_AJ(self):
            return self.getToken(PlSqlParser.NL_AJ, 0)

        def NLJ_BATCHING(self):
            return self.getToken(PlSqlParser.NLJ_BATCHING, 0)

        def NLJ_INDEX_FILTER(self):
            return self.getToken(PlSqlParser.NLJ_INDEX_FILTER, 0)

        def NLJ_INDEX_SCAN(self):
            return self.getToken(PlSqlParser.NLJ_INDEX_SCAN, 0)

        def NLJ_PREFETCH(self):
            return self.getToken(PlSqlParser.NLJ_PREFETCH, 0)

        def NLS_CALENDAR(self):
            return self.getToken(PlSqlParser.NLS_CALENDAR, 0)

        def NLS_CHARACTERSET(self):
            return self.getToken(PlSqlParser.NLS_CHARACTERSET, 0)

        def NLS_CHARSET_DECL_LEN(self):
            return self.getToken(PlSqlParser.NLS_CHARSET_DECL_LEN, 0)

        def NLS_CHARSET_ID(self):
            return self.getToken(PlSqlParser.NLS_CHARSET_ID, 0)

        def NLS_CHARSET_NAME(self):
            return self.getToken(PlSqlParser.NLS_CHARSET_NAME, 0)

        def NLS_COMP(self):
            return self.getToken(PlSqlParser.NLS_COMP, 0)

        def NLS_CURRENCY(self):
            return self.getToken(PlSqlParser.NLS_CURRENCY, 0)

        def NLS_DATE_FORMAT(self):
            return self.getToken(PlSqlParser.NLS_DATE_FORMAT, 0)

        def NLS_DATE_LANGUAGE(self):
            return self.getToken(PlSqlParser.NLS_DATE_LANGUAGE, 0)

        def NLS_INITCAP(self):
            return self.getToken(PlSqlParser.NLS_INITCAP, 0)

        def NLS_ISO_CURRENCY(self):
            return self.getToken(PlSqlParser.NLS_ISO_CURRENCY, 0)

        def NL_SJ(self):
            return self.getToken(PlSqlParser.NL_SJ, 0)

        def NLS_LANG(self):
            return self.getToken(PlSqlParser.NLS_LANG, 0)

        def NLS_LANGUAGE(self):
            return self.getToken(PlSqlParser.NLS_LANGUAGE, 0)

        def NLS_LENGTH_SEMANTICS(self):
            return self.getToken(PlSqlParser.NLS_LENGTH_SEMANTICS, 0)

        def NLS_LOWER(self):
            return self.getToken(PlSqlParser.NLS_LOWER, 0)

        def NLS_NCHAR_CONV_EXCP(self):
            return self.getToken(PlSqlParser.NLS_NCHAR_CONV_EXCP, 0)

        def NLS_NUMERIC_CHARACTERS(self):
            return self.getToken(PlSqlParser.NLS_NUMERIC_CHARACTERS, 0)

        def NLS_SORT(self):
            return self.getToken(PlSqlParser.NLS_SORT, 0)

        def NLSSORT(self):
            return self.getToken(PlSqlParser.NLSSORT, 0)

        def NLS_SPECIAL_CHARS(self):
            return self.getToken(PlSqlParser.NLS_SPECIAL_CHARS, 0)

        def NLS_TERRITORY(self):
            return self.getToken(PlSqlParser.NLS_TERRITORY, 0)

        def NLS_UPPER(self):
            return self.getToken(PlSqlParser.NLS_UPPER, 0)

        def NO_ACCESS(self):
            return self.getToken(PlSqlParser.NO_ACCESS, 0)

        def NOAPPEND(self):
            return self.getToken(PlSqlParser.NOAPPEND, 0)

        def NOARCHIVELOG(self):
            return self.getToken(PlSqlParser.NOARCHIVELOG, 0)

        def NOAUDIT(self):
            return self.getToken(PlSqlParser.NOAUDIT, 0)

        def NO_BASETABLE_MULTIMV_REWRITE(self):
            return self.getToken(PlSqlParser.NO_BASETABLE_MULTIMV_REWRITE, 0)

        def NO_BIND_AWARE(self):
            return self.getToken(PlSqlParser.NO_BIND_AWARE, 0)

        def NO_BUFFER(self):
            return self.getToken(PlSqlParser.NO_BUFFER, 0)

        def NOCACHE(self):
            return self.getToken(PlSqlParser.NOCACHE, 0)

        def NO_CARTESIAN(self):
            return self.getToken(PlSqlParser.NO_CARTESIAN, 0)

        def NO_CHECK_ACL_REWRITE(self):
            return self.getToken(PlSqlParser.NO_CHECK_ACL_REWRITE, 0)

        def NO_CLUSTER_BY_ROWID(self):
            return self.getToken(PlSqlParser.NO_CLUSTER_BY_ROWID, 0)

        def NO_COALESCE_SQ(self):
            return self.getToken(PlSqlParser.NO_COALESCE_SQ, 0)

        def NO_CONNECT_BY_CB_WHR_ONLY(self):
            return self.getToken(PlSqlParser.NO_CONNECT_BY_CB_WHR_ONLY, 0)

        def NO_CONNECT_BY_COMBINE_SW(self):
            return self.getToken(PlSqlParser.NO_CONNECT_BY_COMBINE_SW, 0)

        def NO_CONNECT_BY_COST_BASED(self):
            return self.getToken(PlSqlParser.NO_CONNECT_BY_COST_BASED, 0)

        def NO_CONNECT_BY_ELIM_DUPS(self):
            return self.getToken(PlSqlParser.NO_CONNECT_BY_ELIM_DUPS, 0)

        def NO_CONNECT_BY_FILTERING(self):
            return self.getToken(PlSqlParser.NO_CONNECT_BY_FILTERING, 0)

        def NO_COST_XML_QUERY_REWRITE(self):
            return self.getToken(PlSqlParser.NO_COST_XML_QUERY_REWRITE, 0)

        def NO_CPU_COSTING(self):
            return self.getToken(PlSqlParser.NO_CPU_COSTING, 0)

        def NOCPU_COSTING(self):
            return self.getToken(PlSqlParser.NOCPU_COSTING, 0)

        def NOCYCLE(self):
            return self.getToken(PlSqlParser.NOCYCLE, 0)

        def NODELAY(self):
            return self.getToken(PlSqlParser.NODELAY, 0)

        def NO_DOMAIN_INDEX_FILTER(self):
            return self.getToken(PlSqlParser.NO_DOMAIN_INDEX_FILTER, 0)

        def NO_DST_UPGRADE_INSERT_CONV(self):
            return self.getToken(PlSqlParser.NO_DST_UPGRADE_INSERT_CONV, 0)

        def NO_ELIMINATE_JOIN(self):
            return self.getToken(PlSqlParser.NO_ELIMINATE_JOIN, 0)

        def NO_ELIMINATE_OBY(self):
            return self.getToken(PlSqlParser.NO_ELIMINATE_OBY, 0)

        def NO_ELIMINATE_OUTER_JOIN(self):
            return self.getToken(PlSqlParser.NO_ELIMINATE_OUTER_JOIN, 0)

        def NOENTITYESCAPING(self):
            return self.getToken(PlSqlParser.NOENTITYESCAPING, 0)

        def NO_EXPAND_GSET_TO_UNION(self):
            return self.getToken(PlSqlParser.NO_EXPAND_GSET_TO_UNION, 0)

        def NO_EXPAND(self):
            return self.getToken(PlSqlParser.NO_EXPAND, 0)

        def NO_EXPAND_TABLE(self):
            return self.getToken(PlSqlParser.NO_EXPAND_TABLE, 0)

        def NO_FACT(self):
            return self.getToken(PlSqlParser.NO_FACT, 0)

        def NO_FACTORIZE_JOIN(self):
            return self.getToken(PlSqlParser.NO_FACTORIZE_JOIN, 0)

        def NO_FILTERING(self):
            return self.getToken(PlSqlParser.NO_FILTERING, 0)

        def NOFORCE(self):
            return self.getToken(PlSqlParser.NOFORCE, 0)

        def NO_FULL_OUTER_JOIN_TO_OUTER(self):
            return self.getToken(PlSqlParser.NO_FULL_OUTER_JOIN_TO_OUTER, 0)

        def NO_GBY_PUSHDOWN(self):
            return self.getToken(PlSqlParser.NO_GBY_PUSHDOWN, 0)

        def NOGUARANTEE(self):
            return self.getToken(PlSqlParser.NOGUARANTEE, 0)

        def NO_INDEX_FFS(self):
            return self.getToken(PlSqlParser.NO_INDEX_FFS, 0)

        def NO_INDEX(self):
            return self.getToken(PlSqlParser.NO_INDEX, 0)

        def NO_INDEX_SS(self):
            return self.getToken(PlSqlParser.NO_INDEX_SS, 0)

        def NO_LOAD(self):
            return self.getToken(PlSqlParser.NO_LOAD, 0)

        def NOLOCAL(self):
            return self.getToken(PlSqlParser.NOLOCAL, 0)

        def NOLOGGING(self):
            return self.getToken(PlSqlParser.NOLOGGING, 0)

        def NOMAPPING(self):
            return self.getToken(PlSqlParser.NOMAPPING, 0)

        def NOMAXVALUE(self):
            return self.getToken(PlSqlParser.NOMAXVALUE, 0)

        def NO_MERGE(self):
            return self.getToken(PlSqlParser.NO_MERGE, 0)

        def NOMINIMIZE(self):
            return self.getToken(PlSqlParser.NOMINIMIZE, 0)

        def NOMINVALUE(self):
            return self.getToken(PlSqlParser.NOMINVALUE, 0)

        def NO_MODEL_PUSH_REF(self):
            return self.getToken(PlSqlParser.NO_MODEL_PUSH_REF, 0)

        def NO_MONITORING(self):
            return self.getToken(PlSqlParser.NO_MONITORING, 0)

        def NOMONITORING(self):
            return self.getToken(PlSqlParser.NOMONITORING, 0)

        def NO_MONITOR(self):
            return self.getToken(PlSqlParser.NO_MONITOR, 0)

        def NO_MULTIMV_REWRITE(self):
            return self.getToken(PlSqlParser.NO_MULTIMV_REWRITE, 0)

        def NO(self):
            return self.getToken(PlSqlParser.NO, 0)

        def NO_NATIVE_FULL_OUTER_JOIN(self):
            return self.getToken(PlSqlParser.NO_NATIVE_FULL_OUTER_JOIN, 0)

        def NONBLOCKING(self):
            return self.getToken(PlSqlParser.NONBLOCKING, 0)

        def NONE(self):
            return self.getToken(PlSqlParser.NONE, 0)

        def NO_NLJ_BATCHING(self):
            return self.getToken(PlSqlParser.NO_NLJ_BATCHING, 0)

        def NO_NLJ_PREFETCH(self):
            return self.getToken(PlSqlParser.NO_NLJ_PREFETCH, 0)

        def NONSCHEMA(self):
            return self.getToken(PlSqlParser.NONSCHEMA, 0)

        def NOORDER(self):
            return self.getToken(PlSqlParser.NOORDER, 0)

        def NO_ORDER_ROLLUPS(self):
            return self.getToken(PlSqlParser.NO_ORDER_ROLLUPS, 0)

        def NO_OUTER_JOIN_TO_ANTI(self):
            return self.getToken(PlSqlParser.NO_OUTER_JOIN_TO_ANTI, 0)

        def NO_OUTER_JOIN_TO_INNER(self):
            return self.getToken(PlSqlParser.NO_OUTER_JOIN_TO_INNER, 0)

        def NOOVERRIDE(self):
            return self.getToken(PlSqlParser.NOOVERRIDE, 0)

        def NO_PARALLEL_INDEX(self):
            return self.getToken(PlSqlParser.NO_PARALLEL_INDEX, 0)

        def NOPARALLEL_INDEX(self):
            return self.getToken(PlSqlParser.NOPARALLEL_INDEX, 0)

        def NO_PARALLEL(self):
            return self.getToken(PlSqlParser.NO_PARALLEL, 0)

        def NOPARALLEL(self):
            return self.getToken(PlSqlParser.NOPARALLEL, 0)

        def NO_PARTIAL_COMMIT(self):
            return self.getToken(PlSqlParser.NO_PARTIAL_COMMIT, 0)

        def NO_PLACE_DISTINCT(self):
            return self.getToken(PlSqlParser.NO_PLACE_DISTINCT, 0)

        def NO_PLACE_GROUP_BY(self):
            return self.getToken(PlSqlParser.NO_PLACE_GROUP_BY, 0)

        def NO_PQ_MAP(self):
            return self.getToken(PlSqlParser.NO_PQ_MAP, 0)

        def NO_PRUNE_GSETS(self):
            return self.getToken(PlSqlParser.NO_PRUNE_GSETS, 0)

        def NO_PULL_PRED(self):
            return self.getToken(PlSqlParser.NO_PULL_PRED, 0)

        def NO_PUSH_PRED(self):
            return self.getToken(PlSqlParser.NO_PUSH_PRED, 0)

        def NO_PUSH_SUBQ(self):
            return self.getToken(PlSqlParser.NO_PUSH_SUBQ, 0)

        def NO_PX_JOIN_FILTER(self):
            return self.getToken(PlSqlParser.NO_PX_JOIN_FILTER, 0)

        def NO_QKN_BUFF(self):
            return self.getToken(PlSqlParser.NO_QKN_BUFF, 0)

        def NO_QUERY_TRANSFORMATION(self):
            return self.getToken(PlSqlParser.NO_QUERY_TRANSFORMATION, 0)

        def NO_REF_CASCADE(self):
            return self.getToken(PlSqlParser.NO_REF_CASCADE, 0)

        def NORELY(self):
            return self.getToken(PlSqlParser.NORELY, 0)

        def NOREPAIR(self):
            return self.getToken(PlSqlParser.NOREPAIR, 0)

        def NORESETLOGS(self):
            return self.getToken(PlSqlParser.NORESETLOGS, 0)

        def NO_RESULT_CACHE(self):
            return self.getToken(PlSqlParser.NO_RESULT_CACHE, 0)

        def NOREVERSE(self):
            return self.getToken(PlSqlParser.NOREVERSE, 0)

        def NO_REWRITE(self):
            return self.getToken(PlSqlParser.NO_REWRITE, 0)

        def NOREWRITE(self):
            return self.getToken(PlSqlParser.NOREWRITE, 0)

        def NORMAL(self):
            return self.getToken(PlSqlParser.NORMAL, 0)

        def NOROWDEPENDENCIES(self):
            return self.getToken(PlSqlParser.NOROWDEPENDENCIES, 0)

        def NOSCHEMACHECK(self):
            return self.getToken(PlSqlParser.NOSCHEMACHECK, 0)

        def NOSEGMENT(self):
            return self.getToken(PlSqlParser.NOSEGMENT, 0)

        def NO_SEMIJOIN(self):
            return self.getToken(PlSqlParser.NO_SEMIJOIN, 0)

        def NO_SEMI_TO_INNER(self):
            return self.getToken(PlSqlParser.NO_SEMI_TO_INNER, 0)

        def NO_SET_TO_JOIN(self):
            return self.getToken(PlSqlParser.NO_SET_TO_JOIN, 0)

        def NOSORT(self):
            return self.getToken(PlSqlParser.NOSORT, 0)

        def NO_SQL_TUNE(self):
            return self.getToken(PlSqlParser.NO_SQL_TUNE, 0)

        def NO_STAR_TRANSFORMATION(self):
            return self.getToken(PlSqlParser.NO_STAR_TRANSFORMATION, 0)

        def NO_STATEMENT_QUEUING(self):
            return self.getToken(PlSqlParser.NO_STATEMENT_QUEUING, 0)

        def NO_STATS_GSETS(self):
            return self.getToken(PlSqlParser.NO_STATS_GSETS, 0)

        def NOSTRICT(self):
            return self.getToken(PlSqlParser.NOSTRICT, 0)

        def NO_SUBQUERY_PRUNING(self):
            return self.getToken(PlSqlParser.NO_SUBQUERY_PRUNING, 0)

        def NO_SUBSTRB_PAD(self):
            return self.getToken(PlSqlParser.NO_SUBSTRB_PAD, 0)

        def NO_SWAP_JOIN_INPUTS(self):
            return self.getToken(PlSqlParser.NO_SWAP_JOIN_INPUTS, 0)

        def NOSWITCH(self):
            return self.getToken(PlSqlParser.NOSWITCH, 0)

        def NO_TABLE_LOOKUP_BY_NL(self):
            return self.getToken(PlSqlParser.NO_TABLE_LOOKUP_BY_NL, 0)

        def NO_TEMP_TABLE(self):
            return self.getToken(PlSqlParser.NO_TEMP_TABLE, 0)

        def NOTHING(self):
            return self.getToken(PlSqlParser.NOTHING, 0)

        def NOTIFICATION(self):
            return self.getToken(PlSqlParser.NOTIFICATION, 0)

        def NO_TRANSFORM_DISTINCT_AGG(self):
            return self.getToken(PlSqlParser.NO_TRANSFORM_DISTINCT_AGG, 0)

        def NO_UNNEST(self):
            return self.getToken(PlSqlParser.NO_UNNEST, 0)

        def NO_USE_HASH_AGGREGATION(self):
            return self.getToken(PlSqlParser.NO_USE_HASH_AGGREGATION, 0)

        def NO_USE_HASH_GBY_FOR_PUSHDOWN(self):
            return self.getToken(PlSqlParser.NO_USE_HASH_GBY_FOR_PUSHDOWN, 0)

        def NO_USE_HASH(self):
            return self.getToken(PlSqlParser.NO_USE_HASH, 0)

        def NO_USE_INVISIBLE_INDEXES(self):
            return self.getToken(PlSqlParser.NO_USE_INVISIBLE_INDEXES, 0)

        def NO_USE_MERGE(self):
            return self.getToken(PlSqlParser.NO_USE_MERGE, 0)

        def NO_USE_NL(self):
            return self.getToken(PlSqlParser.NO_USE_NL, 0)

        def NOVALIDATE(self):
            return self.getToken(PlSqlParser.NOVALIDATE, 0)

        def NO_XDB_FASTPATH_INSERT(self):
            return self.getToken(PlSqlParser.NO_XDB_FASTPATH_INSERT, 0)

        def NO_XML_DML_REWRITE(self):
            return self.getToken(PlSqlParser.NO_XML_DML_REWRITE, 0)

        def NO_XMLINDEX_REWRITE_IN_SELECT(self):
            return self.getToken(PlSqlParser.NO_XMLINDEX_REWRITE_IN_SELECT, 0)

        def NO_XMLINDEX_REWRITE(self):
            return self.getToken(PlSqlParser.NO_XMLINDEX_REWRITE, 0)

        def NO_XML_QUERY_REWRITE(self):
            return self.getToken(PlSqlParser.NO_XML_QUERY_REWRITE, 0)

        def NTH_VALUE(self):
            return self.getToken(PlSqlParser.NTH_VALUE, 0)

        def NTILE(self):
            return self.getToken(PlSqlParser.NTILE, 0)

        def NULLIF(self):
            return self.getToken(PlSqlParser.NULLIF, 0)

        def NULLS(self):
            return self.getToken(PlSqlParser.NULLS, 0)

        def NUMERIC(self):
            return self.getToken(PlSqlParser.NUMERIC, 0)

        def NUM_INDEX_KEYS(self):
            return self.getToken(PlSqlParser.NUM_INDEX_KEYS, 0)

        def NUMTODSINTERVAL(self):
            return self.getToken(PlSqlParser.NUMTODSINTERVAL, 0)

        def NUMTOYMINTERVAL(self):
            return self.getToken(PlSqlParser.NUMTOYMINTERVAL, 0)

        def NVARCHAR2(self):
            return self.getToken(PlSqlParser.NVARCHAR2, 0)

        def NVL2(self):
            return self.getToken(PlSqlParser.NVL2, 0)

        def NVL(self):
            return self.getToken(PlSqlParser.NVL, 0)

        def OBJECT2XML(self):
            return self.getToken(PlSqlParser.OBJECT2XML, 0)

        def OBJECT(self):
            return self.getToken(PlSqlParser.OBJECT, 0)

        def OBJNO(self):
            return self.getToken(PlSqlParser.OBJNO, 0)

        def OBJNO_REUSE(self):
            return self.getToken(PlSqlParser.OBJNO_REUSE, 0)

        def OCCURENCES(self):
            return self.getToken(PlSqlParser.OCCURENCES, 0)

        def OFFLINE(self):
            return self.getToken(PlSqlParser.OFFLINE, 0)

        def OFF(self):
            return self.getToken(PlSqlParser.OFF, 0)

        def OIDINDEX(self):
            return self.getToken(PlSqlParser.OIDINDEX, 0)

        def OID(self):
            return self.getToken(PlSqlParser.OID, 0)

        def OLAP(self):
            return self.getToken(PlSqlParser.OLAP, 0)

        def OLD(self):
            return self.getToken(PlSqlParser.OLD, 0)

        def OLD_PUSH_PRED(self):
            return self.getToken(PlSqlParser.OLD_PUSH_PRED, 0)

        def OLTP(self):
            return self.getToken(PlSqlParser.OLTP, 0)

        def ONLINE(self):
            return self.getToken(PlSqlParser.ONLINE, 0)

        def ONLY(self):
            return self.getToken(PlSqlParser.ONLY, 0)

        def OPAQUE(self):
            return self.getToken(PlSqlParser.OPAQUE, 0)

        def OPAQUE_TRANSFORM(self):
            return self.getToken(PlSqlParser.OPAQUE_TRANSFORM, 0)

        def OPAQUE_XCANONICAL(self):
            return self.getToken(PlSqlParser.OPAQUE_XCANONICAL, 0)

        def OPCODE(self):
            return self.getToken(PlSqlParser.OPCODE, 0)

        def OPEN(self):
            return self.getToken(PlSqlParser.OPEN, 0)

        def OPERATIONS(self):
            return self.getToken(PlSqlParser.OPERATIONS, 0)

        def OPERATOR(self):
            return self.getToken(PlSqlParser.OPERATOR, 0)

        def OPT_ESTIMATE(self):
            return self.getToken(PlSqlParser.OPT_ESTIMATE, 0)

        def OPTIMAL(self):
            return self.getToken(PlSqlParser.OPTIMAL, 0)

        def OPTIMIZE(self):
            return self.getToken(PlSqlParser.OPTIMIZE, 0)

        def OPTIMIZER_FEATURES_ENABLE(self):
            return self.getToken(PlSqlParser.OPTIMIZER_FEATURES_ENABLE, 0)

        def OPTIMIZER_GOAL(self):
            return self.getToken(PlSqlParser.OPTIMIZER_GOAL, 0)

        def OPT_PARAM(self):
            return self.getToken(PlSqlParser.OPT_PARAM, 0)

        def ORA_BRANCH(self):
            return self.getToken(PlSqlParser.ORA_BRANCH, 0)

        def ORADEBUG(self):
            return self.getToken(PlSqlParser.ORADEBUG, 0)

        def ORA_DST_AFFECTED(self):
            return self.getToken(PlSqlParser.ORA_DST_AFFECTED, 0)

        def ORA_DST_CONVERT(self):
            return self.getToken(PlSqlParser.ORA_DST_CONVERT, 0)

        def ORA_DST_ERROR(self):
            return self.getToken(PlSqlParser.ORA_DST_ERROR, 0)

        def ORA_GET_ACLIDS(self):
            return self.getToken(PlSqlParser.ORA_GET_ACLIDS, 0)

        def ORA_GET_PRIVILEGES(self):
            return self.getToken(PlSqlParser.ORA_GET_PRIVILEGES, 0)

        def ORA_HASH(self):
            return self.getToken(PlSqlParser.ORA_HASH, 0)

        def ORA_ROWSCN(self):
            return self.getToken(PlSqlParser.ORA_ROWSCN, 0)

        def ORA_ROWSCN_RAW(self):
            return self.getToken(PlSqlParser.ORA_ROWSCN_RAW, 0)

        def ORA_ROWVERSION(self):
            return self.getToken(PlSqlParser.ORA_ROWVERSION, 0)

        def ORA_TABVERSION(self):
            return self.getToken(PlSqlParser.ORA_TABVERSION, 0)

        def ORDERED(self):
            return self.getToken(PlSqlParser.ORDERED, 0)

        def ORDERED_PREDICATES(self):
            return self.getToken(PlSqlParser.ORDERED_PREDICATES, 0)

        def ORDINALITY(self):
            return self.getToken(PlSqlParser.ORDINALITY, 0)

        def OR_EXPAND(self):
            return self.getToken(PlSqlParser.OR_EXPAND, 0)

        def ORGANIZATION(self):
            return self.getToken(PlSqlParser.ORGANIZATION, 0)

        def OR_PREDICATES(self):
            return self.getToken(PlSqlParser.OR_PREDICATES, 0)

        def OTHER(self):
            return self.getToken(PlSqlParser.OTHER, 0)

        def OUTER_JOIN_TO_ANTI(self):
            return self.getToken(PlSqlParser.OUTER_JOIN_TO_ANTI, 0)

        def OUTER_JOIN_TO_INNER(self):
            return self.getToken(PlSqlParser.OUTER_JOIN_TO_INNER, 0)

        def OUTER(self):
            return self.getToken(PlSqlParser.OUTER, 0)

        def OUTLINE_LEAF(self):
            return self.getToken(PlSqlParser.OUTLINE_LEAF, 0)

        def OUTLINE(self):
            return self.getToken(PlSqlParser.OUTLINE, 0)

        def OUT_OF_LINE(self):
            return self.getToken(PlSqlParser.OUT_OF_LINE, 0)

        def OVERFLOW(self):
            return self.getToken(PlSqlParser.OVERFLOW, 0)

        def OVERFLOW_NOMOVE(self):
            return self.getToken(PlSqlParser.OVERFLOW_NOMOVE, 0)

        def OVERLAPS(self):
            return self.getToken(PlSqlParser.OVERLAPS, 0)

        def OVER(self):
            return self.getToken(PlSqlParser.OVER, 0)

        def OWNER(self):
            return self.getToken(PlSqlParser.OWNER, 0)

        def OWNERSHIP(self):
            return self.getToken(PlSqlParser.OWNERSHIP, 0)

        def OWN(self):
            return self.getToken(PlSqlParser.OWN, 0)

        def PACKAGE(self):
            return self.getToken(PlSqlParser.PACKAGE, 0)

        def PACKAGES(self):
            return self.getToken(PlSqlParser.PACKAGES, 0)

        def PARALLEL_INDEX(self):
            return self.getToken(PlSqlParser.PARALLEL_INDEX, 0)

        def PARALLEL(self):
            return self.getToken(PlSqlParser.PARALLEL, 0)

        def PARAMETERS(self):
            return self.getToken(PlSqlParser.PARAMETERS, 0)

        def PARAM(self):
            return self.getToken(PlSqlParser.PARAM, 0)

        def PARENT(self):
            return self.getToken(PlSqlParser.PARENT, 0)

        def PARITY(self):
            return self.getToken(PlSqlParser.PARITY, 0)

        def PARTIALLY(self):
            return self.getToken(PlSqlParser.PARTIALLY, 0)

        def PARTITION_HASH(self):
            return self.getToken(PlSqlParser.PARTITION_HASH, 0)

        def PARTITION_LIST(self):
            return self.getToken(PlSqlParser.PARTITION_LIST, 0)

        def PARTITION(self):
            return self.getToken(PlSqlParser.PARTITION, 0)

        def PARTITION_RANGE(self):
            return self.getToken(PlSqlParser.PARTITION_RANGE, 0)

        def PARTITIONS(self):
            return self.getToken(PlSqlParser.PARTITIONS, 0)

        def PARTNUMINST(self):
            return self.getToken(PlSqlParser.PARTNUMINST, 0)

        def PASSING(self):
            return self.getToken(PlSqlParser.PASSING, 0)

        def PASSWORD_GRACE_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_GRACE_TIME, 0)

        def PASSWORD_LIFE_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_LIFE_TIME, 0)

        def PASSWORD_LOCK_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_LOCK_TIME, 0)

        def PASSWORD(self):
            return self.getToken(PlSqlParser.PASSWORD, 0)

        def PASSWORD_REUSE_MAX(self):
            return self.getToken(PlSqlParser.PASSWORD_REUSE_MAX, 0)

        def PASSWORD_REUSE_TIME(self):
            return self.getToken(PlSqlParser.PASSWORD_REUSE_TIME, 0)

        def PASSWORD_VERIFY_FUNCTION(self):
            return self.getToken(PlSqlParser.PASSWORD_VERIFY_FUNCTION, 0)

        def PATH(self):
            return self.getToken(PlSqlParser.PATH, 0)

        def PATHS(self):
            return self.getToken(PlSqlParser.PATHS, 0)

        def PBL_HS_BEGIN(self):
            return self.getToken(PlSqlParser.PBL_HS_BEGIN, 0)

        def PBL_HS_END(self):
            return self.getToken(PlSqlParser.PBL_HS_END, 0)

        def PCTINCREASE(self):
            return self.getToken(PlSqlParser.PCTINCREASE, 0)

        def PCTTHRESHOLD(self):
            return self.getToken(PlSqlParser.PCTTHRESHOLD, 0)

        def PCTUSED(self):
            return self.getToken(PlSqlParser.PCTUSED, 0)

        def PCTVERSION(self):
            return self.getToken(PlSqlParser.PCTVERSION, 0)

        def PENDING(self):
            return self.getToken(PlSqlParser.PENDING, 0)

        def PERCENTILE_CONT(self):
            return self.getToken(PlSqlParser.PERCENTILE_CONT, 0)

        def PERCENTILE_DISC(self):
            return self.getToken(PlSqlParser.PERCENTILE_DISC, 0)

        def PERCENT_KEYWORD(self):
            return self.getToken(PlSqlParser.PERCENT_KEYWORD, 0)

        def PERCENT_RANKM(self):
            return self.getToken(PlSqlParser.PERCENT_RANKM, 0)

        def PERCENT_RANK(self):
            return self.getToken(PlSqlParser.PERCENT_RANK, 0)

        def PERFORMANCE(self):
            return self.getToken(PlSqlParser.PERFORMANCE, 0)

        def PERMANENT(self):
            return self.getToken(PlSqlParser.PERMANENT, 0)

        def PERMISSION(self):
            return self.getToken(PlSqlParser.PERMISSION, 0)

        def PFILE(self):
            return self.getToken(PlSqlParser.PFILE, 0)

        def PHYSICAL(self):
            return self.getToken(PlSqlParser.PHYSICAL, 0)

        def PIKEY(self):
            return self.getToken(PlSqlParser.PIKEY, 0)

        def PIV_GB(self):
            return self.getToken(PlSqlParser.PIV_GB, 0)

        def PIVOT(self):
            return self.getToken(PlSqlParser.PIVOT, 0)

        def PIV_SSF(self):
            return self.getToken(PlSqlParser.PIV_SSF, 0)

        def PLACE_DISTINCT(self):
            return self.getToken(PlSqlParser.PLACE_DISTINCT, 0)

        def PLACE_GROUP_BY(self):
            return self.getToken(PlSqlParser.PLACE_GROUP_BY, 0)

        def PLAN(self):
            return self.getToken(PlSqlParser.PLAN, 0)

        def PLSCOPE_SETTINGS(self):
            return self.getToken(PlSqlParser.PLSCOPE_SETTINGS, 0)

        def PLSQL_CCFLAGS(self):
            return self.getToken(PlSqlParser.PLSQL_CCFLAGS, 0)

        def PLSQL_CODE_TYPE(self):
            return self.getToken(PlSqlParser.PLSQL_CODE_TYPE, 0)

        def PLSQL_DEBUG(self):
            return self.getToken(PlSqlParser.PLSQL_DEBUG, 0)

        def PLSQL_OPTIMIZE_LEVEL(self):
            return self.getToken(PlSqlParser.PLSQL_OPTIMIZE_LEVEL, 0)

        def PLSQL_WARNINGS(self):
            return self.getToken(PlSqlParser.PLSQL_WARNINGS, 0)

        def POINT(self):
            return self.getToken(PlSqlParser.POINT, 0)

        def POLICY(self):
            return self.getToken(PlSqlParser.POLICY, 0)

        def POST_TRANSACTION(self):
            return self.getToken(PlSqlParser.POST_TRANSACTION, 0)

        def POWERMULTISET_BY_CARDINALITY(self):
            return self.getToken(PlSqlParser.POWERMULTISET_BY_CARDINALITY, 0)

        def POWERMULTISET(self):
            return self.getToken(PlSqlParser.POWERMULTISET, 0)

        def POWER(self):
            return self.getToken(PlSqlParser.POWER, 0)

        def PQ_DISTRIBUTE(self):
            return self.getToken(PlSqlParser.PQ_DISTRIBUTE, 0)

        def PQ_MAP(self):
            return self.getToken(PlSqlParser.PQ_MAP, 0)

        def PQ_NOMAP(self):
            return self.getToken(PlSqlParser.PQ_NOMAP, 0)

        def PREBUILT(self):
            return self.getToken(PlSqlParser.PREBUILT, 0)

        def PRECEDES(self):
            return self.getToken(PlSqlParser.PRECEDES, 0)

        def PRECEDING(self):
            return self.getToken(PlSqlParser.PRECEDING, 0)

        def PRECISION(self):
            return self.getToken(PlSqlParser.PRECISION, 0)

        def PRECOMPUTE_SUBQUERY(self):
            return self.getToken(PlSqlParser.PRECOMPUTE_SUBQUERY, 0)

        def PREDICATE_REORDERS(self):
            return self.getToken(PlSqlParser.PREDICATE_REORDERS, 0)

        def PREDICTION_BOUNDS(self):
            return self.getToken(PlSqlParser.PREDICTION_BOUNDS, 0)

        def PREDICTION_COST(self):
            return self.getToken(PlSqlParser.PREDICTION_COST, 0)

        def PREDICTION_DETAILS(self):
            return self.getToken(PlSqlParser.PREDICTION_DETAILS, 0)

        def PREDICTION(self):
            return self.getToken(PlSqlParser.PREDICTION, 0)

        def PREDICTION_PROBABILITY(self):
            return self.getToken(PlSqlParser.PREDICTION_PROBABILITY, 0)

        def PREDICTION_SET(self):
            return self.getToken(PlSqlParser.PREDICTION_SET, 0)

        def PREPARE(self):
            return self.getToken(PlSqlParser.PREPARE, 0)

        def PRESENT(self):
            return self.getToken(PlSqlParser.PRESENT, 0)

        def PRESENTNNV(self):
            return self.getToken(PlSqlParser.PRESENTNNV, 0)

        def PRESENTV(self):
            return self.getToken(PlSqlParser.PRESENTV, 0)

        def PRESERVE(self):
            return self.getToken(PlSqlParser.PRESERVE, 0)

        def PRESERVE_OID(self):
            return self.getToken(PlSqlParser.PRESERVE_OID, 0)

        def PREVIOUS(self):
            return self.getToken(PlSqlParser.PREVIOUS, 0)

        def PRIMARY(self):
            return self.getToken(PlSqlParser.PRIMARY, 0)

        def PRIVATE(self):
            return self.getToken(PlSqlParser.PRIVATE, 0)

        def PRIVATE_SGA(self):
            return self.getToken(PlSqlParser.PRIVATE_SGA, 0)

        def PRIVILEGE(self):
            return self.getToken(PlSqlParser.PRIVILEGE, 0)

        def PRIVILEGES(self):
            return self.getToken(PlSqlParser.PRIVILEGES, 0)

        def PROCEDURAL(self):
            return self.getToken(PlSqlParser.PROCEDURAL, 0)

        def PROCEDURE(self):
            return self.getToken(PlSqlParser.PROCEDURE, 0)

        def PROCESS(self):
            return self.getToken(PlSqlParser.PROCESS, 0)

        def PROFILE(self):
            return self.getToken(PlSqlParser.PROFILE, 0)

        def PROGRAM(self):
            return self.getToken(PlSqlParser.PROGRAM, 0)

        def PROJECT(self):
            return self.getToken(PlSqlParser.PROJECT, 0)

        def PROPAGATE(self):
            return self.getToken(PlSqlParser.PROPAGATE, 0)

        def PROTECTED(self):
            return self.getToken(PlSqlParser.PROTECTED, 0)

        def PROTECTION(self):
            return self.getToken(PlSqlParser.PROTECTION, 0)

        def PULL_PRED(self):
            return self.getToken(PlSqlParser.PULL_PRED, 0)

        def PURGE(self):
            return self.getToken(PlSqlParser.PURGE, 0)

        def PUSH_PRED(self):
            return self.getToken(PlSqlParser.PUSH_PRED, 0)

        def PUSH_SUBQ(self):
            return self.getToken(PlSqlParser.PUSH_SUBQ, 0)

        def PX_GRANULE(self):
            return self.getToken(PlSqlParser.PX_GRANULE, 0)

        def PX_JOIN_FILTER(self):
            return self.getToken(PlSqlParser.PX_JOIN_FILTER, 0)

        def QB_NAME(self):
            return self.getToken(PlSqlParser.QB_NAME, 0)

        def QUERY_BLOCK(self):
            return self.getToken(PlSqlParser.QUERY_BLOCK, 0)

        def QUERY(self):
            return self.getToken(PlSqlParser.QUERY, 0)

        def QUEUE_CURR(self):
            return self.getToken(PlSqlParser.QUEUE_CURR, 0)

        def QUEUE(self):
            return self.getToken(PlSqlParser.QUEUE, 0)

        def QUEUE_ROWP(self):
            return self.getToken(PlSqlParser.QUEUE_ROWP, 0)

        def QUIESCE(self):
            return self.getToken(PlSqlParser.QUIESCE, 0)

        def QUORUM(self):
            return self.getToken(PlSqlParser.QUORUM, 0)

        def QUOTA(self):
            return self.getToken(PlSqlParser.QUOTA, 0)

        def RANDOM_LOCAL(self):
            return self.getToken(PlSqlParser.RANDOM_LOCAL, 0)

        def RANDOM(self):
            return self.getToken(PlSqlParser.RANDOM, 0)

        def RANGE(self):
            return self.getToken(PlSqlParser.RANGE, 0)

        def RANKM(self):
            return self.getToken(PlSqlParser.RANKM, 0)

        def RANK(self):
            return self.getToken(PlSqlParser.RANK, 0)

        def RAPIDLY(self):
            return self.getToken(PlSqlParser.RAPIDLY, 0)

        def RATIO_TO_REPORT(self):
            return self.getToken(PlSqlParser.RATIO_TO_REPORT, 0)

        def RAWTOHEX(self):
            return self.getToken(PlSqlParser.RAWTOHEX, 0)

        def RAWTONHEX(self):
            return self.getToken(PlSqlParser.RAWTONHEX, 0)

        def RBA(self):
            return self.getToken(PlSqlParser.RBA, 0)

        def RBO_OUTLINE(self):
            return self.getToken(PlSqlParser.RBO_OUTLINE, 0)

        def RDBA(self):
            return self.getToken(PlSqlParser.RDBA, 0)

        def READ(self):
            return self.getToken(PlSqlParser.READ, 0)

        def READS(self):
            return self.getToken(PlSqlParser.READS, 0)

        def REAL(self):
            return self.getToken(PlSqlParser.REAL, 0)

        def REBALANCE(self):
            return self.getToken(PlSqlParser.REBALANCE, 0)

        def REBUILD(self):
            return self.getToken(PlSqlParser.REBUILD, 0)

        def RECORDS_PER_BLOCK(self):
            return self.getToken(PlSqlParser.RECORDS_PER_BLOCK, 0)

        def RECOVERABLE(self):
            return self.getToken(PlSqlParser.RECOVERABLE, 0)

        def RECOVER(self):
            return self.getToken(PlSqlParser.RECOVER, 0)

        def RECOVERY(self):
            return self.getToken(PlSqlParser.RECOVERY, 0)

        def RECYCLEBIN(self):
            return self.getToken(PlSqlParser.RECYCLEBIN, 0)

        def RECYCLE(self):
            return self.getToken(PlSqlParser.RECYCLE, 0)

        def REDACTION(self):
            return self.getToken(PlSqlParser.REDACTION, 0)

        def REDO(self):
            return self.getToken(PlSqlParser.REDO, 0)

        def REDUCED(self):
            return self.getToken(PlSqlParser.REDUCED, 0)

        def REDUNDANCY(self):
            return self.getToken(PlSqlParser.REDUNDANCY, 0)

        def REF_CASCADE_CURSOR(self):
            return self.getToken(PlSqlParser.REF_CASCADE_CURSOR, 0)

        def REFERENCED(self):
            return self.getToken(PlSqlParser.REFERENCED, 0)

        def REFERENCE(self):
            return self.getToken(PlSqlParser.REFERENCE, 0)

        def REFERENCES(self):
            return self.getToken(PlSqlParser.REFERENCES, 0)

        def REFERENCING(self):
            return self.getToken(PlSqlParser.REFERENCING, 0)

        def REF(self):
            return self.getToken(PlSqlParser.REF, 0)

        def REFRESH(self):
            return self.getToken(PlSqlParser.REFRESH, 0)

        def REFTOHEX(self):
            return self.getToken(PlSqlParser.REFTOHEX, 0)

        def REGEXP_COUNT(self):
            return self.getToken(PlSqlParser.REGEXP_COUNT, 0)

        def REGEXP_INSTR(self):
            return self.getToken(PlSqlParser.REGEXP_INSTR, 0)

        def REGEXP_LIKE(self):
            return self.getToken(PlSqlParser.REGEXP_LIKE, 0)

        def REGEXP_REPLACE(self):
            return self.getToken(PlSqlParser.REGEXP_REPLACE, 0)

        def REGEXP_SUBSTR(self):
            return self.getToken(PlSqlParser.REGEXP_SUBSTR, 0)

        def REGISTER(self):
            return self.getToken(PlSqlParser.REGISTER, 0)

        def REGR_AVGX(self):
            return self.getToken(PlSqlParser.REGR_AVGX, 0)

        def REGR_AVGY(self):
            return self.getToken(PlSqlParser.REGR_AVGY, 0)

        def REGR_COUNT(self):
            return self.getToken(PlSqlParser.REGR_COUNT, 0)

        def REGR_INTERCEPT(self):
            return self.getToken(PlSqlParser.REGR_INTERCEPT, 0)

        def REGR_R2(self):
            return self.getToken(PlSqlParser.REGR_R2, 0)

        def REGR_SLOPE(self):
            return self.getToken(PlSqlParser.REGR_SLOPE, 0)

        def REGR_SXX(self):
            return self.getToken(PlSqlParser.REGR_SXX, 0)

        def REGR_SXY(self):
            return self.getToken(PlSqlParser.REGR_SXY, 0)

        def REGR_SYY(self):
            return self.getToken(PlSqlParser.REGR_SYY, 0)

        def REGULAR(self):
            return self.getToken(PlSqlParser.REGULAR, 0)

        def REJECT(self):
            return self.getToken(PlSqlParser.REJECT, 0)

        def REKEY(self):
            return self.getToken(PlSqlParser.REKEY, 0)

        def RELATIONAL(self):
            return self.getToken(PlSqlParser.RELATIONAL, 0)

        def RELY(self):
            return self.getToken(PlSqlParser.RELY, 0)

        def REMAINDER(self):
            return self.getToken(PlSqlParser.REMAINDER, 0)

        def REMOTE_MAPPED(self):
            return self.getToken(PlSqlParser.REMOTE_MAPPED, 0)

        def REMOVE(self):
            return self.getToken(PlSqlParser.REMOVE, 0)

        def REPAIR(self):
            return self.getToken(PlSqlParser.REPAIR, 0)

        def REPEAT(self):
            return self.getToken(PlSqlParser.REPEAT, 0)

        def REPLACE(self):
            return self.getToken(PlSqlParser.REPLACE, 0)

        def REPLICATION(self):
            return self.getToken(PlSqlParser.REPLICATION, 0)

        def REQUIRED(self):
            return self.getToken(PlSqlParser.REQUIRED, 0)

        def RESETLOGS(self):
            return self.getToken(PlSqlParser.RESETLOGS, 0)

        def RESET(self):
            return self.getToken(PlSqlParser.RESET, 0)

        def RESIZE(self):
            return self.getToken(PlSqlParser.RESIZE, 0)

        def RESOLVE(self):
            return self.getToken(PlSqlParser.RESOLVE, 0)

        def RESOLVER(self):
            return self.getToken(PlSqlParser.RESOLVER, 0)

        def RESPECT(self):
            return self.getToken(PlSqlParser.RESPECT, 0)

        def RESTORE_AS_INTERVALS(self):
            return self.getToken(PlSqlParser.RESTORE_AS_INTERVALS, 0)

        def RESTORE(self):
            return self.getToken(PlSqlParser.RESTORE, 0)

        def RESTRICT_ALL_REF_CONS(self):
            return self.getToken(PlSqlParser.RESTRICT_ALL_REF_CONS, 0)

        def RESTRICTED(self):
            return self.getToken(PlSqlParser.RESTRICTED, 0)

        def RESTRICT(self):
            return self.getToken(PlSqlParser.RESTRICT, 0)

        def RESULT_CACHE(self):
            return self.getToken(PlSqlParser.RESULT_CACHE, 0)

        def RESUMABLE(self):
            return self.getToken(PlSqlParser.RESUMABLE, 0)

        def RESUME(self):
            return self.getToken(PlSqlParser.RESUME, 0)

        def RETENTION(self):
            return self.getToken(PlSqlParser.RETENTION, 0)

        def RETRY_ON_ROW_CHANGE(self):
            return self.getToken(PlSqlParser.RETRY_ON_ROW_CHANGE, 0)

        def RETURNING(self):
            return self.getToken(PlSqlParser.RETURNING, 0)

        def RETURN(self):
            return self.getToken(PlSqlParser.RETURN, 0)

        def REUSE(self):
            return self.getToken(PlSqlParser.REUSE, 0)

        def REVERSE(self):
            return self.getToken(PlSqlParser.REVERSE, 0)

        def REWRITE(self):
            return self.getToken(PlSqlParser.REWRITE, 0)

        def REWRITE_OR_ERROR(self):
            return self.getToken(PlSqlParser.REWRITE_OR_ERROR, 0)

        def RIGHT(self):
            return self.getToken(PlSqlParser.RIGHT, 0)

        def ROLE(self):
            return self.getToken(PlSqlParser.ROLE, 0)

        def ROLES(self):
            return self.getToken(PlSqlParser.ROLES, 0)

        def ROLLBACK(self):
            return self.getToken(PlSqlParser.ROLLBACK, 0)

        def ROLLING(self):
            return self.getToken(PlSqlParser.ROLLING, 0)

        def ROLLUP(self):
            return self.getToken(PlSqlParser.ROLLUP, 0)

        def ROOT(self):
            return self.getToken(PlSqlParser.ROOT, 0)

        def ROUND(self):
            return self.getToken(PlSqlParser.ROUND, 0)

        def ROWDEPENDENCIES(self):
            return self.getToken(PlSqlParser.ROWDEPENDENCIES, 0)

        def ROWID(self):
            return self.getToken(PlSqlParser.ROWID, 0)

        def ROWIDTOCHAR(self):
            return self.getToken(PlSqlParser.ROWIDTOCHAR, 0)

        def ROWIDTONCHAR(self):
            return self.getToken(PlSqlParser.ROWIDTONCHAR, 0)

        def ROW_LENGTH(self):
            return self.getToken(PlSqlParser.ROW_LENGTH, 0)

        def ROW(self):
            return self.getToken(PlSqlParser.ROW, 0)

        def ROW_NUMBER(self):
            return self.getToken(PlSqlParser.ROW_NUMBER, 0)

        def ROWNUM(self):
            return self.getToken(PlSqlParser.ROWNUM, 0)

        def ROWS(self):
            return self.getToken(PlSqlParser.ROWS, 0)

        def RPAD(self):
            return self.getToken(PlSqlParser.RPAD, 0)

        def RTRIM(self):
            return self.getToken(PlSqlParser.RTRIM, 0)

        def RULE(self):
            return self.getToken(PlSqlParser.RULE, 0)

        def RULES(self):
            return self.getToken(PlSqlParser.RULES, 0)

        def SALT(self):
            return self.getToken(PlSqlParser.SALT, 0)

        def SAMPLE(self):
            return self.getToken(PlSqlParser.SAMPLE, 0)

        def SAVE_AS_INTERVALS(self):
            return self.getToken(PlSqlParser.SAVE_AS_INTERVALS, 0)

        def SAVEPOINT(self):
            return self.getToken(PlSqlParser.SAVEPOINT, 0)

        def SB4(self):
            return self.getToken(PlSqlParser.SB4, 0)

        def SCALE(self):
            return self.getToken(PlSqlParser.SCALE, 0)

        def SCALE_ROWS(self):
            return self.getToken(PlSqlParser.SCALE_ROWS, 0)

        def SCAN_INSTANCES(self):
            return self.getToken(PlSqlParser.SCAN_INSTANCES, 0)

        def SCAN(self):
            return self.getToken(PlSqlParser.SCAN, 0)

        def SCHEDULER(self):
            return self.getToken(PlSqlParser.SCHEDULER, 0)

        def SCHEMACHECK(self):
            return self.getToken(PlSqlParser.SCHEMACHECK, 0)

        def SCHEMA(self):
            return self.getToken(PlSqlParser.SCHEMA, 0)

        def SCN_ASCENDING(self):
            return self.getToken(PlSqlParser.SCN_ASCENDING, 0)

        def SCN(self):
            return self.getToken(PlSqlParser.SCN, 0)

        def SCOPE(self):
            return self.getToken(PlSqlParser.SCOPE, 0)

        def SD_ALL(self):
            return self.getToken(PlSqlParser.SD_ALL, 0)

        def SD_INHIBIT(self):
            return self.getToken(PlSqlParser.SD_INHIBIT, 0)

        def SD_SHOW(self):
            return self.getToken(PlSqlParser.SD_SHOW, 0)

        def SEARCH(self):
            return self.getToken(PlSqlParser.SEARCH, 0)

        def SECOND(self):
            return self.getToken(PlSqlParser.SECOND, 0)

        def SECUREFILE_DBA(self):
            return self.getToken(PlSqlParser.SECUREFILE_DBA, 0)

        def SECUREFILE(self):
            return self.getToken(PlSqlParser.SECUREFILE, 0)

        def SECURITY(self):
            return self.getToken(PlSqlParser.SECURITY, 0)

        def SEED(self):
            return self.getToken(PlSqlParser.SEED, 0)

        def SEG_BLOCK(self):
            return self.getToken(PlSqlParser.SEG_BLOCK, 0)

        def SEG_FILE(self):
            return self.getToken(PlSqlParser.SEG_FILE, 0)

        def SEGMENT(self):
            return self.getToken(PlSqlParser.SEGMENT, 0)

        def SELECTIVITY(self):
            return self.getToken(PlSqlParser.SELECTIVITY, 0)

        def SEMIJOIN_DRIVER(self):
            return self.getToken(PlSqlParser.SEMIJOIN_DRIVER, 0)

        def SEMIJOIN(self):
            return self.getToken(PlSqlParser.SEMIJOIN, 0)

        def SEMI_TO_INNER(self):
            return self.getToken(PlSqlParser.SEMI_TO_INNER, 0)

        def SEQUENCED(self):
            return self.getToken(PlSqlParser.SEQUENCED, 0)

        def SEQUENCE(self):
            return self.getToken(PlSqlParser.SEQUENCE, 0)

        def SEQUENTIAL(self):
            return self.getToken(PlSqlParser.SEQUENTIAL, 0)

        def SERIALIZABLE(self):
            return self.getToken(PlSqlParser.SERIALIZABLE, 0)

        def SERVERERROR(self):
            return self.getToken(PlSqlParser.SERVERERROR, 0)

        def SERVICE(self):
            return self.getToken(PlSqlParser.SERVICE, 0)

        def SESSION_CACHED_CURSORS(self):
            return self.getToken(PlSqlParser.SESSION_CACHED_CURSORS, 0)

        def SESSION(self):
            return self.getToken(PlSqlParser.SESSION, 0)

        def SESSIONS_PER_USER(self):
            return self.getToken(PlSqlParser.SESSIONS_PER_USER, 0)

        def SESSIONTIMEZONE(self):
            return self.getToken(PlSqlParser.SESSIONTIMEZONE, 0)

        def SESSIONTZNAME(self):
            return self.getToken(PlSqlParser.SESSIONTZNAME, 0)

        def SETS(self):
            return self.getToken(PlSqlParser.SETS, 0)

        def SETTINGS(self):
            return self.getToken(PlSqlParser.SETTINGS, 0)

        def SET_TO_JOIN(self):
            return self.getToken(PlSqlParser.SET_TO_JOIN, 0)

        def SEVERE(self):
            return self.getToken(PlSqlParser.SEVERE, 0)

        def SHARED(self):
            return self.getToken(PlSqlParser.SHARED, 0)

        def SHARED_POOL(self):
            return self.getToken(PlSqlParser.SHARED_POOL, 0)

        def SHOW(self):
            return self.getToken(PlSqlParser.SHOW, 0)

        def SHRINK(self):
            return self.getToken(PlSqlParser.SHRINK, 0)

        def SHUTDOWN(self):
            return self.getToken(PlSqlParser.SHUTDOWN, 0)

        def SIBLINGS(self):
            return self.getToken(PlSqlParser.SIBLINGS, 0)

        def SID(self):
            return self.getToken(PlSqlParser.SID, 0)

        def SIGNAL_COMPONENT(self):
            return self.getToken(PlSqlParser.SIGNAL_COMPONENT, 0)

        def SIGNAL_FUNCTION(self):
            return self.getToken(PlSqlParser.SIGNAL_FUNCTION, 0)

        def SIGN(self):
            return self.getToken(PlSqlParser.SIGN, 0)

        def SIMPLE(self):
            return self.getToken(PlSqlParser.SIMPLE, 0)

        def SINGLE(self):
            return self.getToken(PlSqlParser.SINGLE, 0)

        def SINGLETASK(self):
            return self.getToken(PlSqlParser.SINGLETASK, 0)

        def SINH(self):
            return self.getToken(PlSqlParser.SINH, 0)

        def SIN(self):
            return self.getToken(PlSqlParser.SIN, 0)

        def SKIP_EXT_OPTIMIZER(self):
            return self.getToken(PlSqlParser.SKIP_EXT_OPTIMIZER, 0)

        def SKIP_(self):
            return self.getToken(PlSqlParser.SKIP_, 0)

        def SKIP_UNQ_UNUSABLE_IDX(self):
            return self.getToken(PlSqlParser.SKIP_UNQ_UNUSABLE_IDX, 0)

        def SKIP_UNUSABLE_INDEXES(self):
            return self.getToken(PlSqlParser.SKIP_UNUSABLE_INDEXES, 0)

        def SMALLFILE(self):
            return self.getToken(PlSqlParser.SMALLFILE, 0)

        def SNAPSHOT(self):
            return self.getToken(PlSqlParser.SNAPSHOT, 0)

        def SOME(self):
            return self.getToken(PlSqlParser.SOME, 0)

        def SORT(self):
            return self.getToken(PlSqlParser.SORT, 0)

        def SOUNDEX(self):
            return self.getToken(PlSqlParser.SOUNDEX, 0)

        def SOURCE(self):
            return self.getToken(PlSqlParser.SOURCE, 0)

        def SPACE_KEYWORD(self):
            return self.getToken(PlSqlParser.SPACE_KEYWORD, 0)

        def SPECIFICATION(self):
            return self.getToken(PlSqlParser.SPECIFICATION, 0)

        def SPFILE(self):
            return self.getToken(PlSqlParser.SPFILE, 0)

        def SPLIT(self):
            return self.getToken(PlSqlParser.SPLIT, 0)

        def SPREADSHEET(self):
            return self.getToken(PlSqlParser.SPREADSHEET, 0)

        def SQLLDR(self):
            return self.getToken(PlSqlParser.SQLLDR, 0)

        def SQL(self):
            return self.getToken(PlSqlParser.SQL, 0)

        def SQL_TRACE(self):
            return self.getToken(PlSqlParser.SQL_TRACE, 0)

        def SQL_MACRO(self):
            return self.getToken(PlSqlParser.SQL_MACRO, 0)

        def SQRT(self):
            return self.getToken(PlSqlParser.SQRT, 0)

        def STALE(self):
            return self.getToken(PlSqlParser.STALE, 0)

        def STANDALONE(self):
            return self.getToken(PlSqlParser.STANDALONE, 0)

        def STANDBY_MAX_DATA_DELAY(self):
            return self.getToken(PlSqlParser.STANDBY_MAX_DATA_DELAY, 0)

        def STANDBY(self):
            return self.getToken(PlSqlParser.STANDBY, 0)

        def STAR(self):
            return self.getToken(PlSqlParser.STAR, 0)

        def STAR_TRANSFORMATION(self):
            return self.getToken(PlSqlParser.STAR_TRANSFORMATION, 0)

        def STARTUP(self):
            return self.getToken(PlSqlParser.STARTUP, 0)

        def STATEMENT_ID(self):
            return self.getToken(PlSqlParser.STATEMENT_ID, 0)

        def STATEMENT_QUEUING(self):
            return self.getToken(PlSqlParser.STATEMENT_QUEUING, 0)

        def STATEMENTS(self):
            return self.getToken(PlSqlParser.STATEMENTS, 0)

        def STATIC(self):
            return self.getToken(PlSqlParser.STATIC, 0)

        def STATISTICS(self):
            return self.getToken(PlSqlParser.STATISTICS, 0)

        def STATS_BINOMIAL_TEST(self):
            return self.getToken(PlSqlParser.STATS_BINOMIAL_TEST, 0)

        def STATS_CROSSTAB(self):
            return self.getToken(PlSqlParser.STATS_CROSSTAB, 0)

        def STATS_F_TEST(self):
            return self.getToken(PlSqlParser.STATS_F_TEST, 0)

        def STATS_KS_TEST(self):
            return self.getToken(PlSqlParser.STATS_KS_TEST, 0)

        def STATS_MODE(self):
            return self.getToken(PlSqlParser.STATS_MODE, 0)

        def STATS_MW_TEST(self):
            return self.getToken(PlSqlParser.STATS_MW_TEST, 0)

        def STATS_ONE_WAY_ANOVA(self):
            return self.getToken(PlSqlParser.STATS_ONE_WAY_ANOVA, 0)

        def STATS_T_TEST_INDEP(self):
            return self.getToken(PlSqlParser.STATS_T_TEST_INDEP, 0)

        def STATS_T_TEST_INDEPU(self):
            return self.getToken(PlSqlParser.STATS_T_TEST_INDEPU, 0)

        def STATS_T_TEST_ONE(self):
            return self.getToken(PlSqlParser.STATS_T_TEST_ONE, 0)

        def STATS_T_TEST_PAIRED(self):
            return self.getToken(PlSqlParser.STATS_T_TEST_PAIRED, 0)

        def STATS_WSR_TEST(self):
            return self.getToken(PlSqlParser.STATS_WSR_TEST, 0)

        def STDDEV(self):
            return self.getToken(PlSqlParser.STDDEV, 0)

        def STDDEV_POP(self):
            return self.getToken(PlSqlParser.STDDEV_POP, 0)

        def STDDEV_SAMP(self):
            return self.getToken(PlSqlParser.STDDEV_SAMP, 0)

        def STOP(self):
            return self.getToken(PlSqlParser.STOP, 0)

        def STORAGE(self):
            return self.getToken(PlSqlParser.STORAGE, 0)

        def STORE(self):
            return self.getToken(PlSqlParser.STORE, 0)

        def STREAMS(self):
            return self.getToken(PlSqlParser.STREAMS, 0)

        def STRICT(self):
            return self.getToken(PlSqlParser.STRICT, 0)

        def STRING(self):
            return self.getToken(PlSqlParser.STRING, 0)

        def STRIPE_COLUMNS(self):
            return self.getToken(PlSqlParser.STRIPE_COLUMNS, 0)

        def STRIPE_WIDTH(self):
            return self.getToken(PlSqlParser.STRIPE_WIDTH, 0)

        def STRIP(self):
            return self.getToken(PlSqlParser.STRIP, 0)

        def STRUCTURE(self):
            return self.getToken(PlSqlParser.STRUCTURE, 0)

        def SUBMULTISET(self):
            return self.getToken(PlSqlParser.SUBMULTISET, 0)

        def SUBPARTITION(self):
            return self.getToken(PlSqlParser.SUBPARTITION, 0)

        def SUBPARTITION_REL(self):
            return self.getToken(PlSqlParser.SUBPARTITION_REL, 0)

        def SUBPARTITIONS(self):
            return self.getToken(PlSqlParser.SUBPARTITIONS, 0)

        def SUBQUERIES(self):
            return self.getToken(PlSqlParser.SUBQUERIES, 0)

        def SUBQUERY_PRUNING(self):
            return self.getToken(PlSqlParser.SUBQUERY_PRUNING, 0)

        def SUBSTITUTABLE(self):
            return self.getToken(PlSqlParser.SUBSTITUTABLE, 0)

        def SUBSTR2(self):
            return self.getToken(PlSqlParser.SUBSTR2, 0)

        def SUBSTR4(self):
            return self.getToken(PlSqlParser.SUBSTR4, 0)

        def SUBSTRB(self):
            return self.getToken(PlSqlParser.SUBSTRB, 0)

        def SUBSTRC(self):
            return self.getToken(PlSqlParser.SUBSTRC, 0)

        def SUBSTR(self):
            return self.getToken(PlSqlParser.SUBSTR, 0)

        def SUCCESSFUL(self):
            return self.getToken(PlSqlParser.SUCCESSFUL, 0)

        def SUMMARY(self):
            return self.getToken(PlSqlParser.SUMMARY, 0)

        def SUM(self):
            return self.getToken(PlSqlParser.SUM, 0)

        def SUPPLEMENTAL(self):
            return self.getToken(PlSqlParser.SUPPLEMENTAL, 0)

        def SUSPEND(self):
            return self.getToken(PlSqlParser.SUSPEND, 0)

        def SWAP_JOIN_INPUTS(self):
            return self.getToken(PlSqlParser.SWAP_JOIN_INPUTS, 0)

        def SWITCH(self):
            return self.getToken(PlSqlParser.SWITCH, 0)

        def SWITCHOVER(self):
            return self.getToken(PlSqlParser.SWITCHOVER, 0)

        def SYNCHRONOUS(self):
            return self.getToken(PlSqlParser.SYNCHRONOUS, 0)

        def SYNC(self):
            return self.getToken(PlSqlParser.SYNC, 0)

        def SYS(self):
            return self.getToken(PlSqlParser.SYS, 0)

        def SYSASM(self):
            return self.getToken(PlSqlParser.SYSASM, 0)

        def SYS_AUDIT(self):
            return self.getToken(PlSqlParser.SYS_AUDIT, 0)

        def SYSAUX(self):
            return self.getToken(PlSqlParser.SYSAUX, 0)

        def SYS_CHECKACL(self):
            return self.getToken(PlSqlParser.SYS_CHECKACL, 0)

        def SYS_CONNECT_BY_PATH(self):
            return self.getToken(PlSqlParser.SYS_CONNECT_BY_PATH, 0)

        def SYS_CONTEXT(self):
            return self.getToken(PlSqlParser.SYS_CONTEXT, 0)

        def SYSDATE(self):
            return self.getToken(PlSqlParser.SYSDATE, 0)

        def SYSDBA(self):
            return self.getToken(PlSqlParser.SYSDBA, 0)

        def SYS_DBURIGEN(self):
            return self.getToken(PlSqlParser.SYS_DBURIGEN, 0)

        def SYS_DL_CURSOR(self):
            return self.getToken(PlSqlParser.SYS_DL_CURSOR, 0)

        def SYS_DM_RXFORM_CHR(self):
            return self.getToken(PlSqlParser.SYS_DM_RXFORM_CHR, 0)

        def SYS_DM_RXFORM_NUM(self):
            return self.getToken(PlSqlParser.SYS_DM_RXFORM_NUM, 0)

        def SYS_DOM_COMPARE(self):
            return self.getToken(PlSqlParser.SYS_DOM_COMPARE, 0)

        def SYS_DST_PRIM2SEC(self):
            return self.getToken(PlSqlParser.SYS_DST_PRIM2SEC, 0)

        def SYS_DST_SEC2PRIM(self):
            return self.getToken(PlSqlParser.SYS_DST_SEC2PRIM, 0)

        def SYS_ET_BFILE_TO_RAW(self):
            return self.getToken(PlSqlParser.SYS_ET_BFILE_TO_RAW, 0)

        def SYS_ET_BLOB_TO_IMAGE(self):
            return self.getToken(PlSqlParser.SYS_ET_BLOB_TO_IMAGE, 0)

        def SYS_ET_IMAGE_TO_BLOB(self):
            return self.getToken(PlSqlParser.SYS_ET_IMAGE_TO_BLOB, 0)

        def SYS_ET_RAW_TO_BFILE(self):
            return self.getToken(PlSqlParser.SYS_ET_RAW_TO_BFILE, 0)

        def SYS_EXTPDTXT(self):
            return self.getToken(PlSqlParser.SYS_EXTPDTXT, 0)

        def SYS_EXTRACT_UTC(self):
            return self.getToken(PlSqlParser.SYS_EXTRACT_UTC, 0)

        def SYS_FBT_INSDEL(self):
            return self.getToken(PlSqlParser.SYS_FBT_INSDEL, 0)

        def SYS_FILTER_ACLS(self):
            return self.getToken(PlSqlParser.SYS_FILTER_ACLS, 0)

        def SYS_FNMATCHES(self):
            return self.getToken(PlSqlParser.SYS_FNMATCHES, 0)

        def SYS_FNREPLACE(self):
            return self.getToken(PlSqlParser.SYS_FNREPLACE, 0)

        def SYS_GET_ACLIDS(self):
            return self.getToken(PlSqlParser.SYS_GET_ACLIDS, 0)

        def SYS_GET_PRIVILEGES(self):
            return self.getToken(PlSqlParser.SYS_GET_PRIVILEGES, 0)

        def SYS_GETTOKENID(self):
            return self.getToken(PlSqlParser.SYS_GETTOKENID, 0)

        def SYS_GETXTIVAL(self):
            return self.getToken(PlSqlParser.SYS_GETXTIVAL, 0)

        def SYS_GUID(self):
            return self.getToken(PlSqlParser.SYS_GUID, 0)

        def SYS_MAKEXML(self):
            return self.getToken(PlSqlParser.SYS_MAKEXML, 0)

        def SYS_MAKE_XMLNODEID(self):
            return self.getToken(PlSqlParser.SYS_MAKE_XMLNODEID, 0)

        def SYS_MKXMLATTR(self):
            return self.getToken(PlSqlParser.SYS_MKXMLATTR, 0)

        def SYS_OP_ADT2BIN(self):
            return self.getToken(PlSqlParser.SYS_OP_ADT2BIN, 0)

        def SYS_OP_ADTCONS(self):
            return self.getToken(PlSqlParser.SYS_OP_ADTCONS, 0)

        def SYS_OP_ALSCRVAL(self):
            return self.getToken(PlSqlParser.SYS_OP_ALSCRVAL, 0)

        def SYS_OP_ATG(self):
            return self.getToken(PlSqlParser.SYS_OP_ATG, 0)

        def SYS_OP_BIN2ADT(self):
            return self.getToken(PlSqlParser.SYS_OP_BIN2ADT, 0)

        def SYS_OP_BITVEC(self):
            return self.getToken(PlSqlParser.SYS_OP_BITVEC, 0)

        def SYS_OP_BL2R(self):
            return self.getToken(PlSqlParser.SYS_OP_BL2R, 0)

        def SYS_OP_BLOOM_FILTER_LIST(self):
            return self.getToken(PlSqlParser.SYS_OP_BLOOM_FILTER_LIST, 0)

        def SYS_OP_BLOOM_FILTER(self):
            return self.getToken(PlSqlParser.SYS_OP_BLOOM_FILTER, 0)

        def SYS_OP_C2C(self):
            return self.getToken(PlSqlParser.SYS_OP_C2C, 0)

        def SYS_OP_CAST(self):
            return self.getToken(PlSqlParser.SYS_OP_CAST, 0)

        def SYS_OP_CEG(self):
            return self.getToken(PlSqlParser.SYS_OP_CEG, 0)

        def SYS_OP_CL2C(self):
            return self.getToken(PlSqlParser.SYS_OP_CL2C, 0)

        def SYS_OP_COMBINED_HASH(self):
            return self.getToken(PlSqlParser.SYS_OP_COMBINED_HASH, 0)

        def SYS_OP_COMP(self):
            return self.getToken(PlSqlParser.SYS_OP_COMP, 0)

        def SYS_OP_CONVERT(self):
            return self.getToken(PlSqlParser.SYS_OP_CONVERT, 0)

        def SYS_OP_COUNTCHG(self):
            return self.getToken(PlSqlParser.SYS_OP_COUNTCHG, 0)

        def SYS_OP_CSCONV(self):
            return self.getToken(PlSqlParser.SYS_OP_CSCONV, 0)

        def SYS_OP_CSCONVTEST(self):
            return self.getToken(PlSqlParser.SYS_OP_CSCONVTEST, 0)

        def SYS_OP_CSR(self):
            return self.getToken(PlSqlParser.SYS_OP_CSR, 0)

        def SYS_OP_CSX_PATCH(self):
            return self.getToken(PlSqlParser.SYS_OP_CSX_PATCH, 0)

        def SYS_OP_DECOMP(self):
            return self.getToken(PlSqlParser.SYS_OP_DECOMP, 0)

        def SYS_OP_DESCEND(self):
            return self.getToken(PlSqlParser.SYS_OP_DESCEND, 0)

        def SYS_OP_DISTINCT(self):
            return self.getToken(PlSqlParser.SYS_OP_DISTINCT, 0)

        def SYS_OP_DRA(self):
            return self.getToken(PlSqlParser.SYS_OP_DRA, 0)

        def SYS_OP_DUMP(self):
            return self.getToken(PlSqlParser.SYS_OP_DUMP, 0)

        def SYS_OP_DV_CHECK(self):
            return self.getToken(PlSqlParser.SYS_OP_DV_CHECK, 0)

        def SYS_OP_ENFORCE_NOT_NULL(self):
            return self.getToken(PlSqlParser.SYS_OP_ENFORCE_NOT_NULL, 0)

        def SYSOPER(self):
            return self.getToken(PlSqlParser.SYSOPER, 0)

        def SYS_OP_EXTRACT(self):
            return self.getToken(PlSqlParser.SYS_OP_EXTRACT, 0)

        def SYS_OP_GROUPING(self):
            return self.getToken(PlSqlParser.SYS_OP_GROUPING, 0)

        def SYS_OP_GUID(self):
            return self.getToken(PlSqlParser.SYS_OP_GUID, 0)

        def SYS_OP_IIX(self):
            return self.getToken(PlSqlParser.SYS_OP_IIX, 0)

        def SYS_OP_ITR(self):
            return self.getToken(PlSqlParser.SYS_OP_ITR, 0)

        def SYS_OP_LBID(self):
            return self.getToken(PlSqlParser.SYS_OP_LBID, 0)

        def SYS_OP_LOBLOC2BLOB(self):
            return self.getToken(PlSqlParser.SYS_OP_LOBLOC2BLOB, 0)

        def SYS_OP_LOBLOC2CLOB(self):
            return self.getToken(PlSqlParser.SYS_OP_LOBLOC2CLOB, 0)

        def SYS_OP_LOBLOC2ID(self):
            return self.getToken(PlSqlParser.SYS_OP_LOBLOC2ID, 0)

        def SYS_OP_LOBLOC2NCLOB(self):
            return self.getToken(PlSqlParser.SYS_OP_LOBLOC2NCLOB, 0)

        def SYS_OP_LOBLOC2TYP(self):
            return self.getToken(PlSqlParser.SYS_OP_LOBLOC2TYP, 0)

        def SYS_OP_LSVI(self):
            return self.getToken(PlSqlParser.SYS_OP_LSVI, 0)

        def SYS_OP_LVL(self):
            return self.getToken(PlSqlParser.SYS_OP_LVL, 0)

        def SYS_OP_MAKEOID(self):
            return self.getToken(PlSqlParser.SYS_OP_MAKEOID, 0)

        def SYS_OP_MAP_NONNULL(self):
            return self.getToken(PlSqlParser.SYS_OP_MAP_NONNULL, 0)

        def SYS_OP_MSR(self):
            return self.getToken(PlSqlParser.SYS_OP_MSR, 0)

        def SYS_OP_NICOMBINE(self):
            return self.getToken(PlSqlParser.SYS_OP_NICOMBINE, 0)

        def SYS_OP_NIEXTRACT(self):
            return self.getToken(PlSqlParser.SYS_OP_NIEXTRACT, 0)

        def SYS_OP_NII(self):
            return self.getToken(PlSqlParser.SYS_OP_NII, 0)

        def SYS_OP_NIX(self):
            return self.getToken(PlSqlParser.SYS_OP_NIX, 0)

        def SYS_OP_NOEXPAND(self):
            return self.getToken(PlSqlParser.SYS_OP_NOEXPAND, 0)

        def SYS_OP_NTCIMG(self):
            return self.getToken(PlSqlParser.SYS_OP_NTCIMG, 0)

        def SYS_OP_NUMTORAW(self):
            return self.getToken(PlSqlParser.SYS_OP_NUMTORAW, 0)

        def SYS_OP_OIDVALUE(self):
            return self.getToken(PlSqlParser.SYS_OP_OIDVALUE, 0)

        def SYS_OP_OPNSIZE(self):
            return self.getToken(PlSqlParser.SYS_OP_OPNSIZE, 0)

        def SYS_OP_PAR_1(self):
            return self.getToken(PlSqlParser.SYS_OP_PAR_1, 0)

        def SYS_OP_PARGID_1(self):
            return self.getToken(PlSqlParser.SYS_OP_PARGID_1, 0)

        def SYS_OP_PARGID(self):
            return self.getToken(PlSqlParser.SYS_OP_PARGID, 0)

        def SYS_OP_PAR(self):
            return self.getToken(PlSqlParser.SYS_OP_PAR, 0)

        def SYS_OP_PIVOT(self):
            return self.getToken(PlSqlParser.SYS_OP_PIVOT, 0)

        def SYS_OP_R2O(self):
            return self.getToken(PlSqlParser.SYS_OP_R2O, 0)

        def SYS_OP_RAWTONUM(self):
            return self.getToken(PlSqlParser.SYS_OP_RAWTONUM, 0)

        def SYS_OP_RDTM(self):
            return self.getToken(PlSqlParser.SYS_OP_RDTM, 0)

        def SYS_OP_REF(self):
            return self.getToken(PlSqlParser.SYS_OP_REF, 0)

        def SYS_OP_RMTD(self):
            return self.getToken(PlSqlParser.SYS_OP_RMTD, 0)

        def SYS_OP_ROWIDTOOBJ(self):
            return self.getToken(PlSqlParser.SYS_OP_ROWIDTOOBJ, 0)

        def SYS_OP_RPB(self):
            return self.getToken(PlSqlParser.SYS_OP_RPB, 0)

        def SYS_OPTLOBPRBSC(self):
            return self.getToken(PlSqlParser.SYS_OPTLOBPRBSC, 0)

        def SYS_OP_TOSETID(self):
            return self.getToken(PlSqlParser.SYS_OP_TOSETID, 0)

        def SYS_OP_TPR(self):
            return self.getToken(PlSqlParser.SYS_OP_TPR, 0)

        def SYS_OP_TRTB(self):
            return self.getToken(PlSqlParser.SYS_OP_TRTB, 0)

        def SYS_OPTXICMP(self):
            return self.getToken(PlSqlParser.SYS_OPTXICMP, 0)

        def SYS_OPTXQCASTASNQ(self):
            return self.getToken(PlSqlParser.SYS_OPTXQCASTASNQ, 0)

        def SYS_OP_UNDESCEND(self):
            return self.getToken(PlSqlParser.SYS_OP_UNDESCEND, 0)

        def SYS_OP_VECAND(self):
            return self.getToken(PlSqlParser.SYS_OP_VECAND, 0)

        def SYS_OP_VECBIT(self):
            return self.getToken(PlSqlParser.SYS_OP_VECBIT, 0)

        def SYS_OP_VECOR(self):
            return self.getToken(PlSqlParser.SYS_OP_VECOR, 0)

        def SYS_OP_VECXOR(self):
            return self.getToken(PlSqlParser.SYS_OP_VECXOR, 0)

        def SYS_OP_VERSION(self):
            return self.getToken(PlSqlParser.SYS_OP_VERSION, 0)

        def SYS_OP_VREF(self):
            return self.getToken(PlSqlParser.SYS_OP_VREF, 0)

        def SYS_OP_VVD(self):
            return self.getToken(PlSqlParser.SYS_OP_VVD, 0)

        def SYS_OP_XMLCONS_FOR_CSX(self):
            return self.getToken(PlSqlParser.SYS_OP_XMLCONS_FOR_CSX, 0)

        def SYS_OP_XPTHATG(self):
            return self.getToken(PlSqlParser.SYS_OP_XPTHATG, 0)

        def SYS_OP_XPTHIDX(self):
            return self.getToken(PlSqlParser.SYS_OP_XPTHIDX, 0)

        def SYS_OP_XPTHOP(self):
            return self.getToken(PlSqlParser.SYS_OP_XPTHOP, 0)

        def SYS_OP_XTXT2SQLT(self):
            return self.getToken(PlSqlParser.SYS_OP_XTXT2SQLT, 0)

        def SYS_ORDERKEY_DEPTH(self):
            return self.getToken(PlSqlParser.SYS_ORDERKEY_DEPTH, 0)

        def SYS_ORDERKEY_MAXCHILD(self):
            return self.getToken(PlSqlParser.SYS_ORDERKEY_MAXCHILD, 0)

        def SYS_ORDERKEY_PARENT(self):
            return self.getToken(PlSqlParser.SYS_ORDERKEY_PARENT, 0)

        def SYS_PARALLEL_TXN(self):
            return self.getToken(PlSqlParser.SYS_PARALLEL_TXN, 0)

        def SYS_PATHID_IS_ATTR(self):
            return self.getToken(PlSqlParser.SYS_PATHID_IS_ATTR, 0)

        def SYS_PATHID_IS_NMSPC(self):
            return self.getToken(PlSqlParser.SYS_PATHID_IS_NMSPC, 0)

        def SYS_PATHID_LASTNAME(self):
            return self.getToken(PlSqlParser.SYS_PATHID_LASTNAME, 0)

        def SYS_PATHID_LASTNMSPC(self):
            return self.getToken(PlSqlParser.SYS_PATHID_LASTNMSPC, 0)

        def SYS_PATH_REVERSE(self):
            return self.getToken(PlSqlParser.SYS_PATH_REVERSE, 0)

        def SYS_PXQEXTRACT(self):
            return self.getToken(PlSqlParser.SYS_PXQEXTRACT, 0)

        def SYS_RID_ORDER(self):
            return self.getToken(PlSqlParser.SYS_RID_ORDER, 0)

        def SYS_ROW_DELTA(self):
            return self.getToken(PlSqlParser.SYS_ROW_DELTA, 0)

        def SYS_SC_2_XMLT(self):
            return self.getToken(PlSqlParser.SYS_SC_2_XMLT, 0)

        def SYS_SYNRCIREDO(self):
            return self.getToken(PlSqlParser.SYS_SYNRCIREDO, 0)

        def SYSTEM_DEFINED(self):
            return self.getToken(PlSqlParser.SYSTEM_DEFINED, 0)

        def SYSTEM(self):
            return self.getToken(PlSqlParser.SYSTEM, 0)

        def SYSTIMESTAMP(self):
            return self.getToken(PlSqlParser.SYSTIMESTAMP, 0)

        def SYS_TYPEID(self):
            return self.getToken(PlSqlParser.SYS_TYPEID, 0)

        def SYS_UMAKEXML(self):
            return self.getToken(PlSqlParser.SYS_UMAKEXML, 0)

        def SYS_XMLANALYZE(self):
            return self.getToken(PlSqlParser.SYS_XMLANALYZE, 0)

        def SYS_XMLCONTAINS(self):
            return self.getToken(PlSqlParser.SYS_XMLCONTAINS, 0)

        def SYS_XMLCONV(self):
            return self.getToken(PlSqlParser.SYS_XMLCONV, 0)

        def SYS_XMLEXNSURI(self):
            return self.getToken(PlSqlParser.SYS_XMLEXNSURI, 0)

        def SYS_XMLGEN(self):
            return self.getToken(PlSqlParser.SYS_XMLGEN, 0)

        def SYS_XMLI_LOC_ISNODE(self):
            return self.getToken(PlSqlParser.SYS_XMLI_LOC_ISNODE, 0)

        def SYS_XMLI_LOC_ISTEXT(self):
            return self.getToken(PlSqlParser.SYS_XMLI_LOC_ISTEXT, 0)

        def SYS_XMLINSTR(self):
            return self.getToken(PlSqlParser.SYS_XMLINSTR, 0)

        def SYS_XMLLOCATOR_GETSVAL(self):
            return self.getToken(PlSqlParser.SYS_XMLLOCATOR_GETSVAL, 0)

        def SYS_XMLNODEID_GETCID(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETCID, 0)

        def SYS_XMLNODEID_GETLOCATOR(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETLOCATOR, 0)

        def SYS_XMLNODEID_GETOKEY(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETOKEY, 0)

        def SYS_XMLNODEID_GETPATHID(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETPATHID, 0)

        def SYS_XMLNODEID_GETPTRID(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETPTRID, 0)

        def SYS_XMLNODEID_GETRID(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETRID, 0)

        def SYS_XMLNODEID_GETSVAL(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETSVAL, 0)

        def SYS_XMLNODEID_GETTID(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID_GETTID, 0)

        def SYS_XMLNODEID(self):
            return self.getToken(PlSqlParser.SYS_XMLNODEID, 0)

        def SYS_XMLT_2_SC(self):
            return self.getToken(PlSqlParser.SYS_XMLT_2_SC, 0)

        def SYS_XMLTRANSLATE(self):
            return self.getToken(PlSqlParser.SYS_XMLTRANSLATE, 0)

        def SYS_XMLTYPE2SQL(self):
            return self.getToken(PlSqlParser.SYS_XMLTYPE2SQL, 0)

        def SYS_XQ_ASQLCNV(self):
            return self.getToken(PlSqlParser.SYS_XQ_ASQLCNV, 0)

        def SYS_XQ_ATOMCNVCHK(self):
            return self.getToken(PlSqlParser.SYS_XQ_ATOMCNVCHK, 0)

        def SYS_XQBASEURI(self):
            return self.getToken(PlSqlParser.SYS_XQBASEURI, 0)

        def SYS_XQCASTABLEERRH(self):
            return self.getToken(PlSqlParser.SYS_XQCASTABLEERRH, 0)

        def SYS_XQCODEP2STR(self):
            return self.getToken(PlSqlParser.SYS_XQCODEP2STR, 0)

        def SYS_XQCODEPEQ(self):
            return self.getToken(PlSqlParser.SYS_XQCODEPEQ, 0)

        def SYS_XQCON2SEQ(self):
            return self.getToken(PlSqlParser.SYS_XQCON2SEQ, 0)

        def SYS_XQCONCAT(self):
            return self.getToken(PlSqlParser.SYS_XQCONCAT, 0)

        def SYS_XQDELETE(self):
            return self.getToken(PlSqlParser.SYS_XQDELETE, 0)

        def SYS_XQDFLTCOLATION(self):
            return self.getToken(PlSqlParser.SYS_XQDFLTCOLATION, 0)

        def SYS_XQDOC(self):
            return self.getToken(PlSqlParser.SYS_XQDOC, 0)

        def SYS_XQDOCURI(self):
            return self.getToken(PlSqlParser.SYS_XQDOCURI, 0)

        def SYS_XQDURDIV(self):
            return self.getToken(PlSqlParser.SYS_XQDURDIV, 0)

        def SYS_XQED4URI(self):
            return self.getToken(PlSqlParser.SYS_XQED4URI, 0)

        def SYS_XQENDSWITH(self):
            return self.getToken(PlSqlParser.SYS_XQENDSWITH, 0)

        def SYS_XQERRH(self):
            return self.getToken(PlSqlParser.SYS_XQERRH, 0)

        def SYS_XQERR(self):
            return self.getToken(PlSqlParser.SYS_XQERR, 0)

        def SYS_XQESHTMLURI(self):
            return self.getToken(PlSqlParser.SYS_XQESHTMLURI, 0)

        def SYS_XQEXLOBVAL(self):
            return self.getToken(PlSqlParser.SYS_XQEXLOBVAL, 0)

        def SYS_XQEXSTWRP(self):
            return self.getToken(PlSqlParser.SYS_XQEXSTWRP, 0)

        def SYS_XQEXTRACT(self):
            return self.getToken(PlSqlParser.SYS_XQEXTRACT, 0)

        def SYS_XQEXTRREF(self):
            return self.getToken(PlSqlParser.SYS_XQEXTRREF, 0)

        def SYS_XQEXVAL(self):
            return self.getToken(PlSqlParser.SYS_XQEXVAL, 0)

        def SYS_XQFB2STR(self):
            return self.getToken(PlSqlParser.SYS_XQFB2STR, 0)

        def SYS_XQFNBOOL(self):
            return self.getToken(PlSqlParser.SYS_XQFNBOOL, 0)

        def SYS_XQFNCMP(self):
            return self.getToken(PlSqlParser.SYS_XQFNCMP, 0)

        def SYS_XQFNDATIM(self):
            return self.getToken(PlSqlParser.SYS_XQFNDATIM, 0)

        def SYS_XQFNLNAME(self):
            return self.getToken(PlSqlParser.SYS_XQFNLNAME, 0)

        def SYS_XQFNNM(self):
            return self.getToken(PlSqlParser.SYS_XQFNNM, 0)

        def SYS_XQFNNSURI(self):
            return self.getToken(PlSqlParser.SYS_XQFNNSURI, 0)

        def SYS_XQFNPREDTRUTH(self):
            return self.getToken(PlSqlParser.SYS_XQFNPREDTRUTH, 0)

        def SYS_XQFNQNM(self):
            return self.getToken(PlSqlParser.SYS_XQFNQNM, 0)

        def SYS_XQFNROOT(self):
            return self.getToken(PlSqlParser.SYS_XQFNROOT, 0)

        def SYS_XQFORMATNUM(self):
            return self.getToken(PlSqlParser.SYS_XQFORMATNUM, 0)

        def SYS_XQFTCONTAIN(self):
            return self.getToken(PlSqlParser.SYS_XQFTCONTAIN, 0)

        def SYS_XQFUNCR(self):
            return self.getToken(PlSqlParser.SYS_XQFUNCR, 0)

        def SYS_XQGETCONTENT(self):
            return self.getToken(PlSqlParser.SYS_XQGETCONTENT, 0)

        def SYS_XQINDXOF(self):
            return self.getToken(PlSqlParser.SYS_XQINDXOF, 0)

        def SYS_XQINSERT(self):
            return self.getToken(PlSqlParser.SYS_XQINSERT, 0)

        def SYS_XQINSPFX(self):
            return self.getToken(PlSqlParser.SYS_XQINSPFX, 0)

        def SYS_XQIRI2URI(self):
            return self.getToken(PlSqlParser.SYS_XQIRI2URI, 0)

        def SYS_XQLANG(self):
            return self.getToken(PlSqlParser.SYS_XQLANG, 0)

        def SYS_XQLLNMFRMQNM(self):
            return self.getToken(PlSqlParser.SYS_XQLLNMFRMQNM, 0)

        def SYS_XQMKNODEREF(self):
            return self.getToken(PlSqlParser.SYS_XQMKNODEREF, 0)

        def SYS_XQNILLED(self):
            return self.getToken(PlSqlParser.SYS_XQNILLED, 0)

        def SYS_XQNODENAME(self):
            return self.getToken(PlSqlParser.SYS_XQNODENAME, 0)

        def SYS_XQNORMSPACE(self):
            return self.getToken(PlSqlParser.SYS_XQNORMSPACE, 0)

        def SYS_XQNORMUCODE(self):
            return self.getToken(PlSqlParser.SYS_XQNORMUCODE, 0)

        def SYS_XQ_NRNG(self):
            return self.getToken(PlSqlParser.SYS_XQ_NRNG, 0)

        def SYS_XQNSP4PFX(self):
            return self.getToken(PlSqlParser.SYS_XQNSP4PFX, 0)

        def SYS_XQNSPFRMQNM(self):
            return self.getToken(PlSqlParser.SYS_XQNSPFRMQNM, 0)

        def SYS_XQPFXFRMQNM(self):
            return self.getToken(PlSqlParser.SYS_XQPFXFRMQNM, 0)

        def SYS_XQ_PKSQL2XML(self):
            return self.getToken(PlSqlParser.SYS_XQ_PKSQL2XML, 0)

        def SYS_XQPOLYABS(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYABS, 0)

        def SYS_XQPOLYADD(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYADD, 0)

        def SYS_XQPOLYCEL(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYCEL, 0)

        def SYS_XQPOLYCSTBL(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYCSTBL, 0)

        def SYS_XQPOLYCST(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYCST, 0)

        def SYS_XQPOLYDIV(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYDIV, 0)

        def SYS_XQPOLYFLR(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYFLR, 0)

        def SYS_XQPOLYMOD(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYMOD, 0)

        def SYS_XQPOLYMUL(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYMUL, 0)

        def SYS_XQPOLYRND(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYRND, 0)

        def SYS_XQPOLYSQRT(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYSQRT, 0)

        def SYS_XQPOLYSUB(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYSUB, 0)

        def SYS_XQPOLYUMUS(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYUMUS, 0)

        def SYS_XQPOLYUPLS(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYUPLS, 0)

        def SYS_XQPOLYVEQ(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYVEQ, 0)

        def SYS_XQPOLYVGE(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYVGE, 0)

        def SYS_XQPOLYVGT(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYVGT, 0)

        def SYS_XQPOLYVLE(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYVLE, 0)

        def SYS_XQPOLYVLT(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYVLT, 0)

        def SYS_XQPOLYVNE(self):
            return self.getToken(PlSqlParser.SYS_XQPOLYVNE, 0)

        def SYS_XQREF2VAL(self):
            return self.getToken(PlSqlParser.SYS_XQREF2VAL, 0)

        def SYS_XQRENAME(self):
            return self.getToken(PlSqlParser.SYS_XQRENAME, 0)

        def SYS_XQREPLACE(self):
            return self.getToken(PlSqlParser.SYS_XQREPLACE, 0)

        def SYS_XQRESVURI(self):
            return self.getToken(PlSqlParser.SYS_XQRESVURI, 0)

        def SYS_XQRNDHALF2EVN(self):
            return self.getToken(PlSqlParser.SYS_XQRNDHALF2EVN, 0)

        def SYS_XQRSLVQNM(self):
            return self.getToken(PlSqlParser.SYS_XQRSLVQNM, 0)

        def SYS_XQRYENVPGET(self):
            return self.getToken(PlSqlParser.SYS_XQRYENVPGET, 0)

        def SYS_XQRYVARGET(self):
            return self.getToken(PlSqlParser.SYS_XQRYVARGET, 0)

        def SYS_XQRYWRP(self):
            return self.getToken(PlSqlParser.SYS_XQRYWRP, 0)

        def SYS_XQSEQ2CON4XC(self):
            return self.getToken(PlSqlParser.SYS_XQSEQ2CON4XC, 0)

        def SYS_XQSEQ2CON(self):
            return self.getToken(PlSqlParser.SYS_XQSEQ2CON, 0)

        def SYS_XQSEQDEEPEQ(self):
            return self.getToken(PlSqlParser.SYS_XQSEQDEEPEQ, 0)

        def SYS_XQSEQINSB(self):
            return self.getToken(PlSqlParser.SYS_XQSEQINSB, 0)

        def SYS_XQSEQRM(self):
            return self.getToken(PlSqlParser.SYS_XQSEQRM, 0)

        def SYS_XQSEQRVS(self):
            return self.getToken(PlSqlParser.SYS_XQSEQRVS, 0)

        def SYS_XQSEQSUB(self):
            return self.getToken(PlSqlParser.SYS_XQSEQSUB, 0)

        def SYS_XQSEQTYPMATCH(self):
            return self.getToken(PlSqlParser.SYS_XQSEQTYPMATCH, 0)

        def SYS_XQSTARTSWITH(self):
            return self.getToken(PlSqlParser.SYS_XQSTARTSWITH, 0)

        def SYS_XQSTATBURI(self):
            return self.getToken(PlSqlParser.SYS_XQSTATBURI, 0)

        def SYS_XQSTR2CODEP(self):
            return self.getToken(PlSqlParser.SYS_XQSTR2CODEP, 0)

        def SYS_XQSTRJOIN(self):
            return self.getToken(PlSqlParser.SYS_XQSTRJOIN, 0)

        def SYS_XQSUBSTRAFT(self):
            return self.getToken(PlSqlParser.SYS_XQSUBSTRAFT, 0)

        def SYS_XQSUBSTRBEF(self):
            return self.getToken(PlSqlParser.SYS_XQSUBSTRBEF, 0)

        def SYS_XQTOKENIZE(self):
            return self.getToken(PlSqlParser.SYS_XQTOKENIZE, 0)

        def SYS_XQTREATAS(self):
            return self.getToken(PlSqlParser.SYS_XQTREATAS, 0)

        def SYS_XQ_UPKXML2SQL(self):
            return self.getToken(PlSqlParser.SYS_XQ_UPKXML2SQL, 0)

        def SYS_XQXFORM(self):
            return self.getToken(PlSqlParser.SYS_XQXFORM, 0)

        def TABLE(self):
            return self.getToken(PlSqlParser.TABLE, 0)

        def TABLE_LOOKUP_BY_NL(self):
            return self.getToken(PlSqlParser.TABLE_LOOKUP_BY_NL, 0)

        def TABLES(self):
            return self.getToken(PlSqlParser.TABLES, 0)

        def TABLESPACE(self):
            return self.getToken(PlSqlParser.TABLESPACE, 0)

        def TABLESPACE_NO(self):
            return self.getToken(PlSqlParser.TABLESPACE_NO, 0)

        def TABLE_STATS(self):
            return self.getToken(PlSqlParser.TABLE_STATS, 0)

        def TABNO(self):
            return self.getToken(PlSqlParser.TABNO, 0)

        def TANH(self):
            return self.getToken(PlSqlParser.TANH, 0)

        def TAN(self):
            return self.getToken(PlSqlParser.TAN, 0)

        def TBLORIDXPARTNUM(self):
            return self.getToken(PlSqlParser.TBLORIDXPARTNUM, 0)

        def TEMPFILE(self):
            return self.getToken(PlSqlParser.TEMPFILE, 0)

        def TEMPLATE(self):
            return self.getToken(PlSqlParser.TEMPLATE, 0)

        def TEMPORARY(self):
            return self.getToken(PlSqlParser.TEMPORARY, 0)

        def TEMP_TABLE(self):
            return self.getToken(PlSqlParser.TEMP_TABLE, 0)

        def TEST(self):
            return self.getToken(PlSqlParser.TEST, 0)

        def THAN(self):
            return self.getToken(PlSqlParser.THAN, 0)

        def THE(self):
            return self.getToken(PlSqlParser.THE, 0)

        def THEN(self):
            return self.getToken(PlSqlParser.THEN, 0)

        def THREAD(self):
            return self.getToken(PlSqlParser.THREAD, 0)

        def THROUGH(self):
            return self.getToken(PlSqlParser.THROUGH, 0)

        def TIME(self):
            return self.getToken(PlSqlParser.TIME, 0)

        def TIMING(self):
            return self.getToken(PlSqlParser.TIMING, 0)

        def TIMEOUT(self):
            return self.getToken(PlSqlParser.TIMEOUT, 0)

        def TIMES(self):
            return self.getToken(PlSqlParser.TIMES, 0)

        def TIMESTAMP(self):
            return self.getToken(PlSqlParser.TIMESTAMP, 0)

        def TIMEZONE_ABBR(self):
            return self.getToken(PlSqlParser.TIMEZONE_ABBR, 0)

        def TIMEZONE_HOUR(self):
            return self.getToken(PlSqlParser.TIMEZONE_HOUR, 0)

        def TIMEZONE_MINUTE(self):
            return self.getToken(PlSqlParser.TIMEZONE_MINUTE, 0)

        def TIME_ZONE(self):
            return self.getToken(PlSqlParser.TIME_ZONE, 0)

        def TIMEZONE_OFFSET(self):
            return self.getToken(PlSqlParser.TIMEZONE_OFFSET, 0)

        def TIMEZONE_REGION(self):
            return self.getToken(PlSqlParser.TIMEZONE_REGION, 0)

        def TIV_GB(self):
            return self.getToken(PlSqlParser.TIV_GB, 0)

        def TIV_SSF(self):
            return self.getToken(PlSqlParser.TIV_SSF, 0)

        def TO_BINARY_DOUBLE(self):
            return self.getToken(PlSqlParser.TO_BINARY_DOUBLE, 0)

        def TO_BINARY_FLOAT(self):
            return self.getToken(PlSqlParser.TO_BINARY_FLOAT, 0)

        def TO_BLOB(self):
            return self.getToken(PlSqlParser.TO_BLOB, 0)

        def TO_CHAR(self):
            return self.getToken(PlSqlParser.TO_CHAR, 0)

        def TO_CLOB(self):
            return self.getToken(PlSqlParser.TO_CLOB, 0)

        def TO_DATE(self):
            return self.getToken(PlSqlParser.TO_DATE, 0)

        def TO_DSINTERVAL(self):
            return self.getToken(PlSqlParser.TO_DSINTERVAL, 0)

        def TO_LOB(self):
            return self.getToken(PlSqlParser.TO_LOB, 0)

        def TO_MULTI_BYTE(self):
            return self.getToken(PlSqlParser.TO_MULTI_BYTE, 0)

        def TO_NCHAR(self):
            return self.getToken(PlSqlParser.TO_NCHAR, 0)

        def TO_NCLOB(self):
            return self.getToken(PlSqlParser.TO_NCLOB, 0)

        def TO_NUMBER(self):
            return self.getToken(PlSqlParser.TO_NUMBER, 0)

        def TOPLEVEL(self):
            return self.getToken(PlSqlParser.TOPLEVEL, 0)

        def TO_SINGLE_BYTE(self):
            return self.getToken(PlSqlParser.TO_SINGLE_BYTE, 0)

        def TO_TIME(self):
            return self.getToken(PlSqlParser.TO_TIME, 0)

        def TO_TIMESTAMP(self):
            return self.getToken(PlSqlParser.TO_TIMESTAMP, 0)

        def TO_TIMESTAMP_TZ(self):
            return self.getToken(PlSqlParser.TO_TIMESTAMP_TZ, 0)

        def TO_TIME_TZ(self):
            return self.getToken(PlSqlParser.TO_TIME_TZ, 0)

        def TO_YMINTERVAL(self):
            return self.getToken(PlSqlParser.TO_YMINTERVAL, 0)

        def TRACE(self):
            return self.getToken(PlSqlParser.TRACE, 0)

        def TRACING(self):
            return self.getToken(PlSqlParser.TRACING, 0)

        def TRACKING(self):
            return self.getToken(PlSqlParser.TRACKING, 0)

        def TRAILING(self):
            return self.getToken(PlSqlParser.TRAILING, 0)

        def TRANSACTION(self):
            return self.getToken(PlSqlParser.TRANSACTION, 0)

        def TRANSFORM_DISTINCT_AGG(self):
            return self.getToken(PlSqlParser.TRANSFORM_DISTINCT_AGG, 0)

        def TRANSITIONAL(self):
            return self.getToken(PlSqlParser.TRANSITIONAL, 0)

        def TRANSITION(self):
            return self.getToken(PlSqlParser.TRANSITION, 0)

        def TRANSLATE(self):
            return self.getToken(PlSqlParser.TRANSLATE, 0)

        def TREAT(self):
            return self.getToken(PlSqlParser.TREAT, 0)

        def TRIGGERS(self):
            return self.getToken(PlSqlParser.TRIGGERS, 0)

        def TRIM(self):
            return self.getToken(PlSqlParser.TRIM, 0)

        def TRUE(self):
            return self.getToken(PlSqlParser.TRUE, 0)

        def TRUNCATE(self):
            return self.getToken(PlSqlParser.TRUNCATE, 0)

        def TRUNC(self):
            return self.getToken(PlSqlParser.TRUNC, 0)

        def TRUSTED(self):
            return self.getToken(PlSqlParser.TRUSTED, 0)

        def TUNING(self):
            return self.getToken(PlSqlParser.TUNING, 0)

        def TX(self):
            return self.getToken(PlSqlParser.TX, 0)

        def TYPE(self):
            return self.getToken(PlSqlParser.TYPE, 0)

        def TYPES(self):
            return self.getToken(PlSqlParser.TYPES, 0)

        def TZ_OFFSET(self):
            return self.getToken(PlSqlParser.TZ_OFFSET, 0)

        def UB2(self):
            return self.getToken(PlSqlParser.UB2, 0)

        def UBA(self):
            return self.getToken(PlSqlParser.UBA, 0)

        def UID(self):
            return self.getToken(PlSqlParser.UID, 0)

        def UNARCHIVED(self):
            return self.getToken(PlSqlParser.UNARCHIVED, 0)

        def UNBOUNDED(self):
            return self.getToken(PlSqlParser.UNBOUNDED, 0)

        def UNBOUND(self):
            return self.getToken(PlSqlParser.UNBOUND, 0)

        def UNDER(self):
            return self.getToken(PlSqlParser.UNDER, 0)

        def UNDO(self):
            return self.getToken(PlSqlParser.UNDO, 0)

        def UNDROP(self):
            return self.getToken(PlSqlParser.UNDROP, 0)

        def UNIFORM(self):
            return self.getToken(PlSqlParser.UNIFORM, 0)

        def UNISTR(self):
            return self.getToken(PlSqlParser.UNISTR, 0)

        def UNLIMITED(self):
            return self.getToken(PlSqlParser.UNLIMITED, 0)

        def UNLOAD(self):
            return self.getToken(PlSqlParser.UNLOAD, 0)

        def UNLOCK(self):
            return self.getToken(PlSqlParser.UNLOCK, 0)

        def UNNEST_INNERJ_DISTINCT_VIEW(self):
            return self.getToken(PlSqlParser.UNNEST_INNERJ_DISTINCT_VIEW, 0)

        def UNNEST(self):
            return self.getToken(PlSqlParser.UNNEST, 0)

        def UNNEST_NOSEMIJ_NODISTINCTVIEW(self):
            return self.getToken(PlSqlParser.UNNEST_NOSEMIJ_NODISTINCTVIEW, 0)

        def UNNEST_SEMIJ_VIEW(self):
            return self.getToken(PlSqlParser.UNNEST_SEMIJ_VIEW, 0)

        def UNPACKED(self):
            return self.getToken(PlSqlParser.UNPACKED, 0)

        def UNPIVOT(self):
            return self.getToken(PlSqlParser.UNPIVOT, 0)

        def UNPROTECTED(self):
            return self.getToken(PlSqlParser.UNPROTECTED, 0)

        def UNQUIESCE(self):
            return self.getToken(PlSqlParser.UNQUIESCE, 0)

        def UNRECOVERABLE(self):
            return self.getToken(PlSqlParser.UNRECOVERABLE, 0)

        def UNRESTRICTED(self):
            return self.getToken(PlSqlParser.UNRESTRICTED, 0)

        def UNTIL(self):
            return self.getToken(PlSqlParser.UNTIL, 0)

        def UNUSABLE(self):
            return self.getToken(PlSqlParser.UNUSABLE, 0)

        def UNUSED(self):
            return self.getToken(PlSqlParser.UNUSED, 0)

        def UPDATABLE(self):
            return self.getToken(PlSqlParser.UPDATABLE, 0)

        def UPDATED(self):
            return self.getToken(PlSqlParser.UPDATED, 0)

        def UPDATEXML(self):
            return self.getToken(PlSqlParser.UPDATEXML, 0)

        def UPD_INDEXES(self):
            return self.getToken(PlSqlParser.UPD_INDEXES, 0)

        def UPD_JOININDEX(self):
            return self.getToken(PlSqlParser.UPD_JOININDEX, 0)

        def UPGRADE(self):
            return self.getToken(PlSqlParser.UPGRADE, 0)

        def UPPER(self):
            return self.getToken(PlSqlParser.UPPER, 0)

        def UPSERT(self):
            return self.getToken(PlSqlParser.UPSERT, 0)

        def UROWID(self):
            return self.getToken(PlSqlParser.UROWID, 0)

        def USAGE(self):
            return self.getToken(PlSqlParser.USAGE, 0)

        def USE_ANTI(self):
            return self.getToken(PlSqlParser.USE_ANTI, 0)

        def USE_CONCAT(self):
            return self.getToken(PlSqlParser.USE_CONCAT, 0)

        def USE_HASH_AGGREGATION(self):
            return self.getToken(PlSqlParser.USE_HASH_AGGREGATION, 0)

        def USE_HASH_GBY_FOR_PUSHDOWN(self):
            return self.getToken(PlSqlParser.USE_HASH_GBY_FOR_PUSHDOWN, 0)

        def USE_HASH(self):
            return self.getToken(PlSqlParser.USE_HASH, 0)

        def USE_INVISIBLE_INDEXES(self):
            return self.getToken(PlSqlParser.USE_INVISIBLE_INDEXES, 0)

        def USE_MERGE_CARTESIAN(self):
            return self.getToken(PlSqlParser.USE_MERGE_CARTESIAN, 0)

        def USE_MERGE(self):
            return self.getToken(PlSqlParser.USE_MERGE, 0)

        def USE(self):
            return self.getToken(PlSqlParser.USE, 0)

        def USE_NL(self):
            return self.getToken(PlSqlParser.USE_NL, 0)

        def USE_NL_WITH_INDEX(self):
            return self.getToken(PlSqlParser.USE_NL_WITH_INDEX, 0)

        def USE_PRIVATE_OUTLINES(self):
            return self.getToken(PlSqlParser.USE_PRIVATE_OUTLINES, 0)

        def USER_DEFINED(self):
            return self.getToken(PlSqlParser.USER_DEFINED, 0)

        def USERENV(self):
            return self.getToken(PlSqlParser.USERENV, 0)

        def USERGROUP(self):
            return self.getToken(PlSqlParser.USERGROUP, 0)

        def USER(self):
            return self.getToken(PlSqlParser.USER, 0)

        def USER_RECYCLEBIN(self):
            return self.getToken(PlSqlParser.USER_RECYCLEBIN, 0)

        def USERS(self):
            return self.getToken(PlSqlParser.USERS, 0)

        def USE_SEMI(self):
            return self.getToken(PlSqlParser.USE_SEMI, 0)

        def USE_STORED_OUTLINES(self):
            return self.getToken(PlSqlParser.USE_STORED_OUTLINES, 0)

        def USE_TTT_FOR_GSETS(self):
            return self.getToken(PlSqlParser.USE_TTT_FOR_GSETS, 0)

        def USE_WEAK_NAME_RESL(self):
            return self.getToken(PlSqlParser.USE_WEAK_NAME_RESL, 0)

        def USING(self):
            return self.getToken(PlSqlParser.USING, 0)

        def VALIDATE(self):
            return self.getToken(PlSqlParser.VALIDATE, 0)

        def VALIDATION(self):
            return self.getToken(PlSqlParser.VALIDATION, 0)

        def VALUE(self):
            return self.getToken(PlSqlParser.VALUE, 0)

        def VARIANCE(self):
            return self.getToken(PlSqlParser.VARIANCE, 0)

        def VAR_POP(self):
            return self.getToken(PlSqlParser.VAR_POP, 0)

        def VARRAY(self):
            return self.getToken(PlSqlParser.VARRAY, 0)

        def VARRAYS(self):
            return self.getToken(PlSqlParser.VARRAYS, 0)

        def VAR_SAMP(self):
            return self.getToken(PlSqlParser.VAR_SAMP, 0)

        def VARYING(self):
            return self.getToken(PlSqlParser.VARYING, 0)

        def VECTOR_READ(self):
            return self.getToken(PlSqlParser.VECTOR_READ, 0)

        def VECTOR_READ_TRACE(self):
            return self.getToken(PlSqlParser.VECTOR_READ_TRACE, 0)

        def VERIFY(self):
            return self.getToken(PlSqlParser.VERIFY, 0)

        def VERSIONING(self):
            return self.getToken(PlSqlParser.VERSIONING, 0)

        def VERSION(self):
            return self.getToken(PlSqlParser.VERSION, 0)

        def VERSIONS_ENDSCN(self):
            return self.getToken(PlSqlParser.VERSIONS_ENDSCN, 0)

        def VERSIONS_ENDTIME(self):
            return self.getToken(PlSqlParser.VERSIONS_ENDTIME, 0)

        def VERSIONS(self):
            return self.getToken(PlSqlParser.VERSIONS, 0)

        def VERSIONS_OPERATION(self):
            return self.getToken(PlSqlParser.VERSIONS_OPERATION, 0)

        def VERSIONS_STARTSCN(self):
            return self.getToken(PlSqlParser.VERSIONS_STARTSCN, 0)

        def VERSIONS_STARTTIME(self):
            return self.getToken(PlSqlParser.VERSIONS_STARTTIME, 0)

        def VERSIONS_XID(self):
            return self.getToken(PlSqlParser.VERSIONS_XID, 0)

        def VIRTUAL(self):
            return self.getToken(PlSqlParser.VIRTUAL, 0)

        def VISIBLE(self):
            return self.getToken(PlSqlParser.VISIBLE, 0)

        def VOLUME(self):
            return self.getToken(PlSqlParser.VOLUME, 0)

        def VSIZE(self):
            return self.getToken(PlSqlParser.VSIZE, 0)

        def WAIT(self):
            return self.getToken(PlSqlParser.WAIT, 0)

        def WALLET(self):
            return self.getToken(PlSqlParser.WALLET, 0)

        def WELLFORMED(self):
            return self.getToken(PlSqlParser.WELLFORMED, 0)

        def WHENEVER(self):
            return self.getToken(PlSqlParser.WHENEVER, 0)

        def WHEN(self):
            return self.getToken(PlSqlParser.WHEN, 0)

        def WHITESPACE(self):
            return self.getToken(PlSqlParser.WHITESPACE, 0)

        def WIDTH_BUCKET(self):
            return self.getToken(PlSqlParser.WIDTH_BUCKET, 0)

        def WITHIN(self):
            return self.getToken(PlSqlParser.WITHIN, 0)

        def WITHOUT(self):
            return self.getToken(PlSqlParser.WITHOUT, 0)

        def WORK(self):
            return self.getToken(PlSqlParser.WORK, 0)

        def WRAPPED(self):
            return self.getToken(PlSqlParser.WRAPPED, 0)

        def WRITE(self):
            return self.getToken(PlSqlParser.WRITE, 0)

        def XDB_FASTPATH_INSERT(self):
            return self.getToken(PlSqlParser.XDB_FASTPATH_INSERT, 0)

        def X_DYN_PRUNE(self):
            return self.getToken(PlSqlParser.X_DYN_PRUNE, 0)

        def XID(self):
            return self.getToken(PlSqlParser.XID, 0)

        def XML2OBJECT(self):
            return self.getToken(PlSqlParser.XML2OBJECT, 0)

        def XMLATTRIBUTES(self):
            return self.getToken(PlSqlParser.XMLATTRIBUTES, 0)

        def XMLCAST(self):
            return self.getToken(PlSqlParser.XMLCAST, 0)

        def XMLCDATA(self):
            return self.getToken(PlSqlParser.XMLCDATA, 0)

        def XMLCOLATTVAL(self):
            return self.getToken(PlSqlParser.XMLCOLATTVAL, 0)

        def XMLCOMMENT(self):
            return self.getToken(PlSqlParser.XMLCOMMENT, 0)

        def XMLCONCAT(self):
            return self.getToken(PlSqlParser.XMLCONCAT, 0)

        def XMLDIFF(self):
            return self.getToken(PlSqlParser.XMLDIFF, 0)

        def XML_DML_RWT_STMT(self):
            return self.getToken(PlSqlParser.XML_DML_RWT_STMT, 0)

        def XMLELEMENT(self):
            return self.getToken(PlSqlParser.XMLELEMENT, 0)

        def XMLEXISTS2(self):
            return self.getToken(PlSqlParser.XMLEXISTS2, 0)

        def XMLEXISTS(self):
            return self.getToken(PlSqlParser.XMLEXISTS, 0)

        def XMLFOREST(self):
            return self.getToken(PlSqlParser.XMLFOREST, 0)

        def XMLINDEX_REWRITE_IN_SELECT(self):
            return self.getToken(PlSqlParser.XMLINDEX_REWRITE_IN_SELECT, 0)

        def XMLINDEX_REWRITE(self):
            return self.getToken(PlSqlParser.XMLINDEX_REWRITE, 0)

        def XMLINDEX_SEL_IDX_TBL(self):
            return self.getToken(PlSqlParser.XMLINDEX_SEL_IDX_TBL, 0)

        def XMLISNODE(self):
            return self.getToken(PlSqlParser.XMLISNODE, 0)

        def XMLISVALID(self):
            return self.getToken(PlSqlParser.XMLISVALID, 0)

        def XML(self):
            return self.getToken(PlSqlParser.XML, 0)

        def XMLNAMESPACES(self):
            return self.getToken(PlSqlParser.XMLNAMESPACES, 0)

        def XMLPARSE(self):
            return self.getToken(PlSqlParser.XMLPARSE, 0)

        def XMLPATCH(self):
            return self.getToken(PlSqlParser.XMLPATCH, 0)

        def XMLPI(self):
            return self.getToken(PlSqlParser.XMLPI, 0)

        def XMLQUERY(self):
            return self.getToken(PlSqlParser.XMLQUERY, 0)

        def XMLQUERYVAL(self):
            return self.getToken(PlSqlParser.XMLQUERYVAL, 0)

        def XMLROOT(self):
            return self.getToken(PlSqlParser.XMLROOT, 0)

        def XMLSCHEMA(self):
            return self.getToken(PlSqlParser.XMLSCHEMA, 0)

        def XMLSERIALIZE(self):
            return self.getToken(PlSqlParser.XMLSERIALIZE, 0)

        def XMLTABLE(self):
            return self.getToken(PlSqlParser.XMLTABLE, 0)

        def XMLTRANSFORMBLOB(self):
            return self.getToken(PlSqlParser.XMLTRANSFORMBLOB, 0)

        def XMLTRANSFORM(self):
            return self.getToken(PlSqlParser.XMLTRANSFORM, 0)

        def XMLTYPE(self):
            return self.getToken(PlSqlParser.XMLTYPE, 0)

        def XPATHTABLE(self):
            return self.getToken(PlSqlParser.XPATHTABLE, 0)

        def XS_SYS_CONTEXT(self):
            return self.getToken(PlSqlParser.XS_SYS_CONTEXT, 0)

        def YEAR(self):
            return self.getToken(PlSqlParser.YEAR, 0)

        def YES(self):
            return self.getToken(PlSqlParser.YES, 0)

        def ZONE(self):
            return self.getToken(PlSqlParser.ZONE, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_non_reserved_keywords_pre12c

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNon_reserved_keywords_pre12c" ):
                listener.enterNon_reserved_keywords_pre12c(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNon_reserved_keywords_pre12c" ):
                listener.exitNon_reserved_keywords_pre12c(self)




    def non_reserved_keywords_pre12c(self):

        localctx = PlSqlParser.Non_reserved_keywords_pre12cContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2376, self.RULE_non_reserved_keywords_pre12c)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20373
            _la = self._input.LA(1)
            if not((((_la) & ~0x3f) == 0 and ((1 << _la) & -7519512043818933578) != 0) or ((((_la - 65)) & ~0x3f) == 0 and ((1 << (_la - 65)) & -2307609062889751181) != 0) or ((((_la - 129)) & ~0x3f) == 0 and ((1 << (_la - 129)) & -2468150501968453637) != 0) or ((((_la - 193)) & ~0x3f) == 0 and ((1 << (_la - 193)) & 1792007140690489871) != 0) or ((((_la - 257)) & ~0x3f) == 0 and ((1 << (_la - 257)) & -1311391920391258369) != 0) or ((((_la - 321)) & ~0x3f) == 0 and ((1 << (_la - 321)) & -2037461571099885825) != 0) or ((((_la - 385)) & ~0x3f) == 0 and ((1 << (_la - 385)) & -2062717937794697667) != 0) or ((((_la - 450)) & ~0x3f) == 0 and ((1 << (_la - 450)) & -1604137306158341187) != 0) or ((((_la - 514)) & ~0x3f) == 0 and ((1 << (_la - 514)) & -2351442955476273185) != 0) or ((((_la - 578)) & ~0x3f) == 0 and ((1 << (_la - 578)) & -6949072369936172045) != 0) or ((((_la - 642)) & ~0x3f) == 0 and ((1 << (_la - 642)) & -4639833541868658695) != 0) or ((((_la - 707)) & ~0x3f) == 0 and ((1 << (_la - 707)) & -1152917133707444295) != 0) or ((((_la - 771)) & ~0x3f) == 0 and ((1 << (_la - 771)) & -468375738052380777) != 0) or ((((_la - 835)) & ~0x3f) == 0 and ((1 << (_la - 835)) & -585187577104966085) != 0) or ((((_la - 899)) & ~0x3f) == 0 and ((1 << (_la - 899)) & -580965606657366089) != 0) or ((((_la - 963)) & ~0x3f) == 0 and ((1 << (_la - 963)) & -1182217304734171137) != 0) or ((((_la - 1027)) & ~0x3f) == 0 and ((1 << (_la - 1027)) & -8071022278529777735) != 0) or ((((_la - 1091)) & ~0x3f) == 0 and ((1 << (_la - 1091)) & -8792293118646191163) != 0) or ((((_la - 1155)) & ~0x3f) == 0 and ((1 << (_la - 1155)) & -272468149021180561) != 0) or ((((_la - 1219)) & ~0x3f) == 0 and ((1 << (_la - 1219)) & -15068953157322879) != 0) or ((((_la - 1283)) & ~0x3f) == 0 and ((1 << (_la - 1283)) & 116952000822237847) != 0) or ((((_la - 1347)) & ~0x3f) == 0 and ((1 << (_la - 1347)) & -1229236449879530705) != 0) or ((((_la - 1411)) & ~0x3f) == 0 and ((1 << (_la - 1411)) & 9223372032541978527) != 0) or ((((_la - 1476)) & ~0x3f) == 0 and ((1 << (_la - 1476)) & 8935070158011695067) != 0) or ((((_la - 1540)) & ~0x3f) == 0 and ((1 << (_la - 1540)) & -2054791108538976257) != 0) or ((((_la - 1604)) & ~0x3f) == 0 and ((1 << (_la - 1604)) & -109309679398035653) != 0) or ((((_la - 1668)) & ~0x3f) == 0 and ((1 << (_la - 1668)) & -146947573180014593) != 0) or ((((_la - 1732)) & ~0x3f) == 0 and ((1 << (_la - 1732)) & 504385566072961023) != 0) or ((((_la - 1796)) & ~0x3f) == 0 and ((1 << (_la - 1796)) & 9218868437210628095) != 0) or ((((_la - 1860)) & ~0x3f) == 0 and ((1 << (_la - 1860)) & -1) != 0) or ((((_la - 1924)) & ~0x3f) == 0 and ((1 << (_la - 1924)) & -1) != 0) or ((((_la - 1988)) & ~0x3f) == 0 and ((1 << (_la - 1988)) & -140903654105149) != 0) or ((((_la - 2053)) & ~0x3f) == 0 and ((1 << (_la - 2053)) & -2343006918979110977) != 0) or ((((_la - 2117)) & ~0x3f) == 0 and ((1 << (_la - 2117)) & -8651089347200688673) != 0) or ((((_la - 2181)) & ~0x3f) == 0 and ((1 << (_la - 2181)) & -18016755424957953) != 0) or ((((_la - 2245)) & ~0x3f) == 0 and ((1 << (_la - 2245)) & -972839092096495617) != 0) or ((((_la - 2309)) & ~0x3f) == 0 and ((1 << (_la - 2309)) & 126959) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class String_function_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def CHR(self):
            return self.getToken(PlSqlParser.CHR, 0)

        def DECODE(self):
            return self.getToken(PlSqlParser.DECODE, 0)

        def SUBSTR(self):
            return self.getToken(PlSqlParser.SUBSTR, 0)

        def TO_CHAR(self):
            return self.getToken(PlSqlParser.TO_CHAR, 0)

        def TRIM(self):
            return self.getToken(PlSqlParser.TRIM, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_string_function_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterString_function_name" ):
                listener.enterString_function_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitString_function_name" ):
                listener.exitString_function_name(self)




    def string_function_name(self):

        localctx = PlSqlParser.String_function_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2378, self.RULE_string_function_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20375
            _la = self._input.LA(1)
            if not(_la==194 or ((((_la - 2301)) & ~0x3f) == 0 and ((1 << (_la - 2301)) & 229377) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx


    class Numeric_function_nameContext(ParserRuleContext):
        __slots__ = 'parser'

        def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1):
            super().__init__(parent, invokingState)
            self.parser = parser

        def AVG(self):
            return self.getToken(PlSqlParser.AVG, 0)

        def COUNT(self):
            return self.getToken(PlSqlParser.COUNT, 0)

        def NVL(self):
            return self.getToken(PlSqlParser.NVL, 0)

        def ROUND(self):
            return self.getToken(PlSqlParser.ROUND, 0)

        def SUM(self):
            return self.getToken(PlSqlParser.SUM, 0)

        def getRuleIndex(self):
            return PlSqlParser.RULE_numeric_function_name

        def enterRule(self, listener:ParseTreeListener):
            if hasattr( listener, "enterNumeric_function_name" ):
                listener.enterNumeric_function_name(self)

        def exitRule(self, listener:ParseTreeListener):
            if hasattr( listener, "exitNumeric_function_name" ):
                listener.exitNumeric_function_name(self)




    def numeric_function_name(self):

        localctx = PlSqlParser.Numeric_function_nameContext(self, self._ctx, self.state)
        self.enterRule(localctx, 2380, self.RULE_numeric_function_name)
        self._la = 0 # Token type
        try:
            self.enterOuterAlt(localctx, 1)
            self.state = 20377
            _la = self._input.LA(1)
            if not(_la==298 or ((((_la - 2298)) & ~0x3f) == 0 and ((1 << (_la - 2298)) & 2170881) != 0)):
                self._errHandler.recoverInline(self)
            else:
                self._errHandler.reportMatch(self)
                self.consume()
        except RecognitionException as re:
            localctx.exception = re
            self._errHandler.reportError(self, re)
            self._errHandler.recover(self, re)
        finally:
            self.exitRule()
        return localctx



    def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int):
        if self._predicates == None:
            self._predicates = dict()
        self._predicates[362] = self.unified_auditing_sempred
        self._predicates[365] = self.audit_direct_path_sempred
        self._predicates[366] = self.audit_container_clause_sempred
        self._predicates[372] = self.auditing_on_clause_sempred
        self._predicates[376] = self.sql_statement_shortcut_sempred
        self._predicates[408] = self.library_editionable_sempred
        self._predicates[409] = self.library_debug_sempred
        self._predicates[421] = self.alter_view_editionable_sempred
        self._predicates[676] = self.partial_database_recovery_10g_sempred
        self._predicates[811] = self.period_definition_sempred
        self._predicates[1028] = self.logical_expression_sempred
        self._predicates[1032] = self.multiset_expression_sempred
        self._predicates[1033] = self.relational_expression_sempred
        self._predicates[1038] = self.concatenation_sempred
        self._predicates[1044] = self.unary_expression_sempred
        self._predicates[1091] = self.string_delimiter_sempred
        self._predicates[1172] = self.general_element_sempred
        pred = self._predicates.get(ruleIndex, None)
        if pred is None:
            raise Exception("No predicate with index:" + str(ruleIndex))
        else:
            return pred(localctx, predIndex)

    def unified_auditing_sempred(self, localctx:Unified_auditingContext, predIndex:int):
            if predIndex == 0:
                return self.isVersion12()
         

    def audit_direct_path_sempred(self, localctx:Audit_direct_pathContext, predIndex:int):
            if predIndex == 1:
                return self.isVersion12()
         

    def audit_container_clause_sempred(self, localctx:Audit_container_clauseContext, predIndex:int):
            if predIndex == 2:
                return self.isVersion12()
         

    def auditing_on_clause_sempred(self, localctx:Auditing_on_clauseContext, predIndex:int):
            if predIndex == 3:
                return self.isVersion12()
         

    def sql_statement_shortcut_sempred(self, localctx:Sql_statement_shortcutContext, predIndex:int):
            if predIndex == 4:
                return self.isVersion12()
         

    def library_editionable_sempred(self, localctx:Library_editionableContext, predIndex:int):
            if predIndex == 5:
                return self.isVersion12()
         

    def library_debug_sempred(self, localctx:Library_debugContext, predIndex:int):
            if predIndex == 6:
                return self.isVersion12()
         

    def alter_view_editionable_sempred(self, localctx:Alter_view_editionableContext, predIndex:int):
            if predIndex == 7:
                return self.isVersion12()
         

    def partial_database_recovery_10g_sempred(self, localctx:Partial_database_recovery_10gContext, predIndex:int):
            if predIndex == 8:
                return self.isVersion10()
         

    def period_definition_sempred(self, localctx:Period_definitionContext, predIndex:int):
            if predIndex == 9:
                return self.isVersion12()
         

    def logical_expression_sempred(self, localctx:Logical_expressionContext, predIndex:int):
            if predIndex == 10:
                return self.precpred(self._ctx, 2)
         

            if predIndex == 11:
                return self.precpred(self._ctx, 1)
         

    def multiset_expression_sempred(self, localctx:Multiset_expressionContext, predIndex:int):
            if predIndex == 12:
                return self.precpred(self._ctx, 1)
         

    def relational_expression_sempred(self, localctx:Relational_expressionContext, predIndex:int):
            if predIndex == 13:
                return self.precpred(self._ctx, 2)
         

    def concatenation_sempred(self, localctx:ConcatenationContext, predIndex:int):
            if predIndex == 14:
                return self.precpred(self._ctx, 5)
         

            if predIndex == 15:
                return self.precpred(self._ctx, 4)
         

            if predIndex == 16:
                return self.precpred(self._ctx, 3)
         

            if predIndex == 17:
                return self.precpred(self._ctx, 2)
         

            if predIndex == 18:
                return self.precpred(self._ctx, 1)
         

    def unary_expression_sempred(self, localctx:Unary_expressionContext, predIndex:int):
            if predIndex == 19:
                return self.precpred(self._ctx, 5)
         

    def string_delimiter_sempred(self, localctx:String_delimiterContext, predIndex:int):
            if predIndex == 20:
                return self.precpred(self._ctx, 3)
         

    def general_element_sempred(self, localctx:General_elementContext, predIndex:int):
            if predIndex == 21:
                return self.precpred(self._ctx, 2)
         




