From 0c17dc55bded339133b31a85620c595233dab459 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Tue, 26 Mar 2024 13:05:00 +0100 Subject: [PATCH 1/3] fix(hogql): remove unsupported extract(..from..) --- hogql_parser/HogQLParser.cpp | 1312 +++++++++--------- hogql_parser/HogQLParser.h | 14 - hogql_parser/HogQLParser.interp | 2 +- hogql_parser/HogQLParserBaseVisitor.h | 4 - hogql_parser/HogQLParserVisitor.h | 2 - hogql_parser/parser.cpp | 2 - posthog/hogql/grammar/HogQLParser.g4 | 2 +- posthog/hogql/grammar/HogQLParser.interp | 2 +- posthog/hogql/grammar/HogQLParser.py | 1352 +++++++++---------- posthog/hogql/grammar/HogQLParserVisitor.py | 5 - posthog/hogql/parser.py | 3 - posthog/hogql/test/_test_parser.py | 13 + 12 files changed, 1296 insertions(+), 1417 deletions(-) diff --git a/hogql_parser/HogQLParser.cpp b/hogql_parser/HogQLParser.cpp index f93862eec5c0d..de9386c795f09 100644 --- a/hogql_parser/HogQLParser.cpp +++ b/hogql_parser/HogQLParser.cpp @@ -127,7 +127,7 @@ void hogqlparserParserInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,1,242,979,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, + 4,1,242,972,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, @@ -171,319 +171,317 @@ void hogqlparserParserInitialize() { 5,36,535,8,36,10,36,12,36,538,9,36,1,37,1,37,1,37,3,37,543,8,37,1,37, 1,37,1,37,1,37,1,37,4,37,550,8,37,11,37,12,37,551,1,37,1,37,3,37,556, 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,587,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,3,37,604,8,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,3,37,616,8,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,626,8,37,1,37,3,37,629,8,37,1,37,1,37,3,37,633,8,37,1, - 37,3,37,636,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,3,37,649,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,3,37,666,8,37,1,37,1,37,3,37,670,8,37,1,37,1,37, - 1,37,1,37,3,37,676,8,37,1,37,1,37,1,37,1,37,1,37,3,37,683,8,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,695,8,37,1,37,1,37,3, - 37,699,8,37,1,37,3,37,702,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37, - 711,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 3,37,725,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 3,37,752,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,761,8,37,5,37,763, - 8,37,10,37,12,37,766,9,37,1,38,1,38,1,38,5,38,771,8,38,10,38,12,38,774, - 9,38,1,39,1,39,3,39,778,8,39,1,40,1,40,1,40,1,40,5,40,784,8,40,10,40, - 12,40,787,9,40,1,40,1,40,1,40,1,40,1,40,5,40,794,8,40,10,40,12,40,797, - 9,40,3,40,799,8,40,1,40,1,40,1,40,1,41,1,41,1,41,5,41,807,8,41,10,41, - 12,41,810,9,41,1,41,1,41,1,41,1,41,1,41,1,41,5,41,818,8,41,10,41,12,41, - 821,9,41,1,41,1,41,3,41,825,8,41,1,41,1,41,1,41,1,41,1,41,3,41,832,8, - 41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3,42,845,8, - 42,1,43,1,43,1,43,5,43,850,8,43,10,43,12,43,853,9,43,1,44,1,44,1,44,1, - 44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,865,8,44,1,45,1,45,1,45,1,45,3, - 45,871,8,45,1,45,3,45,874,8,45,1,46,1,46,1,46,5,46,879,8,46,10,46,12, - 46,882,9,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,893,8,47, - 1,47,1,47,1,47,1,47,3,47,899,8,47,5,47,901,8,47,10,47,12,47,904,9,47, - 1,48,1,48,1,48,3,48,909,8,48,1,48,1,48,1,49,1,49,1,49,3,49,916,8,49,1, - 49,1,49,1,50,1,50,1,50,5,50,923,8,50,10,50,12,50,926,9,50,1,51,1,51,1, - 52,1,52,1,52,1,52,1,52,1,52,3,52,936,8,52,3,52,938,8,52,1,53,3,53,941, - 8,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,949,8,53,1,54,1,54,1,54,3,54, - 954,8,54,1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,3,58,964,8,58,1,59,1, - 59,1,59,3,59,969,8,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,0, - 3,36,74,94,62,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, - 0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12,4,0,4,4,7,8, - 12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42,43,2,0,62,62, - 93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170,2,0,79,79,98,98,1,0, - 197,198,2,0,208,208,228,228,8,0,37,37,76,76,108,108,110,110,132,132,145, - 145,185,185,190,190,13,0,2,24,26,36,38,75,77,81,83,107,109,109,111,112, - 114,115,117,130,133,144,146,184,186,189,191,192,4,0,36,36,62,62,77,77, - 91,91,1107,0,127,1,0,0,0,2,131,1,0,0,0,4,146,1,0,0,0,6,149,1,0,0,0,8, - 198,1,0,0,0,10,201,1,0,0,0,12,207,1,0,0,0,14,211,1,0,0,0,16,217,1,0,0, - 0,18,235,1,0,0,0,20,238,1,0,0,0,22,241,1,0,0,0,24,251,1,0,0,0,26,254, - 1,0,0,0,28,258,1,0,0,0,30,291,1,0,0,0,32,293,1,0,0,0,34,296,1,0,0,0,36, - 311,1,0,0,0,38,373,1,0,0,0,40,378,1,0,0,0,42,389,1,0,0,0,44,391,1,0,0, - 0,46,397,1,0,0,0,48,405,1,0,0,0,50,423,1,0,0,0,52,425,1,0,0,0,54,433, - 1,0,0,0,56,438,1,0,0,0,58,446,1,0,0,0,60,450,1,0,0,0,62,454,1,0,0,0,64, - 463,1,0,0,0,66,477,1,0,0,0,68,479,1,0,0,0,70,529,1,0,0,0,72,531,1,0,0, - 0,74,669,1,0,0,0,76,767,1,0,0,0,78,777,1,0,0,0,80,798,1,0,0,0,82,831, - 1,0,0,0,84,844,1,0,0,0,86,846,1,0,0,0,88,864,1,0,0,0,90,873,1,0,0,0,92, - 875,1,0,0,0,94,892,1,0,0,0,96,905,1,0,0,0,98,915,1,0,0,0,100,919,1,0, - 0,0,102,927,1,0,0,0,104,937,1,0,0,0,106,940,1,0,0,0,108,953,1,0,0,0,110, - 955,1,0,0,0,112,957,1,0,0,0,114,959,1,0,0,0,116,963,1,0,0,0,118,968,1, - 0,0,0,120,970,1,0,0,0,122,974,1,0,0,0,124,128,3,2,1,0,125,128,3,6,3,0, - 126,128,3,82,41,0,127,124,1,0,0,0,127,125,1,0,0,0,127,126,1,0,0,0,128, - 129,1,0,0,0,129,130,5,0,0,1,130,1,1,0,0,0,131,137,3,4,2,0,132,133,5,176, - 0,0,133,134,5,4,0,0,134,136,3,4,2,0,135,132,1,0,0,0,136,139,1,0,0,0,137, - 135,1,0,0,0,137,138,1,0,0,0,138,3,1,0,0,0,139,137,1,0,0,0,140,147,3,6, - 3,0,141,142,5,220,0,0,142,143,3,2,1,0,143,144,5,236,0,0,144,147,1,0,0, - 0,145,147,3,122,61,0,146,140,1,0,0,0,146,141,1,0,0,0,146,145,1,0,0,0, - 147,5,1,0,0,0,148,150,3,8,4,0,149,148,1,0,0,0,149,150,1,0,0,0,150,151, - 1,0,0,0,151,153,5,146,0,0,152,154,5,49,0,0,153,152,1,0,0,0,153,154,1, - 0,0,0,154,156,1,0,0,0,155,157,3,10,5,0,156,155,1,0,0,0,156,157,1,0,0, - 0,157,158,1,0,0,0,158,160,3,72,36,0,159,161,3,12,6,0,160,159,1,0,0,0, - 160,161,1,0,0,0,161,163,1,0,0,0,162,164,3,14,7,0,163,162,1,0,0,0,163, - 164,1,0,0,0,164,166,1,0,0,0,165,167,3,18,9,0,166,165,1,0,0,0,166,167, - 1,0,0,0,167,169,1,0,0,0,168,170,3,20,10,0,169,168,1,0,0,0,169,170,1,0, - 0,0,170,172,1,0,0,0,171,173,3,22,11,0,172,171,1,0,0,0,172,173,1,0,0,0, - 173,176,1,0,0,0,174,175,5,189,0,0,175,177,7,0,0,0,176,174,1,0,0,0,176, - 177,1,0,0,0,177,180,1,0,0,0,178,179,5,189,0,0,179,181,5,169,0,0,180,178, - 1,0,0,0,180,181,1,0,0,0,181,183,1,0,0,0,182,184,3,24,12,0,183,182,1,0, - 0,0,183,184,1,0,0,0,184,186,1,0,0,0,185,187,3,16,8,0,186,185,1,0,0,0, - 186,187,1,0,0,0,187,189,1,0,0,0,188,190,3,26,13,0,189,188,1,0,0,0,189, - 190,1,0,0,0,190,193,1,0,0,0,191,194,3,30,15,0,192,194,3,32,16,0,193,191, - 1,0,0,0,193,192,1,0,0,0,193,194,1,0,0,0,194,196,1,0,0,0,195,197,3,34, - 17,0,196,195,1,0,0,0,196,197,1,0,0,0,197,7,1,0,0,0,198,199,5,189,0,0, - 199,200,3,86,43,0,200,9,1,0,0,0,201,202,5,168,0,0,202,205,5,198,0,0,203, - 204,5,189,0,0,204,206,5,164,0,0,205,203,1,0,0,0,205,206,1,0,0,0,206,11, - 1,0,0,0,207,208,5,68,0,0,208,209,3,36,18,0,209,13,1,0,0,0,210,212,7,1, - 0,0,211,210,1,0,0,0,211,212,1,0,0,0,212,213,1,0,0,0,213,214,5,9,0,0,214, - 215,5,90,0,0,215,216,3,72,36,0,216,15,1,0,0,0,217,218,5,188,0,0,218,219, - 3,118,59,0,219,220,5,10,0,0,220,221,5,220,0,0,221,222,3,56,28,0,222,232, - 5,236,0,0,223,224,5,206,0,0,224,225,3,118,59,0,225,226,5,10,0,0,226,227, - 5,220,0,0,227,228,3,56,28,0,228,229,5,236,0,0,229,231,1,0,0,0,230,223, - 1,0,0,0,231,234,1,0,0,0,232,230,1,0,0,0,232,233,1,0,0,0,233,17,1,0,0, - 0,234,232,1,0,0,0,235,236,5,129,0,0,236,237,3,74,37,0,237,19,1,0,0,0, - 238,239,5,187,0,0,239,240,3,74,37,0,240,21,1,0,0,0,241,242,5,73,0,0,242, - 249,5,18,0,0,243,244,7,0,0,0,244,245,5,220,0,0,245,246,3,72,36,0,246, - 247,5,236,0,0,247,250,1,0,0,0,248,250,3,72,36,0,249,243,1,0,0,0,249,248, - 1,0,0,0,250,23,1,0,0,0,251,252,5,74,0,0,252,253,3,74,37,0,253,25,1,0, - 0,0,254,255,5,122,0,0,255,256,5,18,0,0,256,257,3,46,23,0,257,27,1,0,0, - 0,258,259,5,122,0,0,259,260,5,18,0,0,260,261,3,72,36,0,261,29,1,0,0,0, - 262,263,5,99,0,0,263,266,3,74,37,0,264,265,5,206,0,0,265,267,3,74,37, - 0,266,264,1,0,0,0,266,267,1,0,0,0,267,272,1,0,0,0,268,269,5,189,0,0,269, - 273,5,164,0,0,270,271,5,18,0,0,271,273,3,72,36,0,272,268,1,0,0,0,272, - 270,1,0,0,0,272,273,1,0,0,0,273,292,1,0,0,0,274,275,5,99,0,0,275,278, - 3,74,37,0,276,277,5,189,0,0,277,279,5,164,0,0,278,276,1,0,0,0,278,279, - 1,0,0,0,279,280,1,0,0,0,280,281,5,118,0,0,281,282,3,74,37,0,282,292,1, - 0,0,0,283,284,5,99,0,0,284,285,3,74,37,0,285,286,5,118,0,0,286,289,3, - 74,37,0,287,288,5,18,0,0,288,290,3,72,36,0,289,287,1,0,0,0,289,290,1, - 0,0,0,290,292,1,0,0,0,291,262,1,0,0,0,291,274,1,0,0,0,291,283,1,0,0,0, - 292,31,1,0,0,0,293,294,5,118,0,0,294,295,3,74,37,0,295,33,1,0,0,0,296, - 297,5,150,0,0,297,298,3,52,26,0,298,35,1,0,0,0,299,300,6,18,-1,0,300, - 302,3,94,47,0,301,303,5,61,0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,305, - 1,0,0,0,304,306,3,44,22,0,305,304,1,0,0,0,305,306,1,0,0,0,306,312,1,0, - 0,0,307,308,5,220,0,0,308,309,3,36,18,0,309,310,5,236,0,0,310,312,1,0, - 0,0,311,299,1,0,0,0,311,307,1,0,0,0,312,327,1,0,0,0,313,314,10,3,0,0, - 314,315,3,40,20,0,315,316,3,36,18,4,316,326,1,0,0,0,317,319,10,4,0,0, - 318,320,3,38,19,0,319,318,1,0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321, - 322,5,90,0,0,322,323,3,36,18,0,323,324,3,42,21,0,324,326,1,0,0,0,325, - 313,1,0,0,0,325,317,1,0,0,0,326,329,1,0,0,0,327,325,1,0,0,0,327,328,1, - 0,0,0,328,37,1,0,0,0,329,327,1,0,0,0,330,332,7,2,0,0,331,330,1,0,0,0, - 331,332,1,0,0,0,332,333,1,0,0,0,333,340,5,84,0,0,334,336,5,84,0,0,335, - 337,7,2,0,0,336,335,1,0,0,0,336,337,1,0,0,0,337,340,1,0,0,0,338,340,7, - 2,0,0,339,331,1,0,0,0,339,334,1,0,0,0,339,338,1,0,0,0,340,374,1,0,0,0, - 341,343,7,3,0,0,342,341,1,0,0,0,342,343,1,0,0,0,343,344,1,0,0,0,344,346, - 7,4,0,0,345,347,5,123,0,0,346,345,1,0,0,0,346,347,1,0,0,0,347,356,1,0, - 0,0,348,350,7,4,0,0,349,351,5,123,0,0,350,349,1,0,0,0,350,351,1,0,0,0, - 351,353,1,0,0,0,352,354,7,3,0,0,353,352,1,0,0,0,353,354,1,0,0,0,354,356, - 1,0,0,0,355,342,1,0,0,0,355,348,1,0,0,0,356,374,1,0,0,0,357,359,7,5,0, - 0,358,357,1,0,0,0,358,359,1,0,0,0,359,360,1,0,0,0,360,362,5,69,0,0,361, - 363,5,123,0,0,362,361,1,0,0,0,362,363,1,0,0,0,363,372,1,0,0,0,364,366, - 5,69,0,0,365,367,5,123,0,0,366,365,1,0,0,0,366,367,1,0,0,0,367,369,1, - 0,0,0,368,370,7,5,0,0,369,368,1,0,0,0,369,370,1,0,0,0,370,372,1,0,0,0, - 371,358,1,0,0,0,371,364,1,0,0,0,372,374,1,0,0,0,373,339,1,0,0,0,373,355, - 1,0,0,0,373,371,1,0,0,0,374,39,1,0,0,0,375,376,5,31,0,0,376,379,5,90, - 0,0,377,379,5,206,0,0,378,375,1,0,0,0,378,377,1,0,0,0,379,41,1,0,0,0, - 380,381,5,119,0,0,381,390,3,72,36,0,382,383,5,179,0,0,383,384,5,220,0, - 0,384,385,3,72,36,0,385,386,5,236,0,0,386,390,1,0,0,0,387,388,5,179,0, - 0,388,390,3,72,36,0,389,380,1,0,0,0,389,382,1,0,0,0,389,387,1,0,0,0,390, - 43,1,0,0,0,391,392,5,144,0,0,392,395,3,50,25,0,393,394,5,118,0,0,394, - 396,3,50,25,0,395,393,1,0,0,0,395,396,1,0,0,0,396,45,1,0,0,0,397,402, - 3,48,24,0,398,399,5,206,0,0,399,401,3,48,24,0,400,398,1,0,0,0,401,404, - 1,0,0,0,402,400,1,0,0,0,402,403,1,0,0,0,403,47,1,0,0,0,404,402,1,0,0, - 0,405,407,3,74,37,0,406,408,7,6,0,0,407,406,1,0,0,0,407,408,1,0,0,0,408, - 411,1,0,0,0,409,410,5,117,0,0,410,412,7,7,0,0,411,409,1,0,0,0,411,412, - 1,0,0,0,412,415,1,0,0,0,413,414,5,26,0,0,414,416,5,200,0,0,415,413,1, - 0,0,0,415,416,1,0,0,0,416,49,1,0,0,0,417,424,3,122,61,0,418,421,3,106, - 53,0,419,420,5,238,0,0,420,422,3,106,53,0,421,419,1,0,0,0,421,422,1,0, - 0,0,422,424,1,0,0,0,423,417,1,0,0,0,423,418,1,0,0,0,424,51,1,0,0,0,425, - 430,3,54,27,0,426,427,5,206,0,0,427,429,3,54,27,0,428,426,1,0,0,0,429, - 432,1,0,0,0,430,428,1,0,0,0,430,431,1,0,0,0,431,53,1,0,0,0,432,430,1, - 0,0,0,433,434,3,118,59,0,434,435,5,212,0,0,435,436,3,108,54,0,436,55, - 1,0,0,0,437,439,3,58,29,0,438,437,1,0,0,0,438,439,1,0,0,0,439,441,1,0, - 0,0,440,442,3,60,30,0,441,440,1,0,0,0,441,442,1,0,0,0,442,444,1,0,0,0, - 443,445,3,62,31,0,444,443,1,0,0,0,444,445,1,0,0,0,445,57,1,0,0,0,446, - 447,5,126,0,0,447,448,5,18,0,0,448,449,3,72,36,0,449,59,1,0,0,0,450,451, - 5,122,0,0,451,452,5,18,0,0,452,453,3,46,23,0,453,61,1,0,0,0,454,455,7, - 8,0,0,455,456,3,64,32,0,456,63,1,0,0,0,457,464,3,66,33,0,458,459,5,16, - 0,0,459,460,3,66,33,0,460,461,5,6,0,0,461,462,3,66,33,0,462,464,1,0,0, - 0,463,457,1,0,0,0,463,458,1,0,0,0,464,65,1,0,0,0,465,466,5,33,0,0,466, - 478,5,142,0,0,467,468,5,175,0,0,468,478,5,128,0,0,469,470,5,175,0,0,470, - 478,5,64,0,0,471,472,3,106,53,0,472,473,5,128,0,0,473,478,1,0,0,0,474, - 475,3,106,53,0,475,476,5,64,0,0,476,478,1,0,0,0,477,465,1,0,0,0,477,467, - 1,0,0,0,477,469,1,0,0,0,477,471,1,0,0,0,477,474,1,0,0,0,478,67,1,0,0, - 0,479,480,3,74,37,0,480,481,5,0,0,1,481,69,1,0,0,0,482,530,3,118,59,0, - 483,484,3,118,59,0,484,485,5,220,0,0,485,486,3,118,59,0,486,493,3,70, - 35,0,487,488,5,206,0,0,488,489,3,118,59,0,489,490,3,70,35,0,490,492,1, - 0,0,0,491,487,1,0,0,0,492,495,1,0,0,0,493,491,1,0,0,0,493,494,1,0,0,0, - 494,496,1,0,0,0,495,493,1,0,0,0,496,497,5,236,0,0,497,530,1,0,0,0,498, - 499,3,118,59,0,499,500,5,220,0,0,500,505,3,120,60,0,501,502,5,206,0,0, - 502,504,3,120,60,0,503,501,1,0,0,0,504,507,1,0,0,0,505,503,1,0,0,0,505, - 506,1,0,0,0,506,508,1,0,0,0,507,505,1,0,0,0,508,509,5,236,0,0,509,530, - 1,0,0,0,510,511,3,118,59,0,511,512,5,220,0,0,512,517,3,70,35,0,513,514, - 5,206,0,0,514,516,3,70,35,0,515,513,1,0,0,0,516,519,1,0,0,0,517,515,1, - 0,0,0,517,518,1,0,0,0,518,520,1,0,0,0,519,517,1,0,0,0,520,521,5,236,0, - 0,521,530,1,0,0,0,522,523,3,118,59,0,523,525,5,220,0,0,524,526,3,72,36, - 0,525,524,1,0,0,0,525,526,1,0,0,0,526,527,1,0,0,0,527,528,5,236,0,0,528, - 530,1,0,0,0,529,482,1,0,0,0,529,483,1,0,0,0,529,498,1,0,0,0,529,510,1, - 0,0,0,529,522,1,0,0,0,530,71,1,0,0,0,531,536,3,74,37,0,532,533,5,206, - 0,0,533,535,3,74,37,0,534,532,1,0,0,0,535,538,1,0,0,0,536,534,1,0,0,0, - 536,537,1,0,0,0,537,73,1,0,0,0,538,536,1,0,0,0,539,540,6,37,-1,0,540, - 542,5,19,0,0,541,543,3,74,37,0,542,541,1,0,0,0,542,543,1,0,0,0,543,549, - 1,0,0,0,544,545,5,186,0,0,545,546,3,74,37,0,546,547,5,163,0,0,547,548, - 3,74,37,0,548,550,1,0,0,0,549,544,1,0,0,0,550,551,1,0,0,0,551,549,1,0, - 0,0,551,552,1,0,0,0,552,555,1,0,0,0,553,554,5,52,0,0,554,556,3,74,37, - 0,555,553,1,0,0,0,555,556,1,0,0,0,556,557,1,0,0,0,557,558,5,53,0,0,558, - 670,1,0,0,0,559,560,5,20,0,0,560,561,5,220,0,0,561,562,3,74,37,0,562, - 563,5,10,0,0,563,564,3,70,35,0,564,565,5,236,0,0,565,670,1,0,0,0,566, - 567,5,36,0,0,567,670,5,200,0,0,568,569,5,59,0,0,569,570,5,220,0,0,570, - 571,3,110,55,0,571,572,5,68,0,0,572,573,3,74,37,0,573,574,5,236,0,0,574, - 670,1,0,0,0,575,576,5,86,0,0,576,577,3,74,37,0,577,578,3,110,55,0,578, - 670,1,0,0,0,579,580,5,155,0,0,580,581,5,220,0,0,581,582,3,74,37,0,582, - 583,5,68,0,0,583,586,3,74,37,0,584,585,5,65,0,0,585,587,3,74,37,0,586, - 584,1,0,0,0,586,587,1,0,0,0,587,588,1,0,0,0,588,589,5,236,0,0,589,670, - 1,0,0,0,590,591,5,166,0,0,591,670,5,200,0,0,592,593,5,171,0,0,593,594, - 5,220,0,0,594,595,7,9,0,0,595,596,5,200,0,0,596,597,5,68,0,0,597,598, - 3,74,37,0,598,599,5,236,0,0,599,670,1,0,0,0,600,601,3,118,59,0,601,603, - 5,220,0,0,602,604,3,72,36,0,603,602,1,0,0,0,603,604,1,0,0,0,604,605,1, - 0,0,0,605,606,5,236,0,0,606,607,1,0,0,0,607,608,5,125,0,0,608,609,5,220, - 0,0,609,610,3,56,28,0,610,611,5,236,0,0,611,670,1,0,0,0,612,613,3,118, - 59,0,613,615,5,220,0,0,614,616,3,72,36,0,615,614,1,0,0,0,615,616,1,0, - 0,0,616,617,1,0,0,0,617,618,5,236,0,0,618,619,1,0,0,0,619,620,5,125,0, - 0,620,621,3,118,59,0,621,670,1,0,0,0,622,628,3,118,59,0,623,625,5,220, - 0,0,624,626,3,72,36,0,625,624,1,0,0,0,625,626,1,0,0,0,626,627,1,0,0,0, - 627,629,5,236,0,0,628,623,1,0,0,0,628,629,1,0,0,0,629,630,1,0,0,0,630, - 632,5,220,0,0,631,633,5,49,0,0,632,631,1,0,0,0,632,633,1,0,0,0,633,635, - 1,0,0,0,634,636,3,76,38,0,635,634,1,0,0,0,635,636,1,0,0,0,636,637,1,0, - 0,0,637,638,5,236,0,0,638,670,1,0,0,0,639,670,3,82,41,0,640,670,3,108, - 54,0,641,642,5,208,0,0,642,670,3,74,37,18,643,644,5,115,0,0,644,670,3, - 74,37,12,645,646,3,98,49,0,646,647,5,210,0,0,647,649,1,0,0,0,648,645, - 1,0,0,0,648,649,1,0,0,0,649,650,1,0,0,0,650,670,5,202,0,0,651,652,5,220, - 0,0,652,653,3,2,1,0,653,654,5,236,0,0,654,670,1,0,0,0,655,656,5,220,0, - 0,656,657,3,74,37,0,657,658,5,236,0,0,658,670,1,0,0,0,659,660,5,220,0, - 0,660,661,3,72,36,0,661,662,5,236,0,0,662,670,1,0,0,0,663,665,5,219,0, - 0,664,666,3,72,36,0,665,664,1,0,0,0,665,666,1,0,0,0,666,667,1,0,0,0,667, - 670,5,235,0,0,668,670,3,90,45,0,669,539,1,0,0,0,669,559,1,0,0,0,669,566, - 1,0,0,0,669,568,1,0,0,0,669,575,1,0,0,0,669,579,1,0,0,0,669,590,1,0,0, - 0,669,592,1,0,0,0,669,600,1,0,0,0,669,612,1,0,0,0,669,622,1,0,0,0,669, - 639,1,0,0,0,669,640,1,0,0,0,669,641,1,0,0,0,669,643,1,0,0,0,669,648,1, - 0,0,0,669,651,1,0,0,0,669,655,1,0,0,0,669,659,1,0,0,0,669,663,1,0,0,0, - 669,668,1,0,0,0,670,764,1,0,0,0,671,675,10,17,0,0,672,676,5,202,0,0,673, - 676,5,238,0,0,674,676,5,227,0,0,675,672,1,0,0,0,675,673,1,0,0,0,675,674, - 1,0,0,0,676,677,1,0,0,0,677,763,3,74,37,18,678,682,10,16,0,0,679,683, - 5,228,0,0,680,683,5,208,0,0,681,683,5,207,0,0,682,679,1,0,0,0,682,680, - 1,0,0,0,682,681,1,0,0,0,683,684,1,0,0,0,684,763,3,74,37,17,685,710,10, - 15,0,0,686,711,5,211,0,0,687,711,5,212,0,0,688,711,5,223,0,0,689,711, - 5,221,0,0,690,711,5,222,0,0,691,711,5,213,0,0,692,711,5,214,0,0,693,695, - 5,115,0,0,694,693,1,0,0,0,694,695,1,0,0,0,695,696,1,0,0,0,696,698,5,80, - 0,0,697,699,5,25,0,0,698,697,1,0,0,0,698,699,1,0,0,0,699,711,1,0,0,0, - 700,702,5,115,0,0,701,700,1,0,0,0,701,702,1,0,0,0,702,703,1,0,0,0,703, - 711,7,10,0,0,704,711,5,232,0,0,705,711,5,233,0,0,706,711,5,225,0,0,707, - 711,5,216,0,0,708,711,5,217,0,0,709,711,5,224,0,0,710,686,1,0,0,0,710, - 687,1,0,0,0,710,688,1,0,0,0,710,689,1,0,0,0,710,690,1,0,0,0,710,691,1, - 0,0,0,710,692,1,0,0,0,710,694,1,0,0,0,710,701,1,0,0,0,710,704,1,0,0,0, - 710,705,1,0,0,0,710,706,1,0,0,0,710,707,1,0,0,0,710,708,1,0,0,0,710,709, - 1,0,0,0,711,712,1,0,0,0,712,763,3,74,37,16,713,714,10,13,0,0,714,715, - 5,226,0,0,715,763,3,74,37,14,716,717,10,11,0,0,717,718,5,6,0,0,718,763, - 3,74,37,12,719,720,10,10,0,0,720,721,5,121,0,0,721,763,3,74,37,11,722, - 724,10,9,0,0,723,725,5,115,0,0,724,723,1,0,0,0,724,725,1,0,0,0,725,726, - 1,0,0,0,726,727,5,16,0,0,727,728,3,74,37,0,728,729,5,6,0,0,729,730,3, - 74,37,10,730,763,1,0,0,0,731,732,10,8,0,0,732,733,5,229,0,0,733,734,3, - 74,37,0,734,735,5,205,0,0,735,736,3,74,37,8,736,763,1,0,0,0,737,738,10, - 21,0,0,738,739,5,219,0,0,739,740,3,74,37,0,740,741,5,235,0,0,741,763, - 1,0,0,0,742,743,10,20,0,0,743,744,5,210,0,0,744,763,5,198,0,0,745,746, - 10,19,0,0,746,747,5,210,0,0,747,763,3,118,59,0,748,749,10,14,0,0,749, - 751,5,88,0,0,750,752,5,115,0,0,751,750,1,0,0,0,751,752,1,0,0,0,752,753, - 1,0,0,0,753,763,5,116,0,0,754,760,10,7,0,0,755,761,3,116,58,0,756,757, - 5,10,0,0,757,761,3,118,59,0,758,759,5,10,0,0,759,761,5,200,0,0,760,755, - 1,0,0,0,760,756,1,0,0,0,760,758,1,0,0,0,761,763,1,0,0,0,762,671,1,0,0, - 0,762,678,1,0,0,0,762,685,1,0,0,0,762,713,1,0,0,0,762,716,1,0,0,0,762, - 719,1,0,0,0,762,722,1,0,0,0,762,731,1,0,0,0,762,737,1,0,0,0,762,742,1, - 0,0,0,762,745,1,0,0,0,762,748,1,0,0,0,762,754,1,0,0,0,763,766,1,0,0,0, - 764,762,1,0,0,0,764,765,1,0,0,0,765,75,1,0,0,0,766,764,1,0,0,0,767,772, - 3,78,39,0,768,769,5,206,0,0,769,771,3,78,39,0,770,768,1,0,0,0,771,774, - 1,0,0,0,772,770,1,0,0,0,772,773,1,0,0,0,773,77,1,0,0,0,774,772,1,0,0, - 0,775,778,3,80,40,0,776,778,3,74,37,0,777,775,1,0,0,0,777,776,1,0,0,0, - 778,79,1,0,0,0,779,780,5,220,0,0,780,785,3,118,59,0,781,782,5,206,0,0, - 782,784,3,118,59,0,783,781,1,0,0,0,784,787,1,0,0,0,785,783,1,0,0,0,785, - 786,1,0,0,0,786,788,1,0,0,0,787,785,1,0,0,0,788,789,5,236,0,0,789,799, - 1,0,0,0,790,795,3,118,59,0,791,792,5,206,0,0,792,794,3,118,59,0,793,791, - 1,0,0,0,794,797,1,0,0,0,795,793,1,0,0,0,795,796,1,0,0,0,796,799,1,0,0, - 0,797,795,1,0,0,0,798,779,1,0,0,0,798,790,1,0,0,0,799,800,1,0,0,0,800, - 801,5,201,0,0,801,802,3,74,37,0,802,81,1,0,0,0,803,804,5,222,0,0,804, - 808,3,118,59,0,805,807,3,84,42,0,806,805,1,0,0,0,807,810,1,0,0,0,808, - 806,1,0,0,0,808,809,1,0,0,0,809,811,1,0,0,0,810,808,1,0,0,0,811,812,5, - 238,0,0,812,813,5,214,0,0,813,832,1,0,0,0,814,815,5,222,0,0,815,819,3, - 118,59,0,816,818,3,84,42,0,817,816,1,0,0,0,818,821,1,0,0,0,819,817,1, - 0,0,0,819,820,1,0,0,0,820,822,1,0,0,0,821,819,1,0,0,0,822,824,5,214,0, - 0,823,825,3,82,41,0,824,823,1,0,0,0,824,825,1,0,0,0,825,826,1,0,0,0,826, - 827,5,222,0,0,827,828,5,238,0,0,828,829,3,118,59,0,829,830,5,214,0,0, - 830,832,1,0,0,0,831,803,1,0,0,0,831,814,1,0,0,0,832,83,1,0,0,0,833,834, - 3,118,59,0,834,835,5,212,0,0,835,836,5,200,0,0,836,845,1,0,0,0,837,838, - 3,118,59,0,838,839,5,212,0,0,839,840,5,218,0,0,840,841,3,74,37,0,841, - 842,5,234,0,0,842,845,1,0,0,0,843,845,3,118,59,0,844,833,1,0,0,0,844, - 837,1,0,0,0,844,843,1,0,0,0,845,85,1,0,0,0,846,851,3,88,44,0,847,848, - 5,206,0,0,848,850,3,88,44,0,849,847,1,0,0,0,850,853,1,0,0,0,851,849,1, - 0,0,0,851,852,1,0,0,0,852,87,1,0,0,0,853,851,1,0,0,0,854,855,3,118,59, - 0,855,856,5,10,0,0,856,857,5,220,0,0,857,858,3,2,1,0,858,859,5,236,0, - 0,859,865,1,0,0,0,860,861,3,74,37,0,861,862,5,10,0,0,862,863,3,118,59, - 0,863,865,1,0,0,0,864,854,1,0,0,0,864,860,1,0,0,0,865,89,1,0,0,0,866, - 874,3,122,61,0,867,868,3,98,49,0,868,869,5,210,0,0,869,871,1,0,0,0,870, - 867,1,0,0,0,870,871,1,0,0,0,871,872,1,0,0,0,872,874,3,92,46,0,873,866, - 1,0,0,0,873,870,1,0,0,0,874,91,1,0,0,0,875,880,3,118,59,0,876,877,5,210, - 0,0,877,879,3,118,59,0,878,876,1,0,0,0,879,882,1,0,0,0,880,878,1,0,0, - 0,880,881,1,0,0,0,881,93,1,0,0,0,882,880,1,0,0,0,883,884,6,47,-1,0,884, - 893,3,98,49,0,885,893,3,96,48,0,886,887,5,220,0,0,887,888,3,2,1,0,888, - 889,5,236,0,0,889,893,1,0,0,0,890,893,3,82,41,0,891,893,3,122,61,0,892, - 883,1,0,0,0,892,885,1,0,0,0,892,886,1,0,0,0,892,890,1,0,0,0,892,891,1, - 0,0,0,893,902,1,0,0,0,894,898,10,3,0,0,895,899,3,116,58,0,896,897,5,10, - 0,0,897,899,3,118,59,0,898,895,1,0,0,0,898,896,1,0,0,0,899,901,1,0,0, - 0,900,894,1,0,0,0,901,904,1,0,0,0,902,900,1,0,0,0,902,903,1,0,0,0,903, - 95,1,0,0,0,904,902,1,0,0,0,905,906,3,118,59,0,906,908,5,220,0,0,907,909, - 3,100,50,0,908,907,1,0,0,0,908,909,1,0,0,0,909,910,1,0,0,0,910,911,5, - 236,0,0,911,97,1,0,0,0,912,913,3,102,51,0,913,914,5,210,0,0,914,916,1, - 0,0,0,915,912,1,0,0,0,915,916,1,0,0,0,916,917,1,0,0,0,917,918,3,118,59, - 0,918,99,1,0,0,0,919,924,3,74,37,0,920,921,5,206,0,0,921,923,3,74,37, - 0,922,920,1,0,0,0,923,926,1,0,0,0,924,922,1,0,0,0,924,925,1,0,0,0,925, - 101,1,0,0,0,926,924,1,0,0,0,927,928,3,118,59,0,928,103,1,0,0,0,929,938, - 5,196,0,0,930,931,5,210,0,0,931,938,7,11,0,0,932,933,5,198,0,0,933,935, - 5,210,0,0,934,936,7,11,0,0,935,934,1,0,0,0,935,936,1,0,0,0,936,938,1, - 0,0,0,937,929,1,0,0,0,937,930,1,0,0,0,937,932,1,0,0,0,938,105,1,0,0,0, - 939,941,7,12,0,0,940,939,1,0,0,0,940,941,1,0,0,0,941,948,1,0,0,0,942, - 949,3,104,52,0,943,949,5,197,0,0,944,949,5,198,0,0,945,949,5,199,0,0, - 946,949,5,82,0,0,947,949,5,113,0,0,948,942,1,0,0,0,948,943,1,0,0,0,948, - 944,1,0,0,0,948,945,1,0,0,0,948,946,1,0,0,0,948,947,1,0,0,0,949,107,1, - 0,0,0,950,954,3,106,53,0,951,954,5,200,0,0,952,954,5,116,0,0,953,950, - 1,0,0,0,953,951,1,0,0,0,953,952,1,0,0,0,954,109,1,0,0,0,955,956,7,13, - 0,0,956,111,1,0,0,0,957,958,7,14,0,0,958,113,1,0,0,0,959,960,7,15,0,0, - 960,115,1,0,0,0,961,964,5,195,0,0,962,964,3,114,57,0,963,961,1,0,0,0, - 963,962,1,0,0,0,964,117,1,0,0,0,965,969,5,195,0,0,966,969,3,110,55,0, - 967,969,3,112,56,0,968,965,1,0,0,0,968,966,1,0,0,0,968,967,1,0,0,0,969, - 119,1,0,0,0,970,971,5,200,0,0,971,972,5,212,0,0,972,973,3,106,53,0,973, - 121,1,0,0,0,974,975,5,218,0,0,975,976,3,118,59,0,976,977,5,234,0,0,977, - 123,1,0,0,0,120,127,137,146,149,153,156,160,163,166,169,172,176,180,183, - 186,189,193,196,205,211,232,249,266,272,278,289,291,302,305,311,319,325, - 327,331,336,339,342,346,350,353,355,358,362,366,369,371,373,378,389,395, - 402,407,411,415,421,423,430,438,441,444,463,477,493,505,517,525,529,536, - 542,551,555,586,603,615,625,628,632,635,648,665,669,675,682,694,698,701, - 710,724,751,760,762,764,772,777,785,795,798,808,819,824,831,844,851,864, - 870,873,880,892,898,902,908,915,924,935,937,940,948,953,963,968 + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,580,8,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37, + 597,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,609,8, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,619,8,37,1,37,3,37,622, + 8,37,1,37,1,37,3,37,626,8,37,1,37,3,37,629,8,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,642,8,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,659,8,37,1, + 37,1,37,3,37,663,8,37,1,37,1,37,1,37,1,37,3,37,669,8,37,1,37,1,37,1,37, + 1,37,1,37,3,37,676,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,3,37,688,8,37,1,37,1,37,3,37,692,8,37,1,37,3,37,695,8,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,3,37,704,8,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,718,8,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,745,8,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,3,37,754,8,37,5,37,756,8,37,10,37,12,37,759,9,37,1,38,1, + 38,1,38,5,38,764,8,38,10,38,12,38,767,9,38,1,39,1,39,3,39,771,8,39,1, + 40,1,40,1,40,1,40,5,40,777,8,40,10,40,12,40,780,9,40,1,40,1,40,1,40,1, + 40,1,40,5,40,787,8,40,10,40,12,40,790,9,40,3,40,792,8,40,1,40,1,40,1, + 40,1,41,1,41,1,41,5,41,800,8,41,10,41,12,41,803,9,41,1,41,1,41,1,41,1, + 41,1,41,1,41,5,41,811,8,41,10,41,12,41,814,9,41,1,41,1,41,3,41,818,8, + 41,1,41,1,41,1,41,1,41,1,41,3,41,825,8,41,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,1,42,3,42,838,8,42,1,43,1,43,1,43,5,43,843,8,43, + 10,43,12,43,846,9,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 3,44,858,8,44,1,45,1,45,1,45,1,45,3,45,864,8,45,1,45,3,45,867,8,45,1, + 46,1,46,1,46,5,46,872,8,46,10,46,12,46,875,9,46,1,47,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,3,47,886,8,47,1,47,1,47,1,47,1,47,3,47,892,8,47, + 5,47,894,8,47,10,47,12,47,897,9,47,1,48,1,48,1,48,3,48,902,8,48,1,48, + 1,48,1,49,1,49,1,49,3,49,909,8,49,1,49,1,49,1,50,1,50,1,50,5,50,916,8, + 50,10,50,12,50,919,9,50,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,3,52, + 929,8,52,3,52,931,8,52,1,53,3,53,934,8,53,1,53,1,53,1,53,1,53,1,53,1, + 53,3,53,942,8,53,1,54,1,54,1,54,3,54,947,8,54,1,55,1,55,1,56,1,56,1,57, + 1,57,1,58,1,58,3,58,957,8,58,1,59,1,59,1,59,3,59,962,8,59,1,60,1,60,1, + 60,1,60,1,61,1,61,1,61,1,61,1,61,0,3,36,74,94,62,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,0,16,2,0,32,32,141,141,2,0,84,84,96,96, + 3,0,4,4,8,8,12,12,4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4, + 8,8,2,0,11,11,42,43,2,0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95, + 95,170,170,2,0,79,79,98,98,1,0,197,198,2,0,208,208,228,228,8,0,37,37, + 76,76,108,108,110,110,132,132,145,145,185,185,190,190,13,0,2,24,26,36, + 38,75,77,81,83,107,109,109,111,112,114,115,117,130,133,144,146,184,186, + 189,191,192,4,0,36,36,62,62,77,77,91,91,1099,0,127,1,0,0,0,2,131,1,0, + 0,0,4,146,1,0,0,0,6,149,1,0,0,0,8,198,1,0,0,0,10,201,1,0,0,0,12,207,1, + 0,0,0,14,211,1,0,0,0,16,217,1,0,0,0,18,235,1,0,0,0,20,238,1,0,0,0,22, + 241,1,0,0,0,24,251,1,0,0,0,26,254,1,0,0,0,28,258,1,0,0,0,30,291,1,0,0, + 0,32,293,1,0,0,0,34,296,1,0,0,0,36,311,1,0,0,0,38,373,1,0,0,0,40,378, + 1,0,0,0,42,389,1,0,0,0,44,391,1,0,0,0,46,397,1,0,0,0,48,405,1,0,0,0,50, + 423,1,0,0,0,52,425,1,0,0,0,54,433,1,0,0,0,56,438,1,0,0,0,58,446,1,0,0, + 0,60,450,1,0,0,0,62,454,1,0,0,0,64,463,1,0,0,0,66,477,1,0,0,0,68,479, + 1,0,0,0,70,529,1,0,0,0,72,531,1,0,0,0,74,662,1,0,0,0,76,760,1,0,0,0,78, + 770,1,0,0,0,80,791,1,0,0,0,82,824,1,0,0,0,84,837,1,0,0,0,86,839,1,0,0, + 0,88,857,1,0,0,0,90,866,1,0,0,0,92,868,1,0,0,0,94,885,1,0,0,0,96,898, + 1,0,0,0,98,908,1,0,0,0,100,912,1,0,0,0,102,920,1,0,0,0,104,930,1,0,0, + 0,106,933,1,0,0,0,108,946,1,0,0,0,110,948,1,0,0,0,112,950,1,0,0,0,114, + 952,1,0,0,0,116,956,1,0,0,0,118,961,1,0,0,0,120,963,1,0,0,0,122,967,1, + 0,0,0,124,128,3,2,1,0,125,128,3,6,3,0,126,128,3,82,41,0,127,124,1,0,0, + 0,127,125,1,0,0,0,127,126,1,0,0,0,128,129,1,0,0,0,129,130,5,0,0,1,130, + 1,1,0,0,0,131,137,3,4,2,0,132,133,5,176,0,0,133,134,5,4,0,0,134,136,3, + 4,2,0,135,132,1,0,0,0,136,139,1,0,0,0,137,135,1,0,0,0,137,138,1,0,0,0, + 138,3,1,0,0,0,139,137,1,0,0,0,140,147,3,6,3,0,141,142,5,220,0,0,142,143, + 3,2,1,0,143,144,5,236,0,0,144,147,1,0,0,0,145,147,3,122,61,0,146,140, + 1,0,0,0,146,141,1,0,0,0,146,145,1,0,0,0,147,5,1,0,0,0,148,150,3,8,4,0, + 149,148,1,0,0,0,149,150,1,0,0,0,150,151,1,0,0,0,151,153,5,146,0,0,152, + 154,5,49,0,0,153,152,1,0,0,0,153,154,1,0,0,0,154,156,1,0,0,0,155,157, + 3,10,5,0,156,155,1,0,0,0,156,157,1,0,0,0,157,158,1,0,0,0,158,160,3,72, + 36,0,159,161,3,12,6,0,160,159,1,0,0,0,160,161,1,0,0,0,161,163,1,0,0,0, + 162,164,3,14,7,0,163,162,1,0,0,0,163,164,1,0,0,0,164,166,1,0,0,0,165, + 167,3,18,9,0,166,165,1,0,0,0,166,167,1,0,0,0,167,169,1,0,0,0,168,170, + 3,20,10,0,169,168,1,0,0,0,169,170,1,0,0,0,170,172,1,0,0,0,171,173,3,22, + 11,0,172,171,1,0,0,0,172,173,1,0,0,0,173,176,1,0,0,0,174,175,5,189,0, + 0,175,177,7,0,0,0,176,174,1,0,0,0,176,177,1,0,0,0,177,180,1,0,0,0,178, + 179,5,189,0,0,179,181,5,169,0,0,180,178,1,0,0,0,180,181,1,0,0,0,181,183, + 1,0,0,0,182,184,3,24,12,0,183,182,1,0,0,0,183,184,1,0,0,0,184,186,1,0, + 0,0,185,187,3,16,8,0,186,185,1,0,0,0,186,187,1,0,0,0,187,189,1,0,0,0, + 188,190,3,26,13,0,189,188,1,0,0,0,189,190,1,0,0,0,190,193,1,0,0,0,191, + 194,3,30,15,0,192,194,3,32,16,0,193,191,1,0,0,0,193,192,1,0,0,0,193,194, + 1,0,0,0,194,196,1,0,0,0,195,197,3,34,17,0,196,195,1,0,0,0,196,197,1,0, + 0,0,197,7,1,0,0,0,198,199,5,189,0,0,199,200,3,86,43,0,200,9,1,0,0,0,201, + 202,5,168,0,0,202,205,5,198,0,0,203,204,5,189,0,0,204,206,5,164,0,0,205, + 203,1,0,0,0,205,206,1,0,0,0,206,11,1,0,0,0,207,208,5,68,0,0,208,209,3, + 36,18,0,209,13,1,0,0,0,210,212,7,1,0,0,211,210,1,0,0,0,211,212,1,0,0, + 0,212,213,1,0,0,0,213,214,5,9,0,0,214,215,5,90,0,0,215,216,3,72,36,0, + 216,15,1,0,0,0,217,218,5,188,0,0,218,219,3,118,59,0,219,220,5,10,0,0, + 220,221,5,220,0,0,221,222,3,56,28,0,222,232,5,236,0,0,223,224,5,206,0, + 0,224,225,3,118,59,0,225,226,5,10,0,0,226,227,5,220,0,0,227,228,3,56, + 28,0,228,229,5,236,0,0,229,231,1,0,0,0,230,223,1,0,0,0,231,234,1,0,0, + 0,232,230,1,0,0,0,232,233,1,0,0,0,233,17,1,0,0,0,234,232,1,0,0,0,235, + 236,5,129,0,0,236,237,3,74,37,0,237,19,1,0,0,0,238,239,5,187,0,0,239, + 240,3,74,37,0,240,21,1,0,0,0,241,242,5,73,0,0,242,249,5,18,0,0,243,244, + 7,0,0,0,244,245,5,220,0,0,245,246,3,72,36,0,246,247,5,236,0,0,247,250, + 1,0,0,0,248,250,3,72,36,0,249,243,1,0,0,0,249,248,1,0,0,0,250,23,1,0, + 0,0,251,252,5,74,0,0,252,253,3,74,37,0,253,25,1,0,0,0,254,255,5,122,0, + 0,255,256,5,18,0,0,256,257,3,46,23,0,257,27,1,0,0,0,258,259,5,122,0,0, + 259,260,5,18,0,0,260,261,3,72,36,0,261,29,1,0,0,0,262,263,5,99,0,0,263, + 266,3,74,37,0,264,265,5,206,0,0,265,267,3,74,37,0,266,264,1,0,0,0,266, + 267,1,0,0,0,267,272,1,0,0,0,268,269,5,189,0,0,269,273,5,164,0,0,270,271, + 5,18,0,0,271,273,3,72,36,0,272,268,1,0,0,0,272,270,1,0,0,0,272,273,1, + 0,0,0,273,292,1,0,0,0,274,275,5,99,0,0,275,278,3,74,37,0,276,277,5,189, + 0,0,277,279,5,164,0,0,278,276,1,0,0,0,278,279,1,0,0,0,279,280,1,0,0,0, + 280,281,5,118,0,0,281,282,3,74,37,0,282,292,1,0,0,0,283,284,5,99,0,0, + 284,285,3,74,37,0,285,286,5,118,0,0,286,289,3,74,37,0,287,288,5,18,0, + 0,288,290,3,72,36,0,289,287,1,0,0,0,289,290,1,0,0,0,290,292,1,0,0,0,291, + 262,1,0,0,0,291,274,1,0,0,0,291,283,1,0,0,0,292,31,1,0,0,0,293,294,5, + 118,0,0,294,295,3,74,37,0,295,33,1,0,0,0,296,297,5,150,0,0,297,298,3, + 52,26,0,298,35,1,0,0,0,299,300,6,18,-1,0,300,302,3,94,47,0,301,303,5, + 61,0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,305,1,0,0,0,304,306,3,44,22, + 0,305,304,1,0,0,0,305,306,1,0,0,0,306,312,1,0,0,0,307,308,5,220,0,0,308, + 309,3,36,18,0,309,310,5,236,0,0,310,312,1,0,0,0,311,299,1,0,0,0,311,307, + 1,0,0,0,312,327,1,0,0,0,313,314,10,3,0,0,314,315,3,40,20,0,315,316,3, + 36,18,4,316,326,1,0,0,0,317,319,10,4,0,0,318,320,3,38,19,0,319,318,1, + 0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321,322,5,90,0,0,322,323,3,36,18, + 0,323,324,3,42,21,0,324,326,1,0,0,0,325,313,1,0,0,0,325,317,1,0,0,0,326, + 329,1,0,0,0,327,325,1,0,0,0,327,328,1,0,0,0,328,37,1,0,0,0,329,327,1, + 0,0,0,330,332,7,2,0,0,331,330,1,0,0,0,331,332,1,0,0,0,332,333,1,0,0,0, + 333,340,5,84,0,0,334,336,5,84,0,0,335,337,7,2,0,0,336,335,1,0,0,0,336, + 337,1,0,0,0,337,340,1,0,0,0,338,340,7,2,0,0,339,331,1,0,0,0,339,334,1, + 0,0,0,339,338,1,0,0,0,340,374,1,0,0,0,341,343,7,3,0,0,342,341,1,0,0,0, + 342,343,1,0,0,0,343,344,1,0,0,0,344,346,7,4,0,0,345,347,5,123,0,0,346, + 345,1,0,0,0,346,347,1,0,0,0,347,356,1,0,0,0,348,350,7,4,0,0,349,351,5, + 123,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,353,1,0,0,0,352,354,7,3,0, + 0,353,352,1,0,0,0,353,354,1,0,0,0,354,356,1,0,0,0,355,342,1,0,0,0,355, + 348,1,0,0,0,356,374,1,0,0,0,357,359,7,5,0,0,358,357,1,0,0,0,358,359,1, + 0,0,0,359,360,1,0,0,0,360,362,5,69,0,0,361,363,5,123,0,0,362,361,1,0, + 0,0,362,363,1,0,0,0,363,372,1,0,0,0,364,366,5,69,0,0,365,367,5,123,0, + 0,366,365,1,0,0,0,366,367,1,0,0,0,367,369,1,0,0,0,368,370,7,5,0,0,369, + 368,1,0,0,0,369,370,1,0,0,0,370,372,1,0,0,0,371,358,1,0,0,0,371,364,1, + 0,0,0,372,374,1,0,0,0,373,339,1,0,0,0,373,355,1,0,0,0,373,371,1,0,0,0, + 374,39,1,0,0,0,375,376,5,31,0,0,376,379,5,90,0,0,377,379,5,206,0,0,378, + 375,1,0,0,0,378,377,1,0,0,0,379,41,1,0,0,0,380,381,5,119,0,0,381,390, + 3,72,36,0,382,383,5,179,0,0,383,384,5,220,0,0,384,385,3,72,36,0,385,386, + 5,236,0,0,386,390,1,0,0,0,387,388,5,179,0,0,388,390,3,72,36,0,389,380, + 1,0,0,0,389,382,1,0,0,0,389,387,1,0,0,0,390,43,1,0,0,0,391,392,5,144, + 0,0,392,395,3,50,25,0,393,394,5,118,0,0,394,396,3,50,25,0,395,393,1,0, + 0,0,395,396,1,0,0,0,396,45,1,0,0,0,397,402,3,48,24,0,398,399,5,206,0, + 0,399,401,3,48,24,0,400,398,1,0,0,0,401,404,1,0,0,0,402,400,1,0,0,0,402, + 403,1,0,0,0,403,47,1,0,0,0,404,402,1,0,0,0,405,407,3,74,37,0,406,408, + 7,6,0,0,407,406,1,0,0,0,407,408,1,0,0,0,408,411,1,0,0,0,409,410,5,117, + 0,0,410,412,7,7,0,0,411,409,1,0,0,0,411,412,1,0,0,0,412,415,1,0,0,0,413, + 414,5,26,0,0,414,416,5,200,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,49, + 1,0,0,0,417,424,3,122,61,0,418,421,3,106,53,0,419,420,5,238,0,0,420,422, + 3,106,53,0,421,419,1,0,0,0,421,422,1,0,0,0,422,424,1,0,0,0,423,417,1, + 0,0,0,423,418,1,0,0,0,424,51,1,0,0,0,425,430,3,54,27,0,426,427,5,206, + 0,0,427,429,3,54,27,0,428,426,1,0,0,0,429,432,1,0,0,0,430,428,1,0,0,0, + 430,431,1,0,0,0,431,53,1,0,0,0,432,430,1,0,0,0,433,434,3,118,59,0,434, + 435,5,212,0,0,435,436,3,108,54,0,436,55,1,0,0,0,437,439,3,58,29,0,438, + 437,1,0,0,0,438,439,1,0,0,0,439,441,1,0,0,0,440,442,3,60,30,0,441,440, + 1,0,0,0,441,442,1,0,0,0,442,444,1,0,0,0,443,445,3,62,31,0,444,443,1,0, + 0,0,444,445,1,0,0,0,445,57,1,0,0,0,446,447,5,126,0,0,447,448,5,18,0,0, + 448,449,3,72,36,0,449,59,1,0,0,0,450,451,5,122,0,0,451,452,5,18,0,0,452, + 453,3,46,23,0,453,61,1,0,0,0,454,455,7,8,0,0,455,456,3,64,32,0,456,63, + 1,0,0,0,457,464,3,66,33,0,458,459,5,16,0,0,459,460,3,66,33,0,460,461, + 5,6,0,0,461,462,3,66,33,0,462,464,1,0,0,0,463,457,1,0,0,0,463,458,1,0, + 0,0,464,65,1,0,0,0,465,466,5,33,0,0,466,478,5,142,0,0,467,468,5,175,0, + 0,468,478,5,128,0,0,469,470,5,175,0,0,470,478,5,64,0,0,471,472,3,106, + 53,0,472,473,5,128,0,0,473,478,1,0,0,0,474,475,3,106,53,0,475,476,5,64, + 0,0,476,478,1,0,0,0,477,465,1,0,0,0,477,467,1,0,0,0,477,469,1,0,0,0,477, + 471,1,0,0,0,477,474,1,0,0,0,478,67,1,0,0,0,479,480,3,74,37,0,480,481, + 5,0,0,1,481,69,1,0,0,0,482,530,3,118,59,0,483,484,3,118,59,0,484,485, + 5,220,0,0,485,486,3,118,59,0,486,493,3,70,35,0,487,488,5,206,0,0,488, + 489,3,118,59,0,489,490,3,70,35,0,490,492,1,0,0,0,491,487,1,0,0,0,492, + 495,1,0,0,0,493,491,1,0,0,0,493,494,1,0,0,0,494,496,1,0,0,0,495,493,1, + 0,0,0,496,497,5,236,0,0,497,530,1,0,0,0,498,499,3,118,59,0,499,500,5, + 220,0,0,500,505,3,120,60,0,501,502,5,206,0,0,502,504,3,120,60,0,503,501, + 1,0,0,0,504,507,1,0,0,0,505,503,1,0,0,0,505,506,1,0,0,0,506,508,1,0,0, + 0,507,505,1,0,0,0,508,509,5,236,0,0,509,530,1,0,0,0,510,511,3,118,59, + 0,511,512,5,220,0,0,512,517,3,70,35,0,513,514,5,206,0,0,514,516,3,70, + 35,0,515,513,1,0,0,0,516,519,1,0,0,0,517,515,1,0,0,0,517,518,1,0,0,0, + 518,520,1,0,0,0,519,517,1,0,0,0,520,521,5,236,0,0,521,530,1,0,0,0,522, + 523,3,118,59,0,523,525,5,220,0,0,524,526,3,72,36,0,525,524,1,0,0,0,525, + 526,1,0,0,0,526,527,1,0,0,0,527,528,5,236,0,0,528,530,1,0,0,0,529,482, + 1,0,0,0,529,483,1,0,0,0,529,498,1,0,0,0,529,510,1,0,0,0,529,522,1,0,0, + 0,530,71,1,0,0,0,531,536,3,74,37,0,532,533,5,206,0,0,533,535,3,74,37, + 0,534,532,1,0,0,0,535,538,1,0,0,0,536,534,1,0,0,0,536,537,1,0,0,0,537, + 73,1,0,0,0,538,536,1,0,0,0,539,540,6,37,-1,0,540,542,5,19,0,0,541,543, + 3,74,37,0,542,541,1,0,0,0,542,543,1,0,0,0,543,549,1,0,0,0,544,545,5,186, + 0,0,545,546,3,74,37,0,546,547,5,163,0,0,547,548,3,74,37,0,548,550,1,0, + 0,0,549,544,1,0,0,0,550,551,1,0,0,0,551,549,1,0,0,0,551,552,1,0,0,0,552, + 555,1,0,0,0,553,554,5,52,0,0,554,556,3,74,37,0,555,553,1,0,0,0,555,556, + 1,0,0,0,556,557,1,0,0,0,557,558,5,53,0,0,558,663,1,0,0,0,559,560,5,20, + 0,0,560,561,5,220,0,0,561,562,3,74,37,0,562,563,5,10,0,0,563,564,3,70, + 35,0,564,565,5,236,0,0,565,663,1,0,0,0,566,567,5,36,0,0,567,663,5,200, + 0,0,568,569,5,86,0,0,569,570,3,74,37,0,570,571,3,110,55,0,571,663,1,0, + 0,0,572,573,5,155,0,0,573,574,5,220,0,0,574,575,3,74,37,0,575,576,5,68, + 0,0,576,579,3,74,37,0,577,578,5,65,0,0,578,580,3,74,37,0,579,577,1,0, + 0,0,579,580,1,0,0,0,580,581,1,0,0,0,581,582,5,236,0,0,582,663,1,0,0,0, + 583,584,5,166,0,0,584,663,5,200,0,0,585,586,5,171,0,0,586,587,5,220,0, + 0,587,588,7,9,0,0,588,589,5,200,0,0,589,590,5,68,0,0,590,591,3,74,37, + 0,591,592,5,236,0,0,592,663,1,0,0,0,593,594,3,118,59,0,594,596,5,220, + 0,0,595,597,3,72,36,0,596,595,1,0,0,0,596,597,1,0,0,0,597,598,1,0,0,0, + 598,599,5,236,0,0,599,600,1,0,0,0,600,601,5,125,0,0,601,602,5,220,0,0, + 602,603,3,56,28,0,603,604,5,236,0,0,604,663,1,0,0,0,605,606,3,118,59, + 0,606,608,5,220,0,0,607,609,3,72,36,0,608,607,1,0,0,0,608,609,1,0,0,0, + 609,610,1,0,0,0,610,611,5,236,0,0,611,612,1,0,0,0,612,613,5,125,0,0,613, + 614,3,118,59,0,614,663,1,0,0,0,615,621,3,118,59,0,616,618,5,220,0,0,617, + 619,3,72,36,0,618,617,1,0,0,0,618,619,1,0,0,0,619,620,1,0,0,0,620,622, + 5,236,0,0,621,616,1,0,0,0,621,622,1,0,0,0,622,623,1,0,0,0,623,625,5,220, + 0,0,624,626,5,49,0,0,625,624,1,0,0,0,625,626,1,0,0,0,626,628,1,0,0,0, + 627,629,3,76,38,0,628,627,1,0,0,0,628,629,1,0,0,0,629,630,1,0,0,0,630, + 631,5,236,0,0,631,663,1,0,0,0,632,663,3,82,41,0,633,663,3,108,54,0,634, + 635,5,208,0,0,635,663,3,74,37,18,636,637,5,115,0,0,637,663,3,74,37,12, + 638,639,3,98,49,0,639,640,5,210,0,0,640,642,1,0,0,0,641,638,1,0,0,0,641, + 642,1,0,0,0,642,643,1,0,0,0,643,663,5,202,0,0,644,645,5,220,0,0,645,646, + 3,2,1,0,646,647,5,236,0,0,647,663,1,0,0,0,648,649,5,220,0,0,649,650,3, + 74,37,0,650,651,5,236,0,0,651,663,1,0,0,0,652,653,5,220,0,0,653,654,3, + 72,36,0,654,655,5,236,0,0,655,663,1,0,0,0,656,658,5,219,0,0,657,659,3, + 72,36,0,658,657,1,0,0,0,658,659,1,0,0,0,659,660,1,0,0,0,660,663,5,235, + 0,0,661,663,3,90,45,0,662,539,1,0,0,0,662,559,1,0,0,0,662,566,1,0,0,0, + 662,568,1,0,0,0,662,572,1,0,0,0,662,583,1,0,0,0,662,585,1,0,0,0,662,593, + 1,0,0,0,662,605,1,0,0,0,662,615,1,0,0,0,662,632,1,0,0,0,662,633,1,0,0, + 0,662,634,1,0,0,0,662,636,1,0,0,0,662,641,1,0,0,0,662,644,1,0,0,0,662, + 648,1,0,0,0,662,652,1,0,0,0,662,656,1,0,0,0,662,661,1,0,0,0,663,757,1, + 0,0,0,664,668,10,17,0,0,665,669,5,202,0,0,666,669,5,238,0,0,667,669,5, + 227,0,0,668,665,1,0,0,0,668,666,1,0,0,0,668,667,1,0,0,0,669,670,1,0,0, + 0,670,756,3,74,37,18,671,675,10,16,0,0,672,676,5,228,0,0,673,676,5,208, + 0,0,674,676,5,207,0,0,675,672,1,0,0,0,675,673,1,0,0,0,675,674,1,0,0,0, + 676,677,1,0,0,0,677,756,3,74,37,17,678,703,10,15,0,0,679,704,5,211,0, + 0,680,704,5,212,0,0,681,704,5,223,0,0,682,704,5,221,0,0,683,704,5,222, + 0,0,684,704,5,213,0,0,685,704,5,214,0,0,686,688,5,115,0,0,687,686,1,0, + 0,0,687,688,1,0,0,0,688,689,1,0,0,0,689,691,5,80,0,0,690,692,5,25,0,0, + 691,690,1,0,0,0,691,692,1,0,0,0,692,704,1,0,0,0,693,695,5,115,0,0,694, + 693,1,0,0,0,694,695,1,0,0,0,695,696,1,0,0,0,696,704,7,10,0,0,697,704, + 5,232,0,0,698,704,5,233,0,0,699,704,5,225,0,0,700,704,5,216,0,0,701,704, + 5,217,0,0,702,704,5,224,0,0,703,679,1,0,0,0,703,680,1,0,0,0,703,681,1, + 0,0,0,703,682,1,0,0,0,703,683,1,0,0,0,703,684,1,0,0,0,703,685,1,0,0,0, + 703,687,1,0,0,0,703,694,1,0,0,0,703,697,1,0,0,0,703,698,1,0,0,0,703,699, + 1,0,0,0,703,700,1,0,0,0,703,701,1,0,0,0,703,702,1,0,0,0,704,705,1,0,0, + 0,705,756,3,74,37,16,706,707,10,13,0,0,707,708,5,226,0,0,708,756,3,74, + 37,14,709,710,10,11,0,0,710,711,5,6,0,0,711,756,3,74,37,12,712,713,10, + 10,0,0,713,714,5,121,0,0,714,756,3,74,37,11,715,717,10,9,0,0,716,718, + 5,115,0,0,717,716,1,0,0,0,717,718,1,0,0,0,718,719,1,0,0,0,719,720,5,16, + 0,0,720,721,3,74,37,0,721,722,5,6,0,0,722,723,3,74,37,10,723,756,1,0, + 0,0,724,725,10,8,0,0,725,726,5,229,0,0,726,727,3,74,37,0,727,728,5,205, + 0,0,728,729,3,74,37,8,729,756,1,0,0,0,730,731,10,21,0,0,731,732,5,219, + 0,0,732,733,3,74,37,0,733,734,5,235,0,0,734,756,1,0,0,0,735,736,10,20, + 0,0,736,737,5,210,0,0,737,756,5,198,0,0,738,739,10,19,0,0,739,740,5,210, + 0,0,740,756,3,118,59,0,741,742,10,14,0,0,742,744,5,88,0,0,743,745,5,115, + 0,0,744,743,1,0,0,0,744,745,1,0,0,0,745,746,1,0,0,0,746,756,5,116,0,0, + 747,753,10,7,0,0,748,754,3,116,58,0,749,750,5,10,0,0,750,754,3,118,59, + 0,751,752,5,10,0,0,752,754,5,200,0,0,753,748,1,0,0,0,753,749,1,0,0,0, + 753,751,1,0,0,0,754,756,1,0,0,0,755,664,1,0,0,0,755,671,1,0,0,0,755,678, + 1,0,0,0,755,706,1,0,0,0,755,709,1,0,0,0,755,712,1,0,0,0,755,715,1,0,0, + 0,755,724,1,0,0,0,755,730,1,0,0,0,755,735,1,0,0,0,755,738,1,0,0,0,755, + 741,1,0,0,0,755,747,1,0,0,0,756,759,1,0,0,0,757,755,1,0,0,0,757,758,1, + 0,0,0,758,75,1,0,0,0,759,757,1,0,0,0,760,765,3,78,39,0,761,762,5,206, + 0,0,762,764,3,78,39,0,763,761,1,0,0,0,764,767,1,0,0,0,765,763,1,0,0,0, + 765,766,1,0,0,0,766,77,1,0,0,0,767,765,1,0,0,0,768,771,3,80,40,0,769, + 771,3,74,37,0,770,768,1,0,0,0,770,769,1,0,0,0,771,79,1,0,0,0,772,773, + 5,220,0,0,773,778,3,118,59,0,774,775,5,206,0,0,775,777,3,118,59,0,776, + 774,1,0,0,0,777,780,1,0,0,0,778,776,1,0,0,0,778,779,1,0,0,0,779,781,1, + 0,0,0,780,778,1,0,0,0,781,782,5,236,0,0,782,792,1,0,0,0,783,788,3,118, + 59,0,784,785,5,206,0,0,785,787,3,118,59,0,786,784,1,0,0,0,787,790,1,0, + 0,0,788,786,1,0,0,0,788,789,1,0,0,0,789,792,1,0,0,0,790,788,1,0,0,0,791, + 772,1,0,0,0,791,783,1,0,0,0,792,793,1,0,0,0,793,794,5,201,0,0,794,795, + 3,74,37,0,795,81,1,0,0,0,796,797,5,222,0,0,797,801,3,118,59,0,798,800, + 3,84,42,0,799,798,1,0,0,0,800,803,1,0,0,0,801,799,1,0,0,0,801,802,1,0, + 0,0,802,804,1,0,0,0,803,801,1,0,0,0,804,805,5,238,0,0,805,806,5,214,0, + 0,806,825,1,0,0,0,807,808,5,222,0,0,808,812,3,118,59,0,809,811,3,84,42, + 0,810,809,1,0,0,0,811,814,1,0,0,0,812,810,1,0,0,0,812,813,1,0,0,0,813, + 815,1,0,0,0,814,812,1,0,0,0,815,817,5,214,0,0,816,818,3,82,41,0,817,816, + 1,0,0,0,817,818,1,0,0,0,818,819,1,0,0,0,819,820,5,222,0,0,820,821,5,238, + 0,0,821,822,3,118,59,0,822,823,5,214,0,0,823,825,1,0,0,0,824,796,1,0, + 0,0,824,807,1,0,0,0,825,83,1,0,0,0,826,827,3,118,59,0,827,828,5,212,0, + 0,828,829,5,200,0,0,829,838,1,0,0,0,830,831,3,118,59,0,831,832,5,212, + 0,0,832,833,5,218,0,0,833,834,3,74,37,0,834,835,5,234,0,0,835,838,1,0, + 0,0,836,838,3,118,59,0,837,826,1,0,0,0,837,830,1,0,0,0,837,836,1,0,0, + 0,838,85,1,0,0,0,839,844,3,88,44,0,840,841,5,206,0,0,841,843,3,88,44, + 0,842,840,1,0,0,0,843,846,1,0,0,0,844,842,1,0,0,0,844,845,1,0,0,0,845, + 87,1,0,0,0,846,844,1,0,0,0,847,848,3,118,59,0,848,849,5,10,0,0,849,850, + 5,220,0,0,850,851,3,2,1,0,851,852,5,236,0,0,852,858,1,0,0,0,853,854,3, + 74,37,0,854,855,5,10,0,0,855,856,3,118,59,0,856,858,1,0,0,0,857,847,1, + 0,0,0,857,853,1,0,0,0,858,89,1,0,0,0,859,867,3,122,61,0,860,861,3,98, + 49,0,861,862,5,210,0,0,862,864,1,0,0,0,863,860,1,0,0,0,863,864,1,0,0, + 0,864,865,1,0,0,0,865,867,3,92,46,0,866,859,1,0,0,0,866,863,1,0,0,0,867, + 91,1,0,0,0,868,873,3,118,59,0,869,870,5,210,0,0,870,872,3,118,59,0,871, + 869,1,0,0,0,872,875,1,0,0,0,873,871,1,0,0,0,873,874,1,0,0,0,874,93,1, + 0,0,0,875,873,1,0,0,0,876,877,6,47,-1,0,877,886,3,98,49,0,878,886,3,96, + 48,0,879,880,5,220,0,0,880,881,3,2,1,0,881,882,5,236,0,0,882,886,1,0, + 0,0,883,886,3,82,41,0,884,886,3,122,61,0,885,876,1,0,0,0,885,878,1,0, + 0,0,885,879,1,0,0,0,885,883,1,0,0,0,885,884,1,0,0,0,886,895,1,0,0,0,887, + 891,10,3,0,0,888,892,3,116,58,0,889,890,5,10,0,0,890,892,3,118,59,0,891, + 888,1,0,0,0,891,889,1,0,0,0,892,894,1,0,0,0,893,887,1,0,0,0,894,897,1, + 0,0,0,895,893,1,0,0,0,895,896,1,0,0,0,896,95,1,0,0,0,897,895,1,0,0,0, + 898,899,3,118,59,0,899,901,5,220,0,0,900,902,3,100,50,0,901,900,1,0,0, + 0,901,902,1,0,0,0,902,903,1,0,0,0,903,904,5,236,0,0,904,97,1,0,0,0,905, + 906,3,102,51,0,906,907,5,210,0,0,907,909,1,0,0,0,908,905,1,0,0,0,908, + 909,1,0,0,0,909,910,1,0,0,0,910,911,3,118,59,0,911,99,1,0,0,0,912,917, + 3,74,37,0,913,914,5,206,0,0,914,916,3,74,37,0,915,913,1,0,0,0,916,919, + 1,0,0,0,917,915,1,0,0,0,917,918,1,0,0,0,918,101,1,0,0,0,919,917,1,0,0, + 0,920,921,3,118,59,0,921,103,1,0,0,0,922,931,5,196,0,0,923,924,5,210, + 0,0,924,931,7,11,0,0,925,926,5,198,0,0,926,928,5,210,0,0,927,929,7,11, + 0,0,928,927,1,0,0,0,928,929,1,0,0,0,929,931,1,0,0,0,930,922,1,0,0,0,930, + 923,1,0,0,0,930,925,1,0,0,0,931,105,1,0,0,0,932,934,7,12,0,0,933,932, + 1,0,0,0,933,934,1,0,0,0,934,941,1,0,0,0,935,942,3,104,52,0,936,942,5, + 197,0,0,937,942,5,198,0,0,938,942,5,199,0,0,939,942,5,82,0,0,940,942, + 5,113,0,0,941,935,1,0,0,0,941,936,1,0,0,0,941,937,1,0,0,0,941,938,1,0, + 0,0,941,939,1,0,0,0,941,940,1,0,0,0,942,107,1,0,0,0,943,947,3,106,53, + 0,944,947,5,200,0,0,945,947,5,116,0,0,946,943,1,0,0,0,946,944,1,0,0,0, + 946,945,1,0,0,0,947,109,1,0,0,0,948,949,7,13,0,0,949,111,1,0,0,0,950, + 951,7,14,0,0,951,113,1,0,0,0,952,953,7,15,0,0,953,115,1,0,0,0,954,957, + 5,195,0,0,955,957,3,114,57,0,956,954,1,0,0,0,956,955,1,0,0,0,957,117, + 1,0,0,0,958,962,5,195,0,0,959,962,3,110,55,0,960,962,3,112,56,0,961,958, + 1,0,0,0,961,959,1,0,0,0,961,960,1,0,0,0,962,119,1,0,0,0,963,964,5,200, + 0,0,964,965,5,212,0,0,965,966,3,106,53,0,966,121,1,0,0,0,967,968,5,218, + 0,0,968,969,3,118,59,0,969,970,5,234,0,0,970,123,1,0,0,0,120,127,137, + 146,149,153,156,160,163,166,169,172,176,180,183,186,189,193,196,205,211, + 232,249,266,272,278,289,291,302,305,311,319,325,327,331,336,339,342,346, + 350,353,355,358,362,366,369,371,373,378,389,395,402,407,411,415,421,423, + 430,438,441,444,463,477,493,505,517,525,529,536,542,551,555,579,596,608, + 618,621,625,628,641,658,662,668,675,687,691,694,703,717,744,753,755,757, + 765,770,778,788,791,801,812,817,824,837,844,857,863,866,873,885,891,895, + 901,908,917,928,930,933,941,946,956,961 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -4552,41 +4550,6 @@ std::any HogQLParser::ColumnExprAliasContext::accept(tree::ParseTreeVisitor *vis else return visitor->visitChildren(this); } -//----------------- ColumnExprExtractContext ------------------------------------------------------------------ - -tree::TerminalNode* HogQLParser::ColumnExprExtractContext::EXTRACT() { - return getToken(HogQLParser::EXTRACT, 0); -} - -tree::TerminalNode* HogQLParser::ColumnExprExtractContext::LPAREN() { - return getToken(HogQLParser::LPAREN, 0); -} - -HogQLParser::IntervalContext* HogQLParser::ColumnExprExtractContext::interval() { - return getRuleContext(0); -} - -tree::TerminalNode* HogQLParser::ColumnExprExtractContext::FROM() { - return getToken(HogQLParser::FROM, 0); -} - -HogQLParser::ColumnExprContext* HogQLParser::ColumnExprExtractContext::columnExpr() { - return getRuleContext(0); -} - -tree::TerminalNode* HogQLParser::ColumnExprExtractContext::RPAREN() { - return getToken(HogQLParser::RPAREN, 0); -} - -HogQLParser::ColumnExprExtractContext::ColumnExprExtractContext(ColumnExprContext *ctx) { copyFrom(ctx); } - - -std::any HogQLParser::ColumnExprExtractContext::accept(tree::ParseTreeVisitor *visitor) { - if (auto parserVisitor = dynamic_cast(visitor)) - return parserVisitor->visitColumnExprExtract(this); - else - return visitor->visitChildren(this); -} //----------------- ColumnExprNegateContext ------------------------------------------------------------------ tree::TerminalNode* HogQLParser::ColumnExprNegateContext::DASH() { @@ -5514,7 +5477,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(669); + setState(662); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 80, _ctx)) { case 1: { @@ -5599,86 +5562,67 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { } case 4: { - _localctx = _tracker.createInstance(_localctx); + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; setState(568); - match(HogQLParser::EXTRACT); + match(HogQLParser::INTERVAL); setState(569); - match(HogQLParser::LPAREN); + columnExpr(0); setState(570); interval(); - setState(571); - match(HogQLParser::FROM); - setState(572); - columnExpr(0); - setState(573); - match(HogQLParser::RPAREN); break; } case 5: { - _localctx = _tracker.createInstance(_localctx); - _ctx = _localctx; - previousContext = _localctx; - setState(575); - match(HogQLParser::INTERVAL); - setState(576); - columnExpr(0); - setState(577); - interval(); - break; - } - - case 6: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(579); + setState(572); match(HogQLParser::SUBSTRING); - setState(580); + setState(573); match(HogQLParser::LPAREN); - setState(581); + setState(574); columnExpr(0); - setState(582); + setState(575); match(HogQLParser::FROM); - setState(583); + setState(576); columnExpr(0); - setState(586); + setState(579); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FOR) { - setState(584); + setState(577); match(HogQLParser::FOR); - setState(585); + setState(578); columnExpr(0); } - setState(588); + setState(581); match(HogQLParser::RPAREN); break; } - case 7: { + case 6: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(590); + setState(583); match(HogQLParser::TIMESTAMP); - setState(591); + setState(584); match(HogQLParser::STRING_LITERAL); break; } - case 8: { + case 7: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(592); + setState(585); match(HogQLParser::TRIM); - setState(593); + setState(586); match(HogQLParser::LPAREN); - setState(594); + setState(587); _la = _input->LA(1); if (!(_la == HogQLParser::BOTH || _la == HogQLParser::LEADING || _la == HogQLParser::TRAILING)) { _errHandler->recoverInline(this); @@ -5687,27 +5631,27 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(595); + setState(588); match(HogQLParser::STRING_LITERAL); - setState(596); + setState(589); match(HogQLParser::FROM); - setState(597); + setState(590); columnExpr(0); - setState(598); + setState(591); match(HogQLParser::RPAREN); break; } - case 9: { + case 8: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(600); + setState(593); identifier(); - setState(601); + setState(594); match(HogQLParser::LPAREN); - setState(603); + setState(596); _errHandler->sync(this); _la = _input->LA(1); @@ -5716,32 +5660,32 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 70263309817) != 0)) { - setState(602); + setState(595); columnExprList(); } - setState(605); + setState(598); match(HogQLParser::RPAREN); - setState(607); + setState(600); match(HogQLParser::OVER); - setState(608); + setState(601); match(HogQLParser::LPAREN); - setState(609); + setState(602); windowExpr(); - setState(610); + setState(603); match(HogQLParser::RPAREN); break; } - case 10: { + case 9: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(612); + setState(605); identifier(); - setState(613); + setState(606); match(HogQLParser::LPAREN); - setState(615); + setState(608); _errHandler->sync(this); _la = _input->LA(1); @@ -5750,32 +5694,32 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 70263309817) != 0)) { - setState(614); + setState(607); columnExprList(); } - setState(617); + setState(610); match(HogQLParser::RPAREN); - setState(619); + setState(612); match(HogQLParser::OVER); - setState(620); + setState(613); identifier(); break; } - case 11: { + case 10: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(622); + setState(615); identifier(); - setState(628); + setState(621); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 75, _ctx)) { case 1: { - setState(623); + setState(616); match(HogQLParser::LPAREN); - setState(625); + setState(618); _errHandler->sync(this); _la = _input->LA(1); @@ -5784,10 +5728,10 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 70263309817) != 0)) { - setState(624); + setState(617); columnExprList(); } - setState(627); + setState(620); match(HogQLParser::RPAREN); break; } @@ -5795,14 +5739,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(630); + setState(623); match(HogQLParser::LPAREN); - setState(632); + setState(625); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 76, _ctx)) { case 1: { - setState(631); + setState(624); match(HogQLParser::DISTINCT); break; } @@ -5810,7 +5754,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(635); + setState(628); _errHandler->sync(this); _la = _input->LA(1); @@ -5819,59 +5763,59 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 70263309817) != 0)) { - setState(634); + setState(627); columnArgList(); } - setState(637); + setState(630); match(HogQLParser::RPAREN); break; } - case 12: { + case 11: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(639); + setState(632); hogqlxTagElement(); break; } - case 13: { + case 12: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(640); + setState(633); literal(); break; } - case 14: { + case 13: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(641); + setState(634); match(HogQLParser::DASH); - setState(642); + setState(635); columnExpr(18); break; } - case 15: { + case 14: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(643); + setState(636); match(HogQLParser::NOT); - setState(644); + setState(637); columnExpr(12); break; } - case 16: { + case 15: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(648); + setState(641); _errHandler->sync(this); _la = _input->LA(1); @@ -5881,62 +5825,62 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 128)) & -9) != 0) || _la == HogQLParser::JSON_TRUE || _la == HogQLParser::IDENTIFIER) { - setState(645); + setState(638); tableIdentifier(); - setState(646); + setState(639); match(HogQLParser::DOT); } - setState(650); + setState(643); match(HogQLParser::ASTERISK); break; } - case 17: { + case 16: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(651); + setState(644); match(HogQLParser::LPAREN); - setState(652); + setState(645); selectUnionStmt(); - setState(653); + setState(646); match(HogQLParser::RPAREN); break; } - case 18: { + case 17: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(655); + setState(648); match(HogQLParser::LPAREN); - setState(656); + setState(649); columnExpr(0); - setState(657); + setState(650); match(HogQLParser::RPAREN); break; } - case 19: { + case 18: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(659); + setState(652); match(HogQLParser::LPAREN); - setState(660); + setState(653); columnExprList(); - setState(661); + setState(654); match(HogQLParser::RPAREN); break; } - case 20: { + case 19: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(663); + setState(656); match(HogQLParser::LBRACKET); - setState(665); + setState(658); _errHandler->sync(this); _la = _input->LA(1); @@ -5945,19 +5889,19 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 70263309817) != 0)) { - setState(664); + setState(657); columnExprList(); } - setState(667); + setState(660); match(HogQLParser::RBRACKET); break; } - case 21: { + case 20: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(668); + setState(661); columnIdentifier(); break; } @@ -5966,7 +5910,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(764); + setState(757); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 91, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { @@ -5974,7 +5918,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(762); + setState(755); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 90, _ctx)) { case 1: { @@ -5982,26 +5926,26 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(671); + setState(664); if (!(precpred(_ctx, 17))) throw FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(675); + setState(668); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::ASTERISK: { - setState(672); + setState(665); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::ASTERISK); break; } case HogQLParser::SLASH: { - setState(673); + setState(666); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::SLASH); break; } case HogQLParser::PERCENT: { - setState(674); + setState(667); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PERCENT); break; } @@ -6009,7 +5953,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(677); + setState(670); antlrcpp::downCast(_localctx)->right = columnExpr(18); break; } @@ -6019,26 +5963,26 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(678); + setState(671); if (!(precpred(_ctx, 16))) throw FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(682); + setState(675); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::PLUS: { - setState(679); + setState(672); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PLUS); break; } case HogQLParser::DASH: { - setState(680); + setState(673); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::DASH); break; } case HogQLParser::CONCAT: { - setState(681); + setState(674); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::CONCAT); break; } @@ -6046,7 +5990,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(684); + setState(677); antlrcpp::downCast(_localctx)->right = columnExpr(17); break; } @@ -6056,86 +6000,86 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(685); + setState(678); if (!(precpred(_ctx, 15))) throw FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(710); + setState(703); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 86, _ctx)) { case 1: { - setState(686); + setState(679); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_DOUBLE); break; } case 2: { - setState(687); + setState(680); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_SINGLE); break; } case 3: { - setState(688); + setState(681); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_EQ); break; } case 4: { - setState(689); + setState(682); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT_EQ); break; } case 5: { - setState(690); + setState(683); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT); break; } case 6: { - setState(691); + setState(684); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT_EQ); break; } case 7: { - setState(692); + setState(685); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT); break; } case 8: { - setState(694); + setState(687); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(693); + setState(686); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(696); + setState(689); match(HogQLParser::IN); - setState(698); + setState(691); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COHORT) { - setState(697); + setState(690); match(HogQLParser::COHORT); } break; } case 9: { - setState(701); + setState(694); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(700); + setState(693); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(703); + setState(696); _la = _input->LA(1); if (!(_la == HogQLParser::ILIKE @@ -6150,37 +6094,37 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { } case 10: { - setState(704); + setState(697); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_SINGLE); break; } case 11: { - setState(705); + setState(698); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_DOUBLE); break; } case 12: { - setState(706); + setState(699); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_REGEX); break; } case 13: { - setState(707); + setState(700); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_SINGLE); break; } case 14: { - setState(708); + setState(701); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_DOUBLE); break; } case 15: { - setState(709); + setState(702); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_IREGEX); break; } @@ -6188,7 +6132,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(712); + setState(705); antlrcpp::downCast(_localctx)->right = columnExpr(16); break; } @@ -6197,12 +6141,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(713); + setState(706); if (!(precpred(_ctx, 13))) throw FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(714); + setState(707); match(HogQLParser::NULLISH); - setState(715); + setState(708); columnExpr(14); break; } @@ -6211,12 +6155,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(716); + setState(709); if (!(precpred(_ctx, 11))) throw FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(717); + setState(710); match(HogQLParser::AND); - setState(718); + setState(711); columnExpr(12); break; } @@ -6225,12 +6169,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(719); + setState(712); if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(720); + setState(713); match(HogQLParser::OR); - setState(721); + setState(714); columnExpr(11); break; } @@ -6239,24 +6183,24 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(722); + setState(715); if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(724); + setState(717); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(723); + setState(716); match(HogQLParser::NOT); } - setState(726); + setState(719); match(HogQLParser::BETWEEN); - setState(727); + setState(720); columnExpr(0); - setState(728); + setState(721); match(HogQLParser::AND); - setState(729); + setState(722); columnExpr(10); break; } @@ -6265,16 +6209,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(731); + setState(724); if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(732); + setState(725); match(HogQLParser::QUERY); - setState(733); + setState(726); columnExpr(0); - setState(734); + setState(727); match(HogQLParser::COLON); - setState(735); + setState(728); columnExpr(8); break; } @@ -6283,14 +6227,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(737); + setState(730); if (!(precpred(_ctx, 21))) throw FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(738); + setState(731); match(HogQLParser::LBRACKET); - setState(739); + setState(732); columnExpr(0); - setState(740); + setState(733); match(HogQLParser::RBRACKET); break; } @@ -6299,12 +6243,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(742); + setState(735); if (!(precpred(_ctx, 20))) throw FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(743); + setState(736); match(HogQLParser::DOT); - setState(744); + setState(737); match(HogQLParser::DECIMAL_LITERAL); break; } @@ -6313,12 +6257,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(745); + setState(738); if (!(precpred(_ctx, 19))) throw FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(746); + setState(739); match(HogQLParser::DOT); - setState(747); + setState(740); identifier(); break; } @@ -6327,20 +6271,20 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(748); + setState(741); if (!(precpred(_ctx, 14))) throw FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(749); + setState(742); match(HogQLParser::IS); - setState(751); + setState(744); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(750); + setState(743); match(HogQLParser::NOT); } - setState(753); + setState(746); match(HogQLParser::NULL_SQL); break; } @@ -6349,30 +6293,30 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(754); + setState(747); if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(760); + setState(753); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 89, _ctx)) { case 1: { - setState(755); + setState(748); alias(); break; } case 2: { - setState(756); + setState(749); match(HogQLParser::AS); - setState(757); + setState(750); identifier(); break; } case 3: { - setState(758); + setState(751); match(HogQLParser::AS); - setState(759); + setState(752); match(HogQLParser::STRING_LITERAL); break; } @@ -6387,7 +6331,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } } - setState(766); + setState(759); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 91, _ctx); } @@ -6449,17 +6393,17 @@ HogQLParser::ColumnArgListContext* HogQLParser::columnArgList() { }); try { enterOuterAlt(_localctx, 1); - setState(767); + setState(760); columnArgExpr(); - setState(772); + setState(765); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(768); + setState(761); match(HogQLParser::COMMA); - setState(769); + setState(762); columnArgExpr(); - setState(774); + setState(767); _errHandler->sync(this); _la = _input->LA(1); } @@ -6513,19 +6457,19 @@ HogQLParser::ColumnArgExprContext* HogQLParser::columnArgExpr() { exitRule(); }); try { - setState(777); + setState(770); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 93, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(775); + setState(768); columnLambdaExpr(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(776); + setState(769); columnExpr(0); break; } @@ -6609,27 +6553,27 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(798); + setState(791); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LPAREN: { - setState(779); + setState(772); match(HogQLParser::LPAREN); - setState(780); + setState(773); identifier(); - setState(785); + setState(778); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(781); + setState(774); match(HogQLParser::COMMA); - setState(782); + setState(775); identifier(); - setState(787); + setState(780); _errHandler->sync(this); _la = _input->LA(1); } - setState(788); + setState(781); match(HogQLParser::RPAREN); break; } @@ -6821,17 +6765,17 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { case HogQLParser::JSON_FALSE: case HogQLParser::JSON_TRUE: case HogQLParser::IDENTIFIER: { - setState(790); + setState(783); identifier(); - setState(795); + setState(788); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(791); + setState(784); match(HogQLParser::COMMA); - setState(792); + setState(785); identifier(); - setState(797); + setState(790); _errHandler->sync(this); _la = _input->LA(1); } @@ -6841,9 +6785,9 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { default: throw NoViableAltException(this); } - setState(800); + setState(793); match(HogQLParser::ARROW); - setState(801); + setState(794); columnExpr(0); } @@ -6970,17 +6914,17 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { exitRule(); }); try { - setState(831); + setState(824); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 100, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(803); + setState(796); match(HogQLParser::LT); - setState(804); + setState(797); identifier(); - setState(808); + setState(801); _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && @@ -6989,15 +6933,15 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { ((1ULL << (_la - 128)) & -9) != 0) || _la == HogQLParser::JSON_TRUE || _la == HogQLParser::IDENTIFIER) { - setState(805); + setState(798); hogqlxTagAttribute(); - setState(810); + setState(803); _errHandler->sync(this); _la = _input->LA(1); } - setState(811); + setState(804); match(HogQLParser::SLASH); - setState(812); + setState(805); match(HogQLParser::GT); break; } @@ -7005,11 +6949,11 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(814); + setState(807); match(HogQLParser::LT); - setState(815); + setState(808); identifier(); - setState(819); + setState(812); _errHandler->sync(this); _la = _input->LA(1); while ((((_la & ~ 0x3fULL) == 0) && @@ -7018,20 +6962,20 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { ((1ULL << (_la - 128)) & -9) != 0) || _la == HogQLParser::JSON_TRUE || _la == HogQLParser::IDENTIFIER) { - setState(816); + setState(809); hogqlxTagAttribute(); - setState(821); + setState(814); _errHandler->sync(this); _la = _input->LA(1); } - setState(822); + setState(815); match(HogQLParser::GT); - setState(824); + setState(817); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 99, _ctx)) { case 1: { - setState(823); + setState(816); hogqlxTagElement(); break; } @@ -7039,13 +6983,13 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { default: break; } - setState(826); + setState(819); match(HogQLParser::LT); - setState(827); + setState(820); match(HogQLParser::SLASH); - setState(828); + setState(821); identifier(); - setState(829); + setState(822); match(HogQLParser::GT); break; } @@ -7119,38 +7063,38 @@ HogQLParser::HogqlxTagAttributeContext* HogQLParser::hogqlxTagAttribute() { exitRule(); }); try { - setState(844); + setState(837); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 101, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(833); + setState(826); identifier(); - setState(834); + setState(827); match(HogQLParser::EQ_SINGLE); - setState(835); + setState(828); match(HogQLParser::STRING_LITERAL); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(837); + setState(830); identifier(); - setState(838); + setState(831); match(HogQLParser::EQ_SINGLE); - setState(839); + setState(832); match(HogQLParser::LBRACE); - setState(840); + setState(833); columnExpr(0); - setState(841); + setState(834); match(HogQLParser::RBRACE); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(843); + setState(836); identifier(); break; } @@ -7218,17 +7162,17 @@ HogQLParser::WithExprListContext* HogQLParser::withExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(846); + setState(839); withExpr(); - setState(851); + setState(844); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(847); + setState(840); match(HogQLParser::COMMA); - setState(848); + setState(841); withExpr(); - setState(853); + setState(846); _errHandler->sync(this); _la = _input->LA(1); } @@ -7324,21 +7268,21 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { exitRule(); }); try { - setState(864); + setState(857); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 103, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(854); + setState(847); identifier(); - setState(855); + setState(848); match(HogQLParser::AS); - setState(856); + setState(849); match(HogQLParser::LPAREN); - setState(857); + setState(850); selectUnionStmt(); - setState(858); + setState(851); match(HogQLParser::RPAREN); break; } @@ -7346,11 +7290,11 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(860); + setState(853); columnExpr(0); - setState(861); + setState(854); match(HogQLParser::AS); - setState(862); + setState(855); identifier(); break; } @@ -7416,12 +7360,12 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { exitRule(); }); try { - setState(873); + setState(866); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 1); - setState(866); + setState(859); placeholder(); break; } @@ -7614,14 +7558,14 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::JSON_TRUE: case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 2); - setState(870); + setState(863); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 104, _ctx)) { case 1: { - setState(867); + setState(860); tableIdentifier(); - setState(868); + setState(861); match(HogQLParser::DOT); break; } @@ -7629,7 +7573,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { default: break; } - setState(872); + setState(865); nestedIdentifier(); break; } @@ -7697,19 +7641,19 @@ HogQLParser::NestedIdentifierContext* HogQLParser::nestedIdentifier() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(875); + setState(868); identifier(); - setState(880); + setState(873); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 106, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(876); + setState(869); match(HogQLParser::DOT); - setState(877); + setState(870); identifier(); } - setState(882); + setState(875); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 106, _ctx); } @@ -7875,7 +7819,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(892); + setState(885); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 107, _ctx)) { case 1: { @@ -7883,7 +7827,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _ctx = _localctx; previousContext = _localctx; - setState(884); + setState(877); tableIdentifier(); break; } @@ -7892,7 +7836,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(885); + setState(878); tableFunctionExpr(); break; } @@ -7901,11 +7845,11 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(886); + setState(879); match(HogQLParser::LPAREN); - setState(887); + setState(880); selectUnionStmt(); - setState(888); + setState(881); match(HogQLParser::RPAREN); break; } @@ -7914,7 +7858,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(890); + setState(883); hogqlxTagElement(); break; } @@ -7923,7 +7867,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(891); + setState(884); placeholder(); break; } @@ -7932,7 +7876,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(902); + setState(895); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 109, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { @@ -7943,10 +7887,10 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleTableExpr); - setState(894); + setState(887); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(898); + setState(891); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::DATE: @@ -7954,15 +7898,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { case HogQLParser::ID: case HogQLParser::KEY: case HogQLParser::IDENTIFIER: { - setState(895); + setState(888); alias(); break; } case HogQLParser::AS: { - setState(896); + setState(889); match(HogQLParser::AS); - setState(897); + setState(890); identifier(); break; } @@ -7971,7 +7915,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { throw NoViableAltException(this); } } - setState(904); + setState(897); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 109, _ctx); } @@ -8033,11 +7977,11 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(905); + setState(898); identifier(); - setState(906); + setState(899); match(HogQLParser::LPAREN); - setState(908); + setState(901); _errHandler->sync(this); _la = _input->LA(1); @@ -8046,10 +7990,10 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 192)) & 70263309817) != 0)) { - setState(907); + setState(900); tableArgList(); } - setState(910); + setState(903); match(HogQLParser::RPAREN); } @@ -8106,14 +8050,14 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(915); + setState(908); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 111, _ctx)) { case 1: { - setState(912); + setState(905); databaseIdentifier(); - setState(913); + setState(906); match(HogQLParser::DOT); break; } @@ -8121,7 +8065,7 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { default: break; } - setState(917); + setState(910); identifier(); } @@ -8183,17 +8127,17 @@ HogQLParser::TableArgListContext* HogQLParser::tableArgList() { }); try { enterOuterAlt(_localctx, 1); - setState(919); + setState(912); columnExpr(0); - setState(924); + setState(917); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(920); + setState(913); match(HogQLParser::COMMA); - setState(921); + setState(914); columnExpr(0); - setState(926); + setState(919); _errHandler->sync(this); _la = _input->LA(1); } @@ -8244,7 +8188,7 @@ HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(927); + setState(920); identifier(); } @@ -8309,21 +8253,21 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { exitRule(); }); try { - setState(937); + setState(930); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FLOATING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(929); + setState(922); match(HogQLParser::FLOATING_LITERAL); break; } case HogQLParser::DOT: { enterOuterAlt(_localctx, 2); - setState(930); + setState(923); match(HogQLParser::DOT); - setState(931); + setState(924); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -8339,16 +8283,16 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { case HogQLParser::DECIMAL_LITERAL: { enterOuterAlt(_localctx, 3); - setState(932); + setState(925); match(HogQLParser::DECIMAL_LITERAL); - setState(933); + setState(926); match(HogQLParser::DOT); - setState(935); + setState(928); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 113, _ctx)) { case 1: { - setState(934); + setState(927); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -8447,14 +8391,14 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(940); + setState(933); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::DASH || _la == HogQLParser::PLUS) { - setState(939); + setState(932); _la = _input->LA(1); if (!(_la == HogQLParser::DASH @@ -8466,41 +8410,41 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { consume(); } } - setState(948); + setState(941); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 116, _ctx)) { case 1: { - setState(942); + setState(935); floatingLiteral(); break; } case 2: { - setState(943); + setState(936); match(HogQLParser::OCTAL_LITERAL); break; } case 3: { - setState(944); + setState(937); match(HogQLParser::DECIMAL_LITERAL); break; } case 4: { - setState(945); + setState(938); match(HogQLParser::HEXADECIMAL_LITERAL); break; } case 5: { - setState(946); + setState(939); match(HogQLParser::INF); break; } case 6: { - setState(947); + setState(940); match(HogQLParser::NAN_SQL); break; } @@ -8562,7 +8506,7 @@ HogQLParser::LiteralContext* HogQLParser::literal() { exitRule(); }); try { - setState(953); + setState(946); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::INF: @@ -8575,21 +8519,21 @@ HogQLParser::LiteralContext* HogQLParser::literal() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 1); - setState(950); + setState(943); numberLiteral(); break; } case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 2); - setState(951); + setState(944); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::NULL_SQL: { enterOuterAlt(_localctx, 3); - setState(952); + setState(945); match(HogQLParser::NULL_SQL); break; } @@ -8673,7 +8617,7 @@ HogQLParser::IntervalContext* HogQLParser::interval() { }); try { enterOuterAlt(_localctx, 1); - setState(955); + setState(948); _la = _input->LA(1); if (!(_la == HogQLParser::DAY || ((((_la - 76) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 76)) & 72057615512764417) != 0) || ((((_la - 145) & ~ 0x3fULL) == 0) && @@ -9440,7 +9384,7 @@ HogQLParser::KeywordContext* HogQLParser::keyword() { }); try { enterOuterAlt(_localctx, 1); - setState(957); + setState(950); _la = _input->LA(1); if (!(((((_la - 2) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 2)) & -34368126977) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && @@ -9512,7 +9456,7 @@ HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { }); try { enterOuterAlt(_localctx, 1); - setState(959); + setState(952); _la = _input->LA(1); if (!(((((_la - 36) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 36)) & 36030996109328385) != 0))) { @@ -9572,12 +9516,12 @@ HogQLParser::AliasContext* HogQLParser::alias() { exitRule(); }); try { - setState(963); + setState(956); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(961); + setState(954); match(HogQLParser::IDENTIFIER); break; } @@ -9587,7 +9531,7 @@ HogQLParser::AliasContext* HogQLParser::alias() { case HogQLParser::ID: case HogQLParser::KEY: { enterOuterAlt(_localctx, 2); - setState(962); + setState(955); keywordForAlias(); break; } @@ -9649,12 +9593,12 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { exitRule(); }); try { - setState(968); + setState(961); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(965); + setState(958); match(HogQLParser::IDENTIFIER); break; } @@ -9668,7 +9612,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WEEK: case HogQLParser::YEAR: { enterOuterAlt(_localctx, 2); - setState(966); + setState(959); interval(); break; } @@ -9852,7 +9796,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::JSON_FALSE: case HogQLParser::JSON_TRUE: { enterOuterAlt(_localctx, 3); - setState(967); + setState(960); keyword(); break; } @@ -9915,11 +9859,11 @@ HogQLParser::EnumValueContext* HogQLParser::enumValue() { }); try { enterOuterAlt(_localctx, 1); - setState(970); + setState(963); match(HogQLParser::STRING_LITERAL); - setState(971); + setState(964); match(HogQLParser::EQ_SINGLE); - setState(972); + setState(965); numberLiteral(); } @@ -9976,11 +9920,11 @@ HogQLParser::PlaceholderContext* HogQLParser::placeholder() { }); try { enterOuterAlt(_localctx, 1); - setState(974); + setState(967); match(HogQLParser::LBRACE); - setState(975); + setState(968); identifier(); - setState(976); + setState(969); match(HogQLParser::RBRACE); } diff --git a/hogql_parser/HogQLParser.h b/hogql_parser/HogQLParser.h index 49c38fad2be89..058a3332af50c 100644 --- a/hogql_parser/HogQLParser.h +++ b/hogql_parser/HogQLParser.h @@ -988,20 +988,6 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; - class ColumnExprExtractContext : public ColumnExprContext { - public: - ColumnExprExtractContext(ColumnExprContext *ctx); - - antlr4::tree::TerminalNode *EXTRACT(); - antlr4::tree::TerminalNode *LPAREN(); - IntervalContext *interval(); - antlr4::tree::TerminalNode *FROM(); - ColumnExprContext *columnExpr(); - antlr4::tree::TerminalNode *RPAREN(); - - virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; - }; - class ColumnExprNegateContext : public ColumnExprContext { public: ColumnExprNegateContext(ColumnExprContext *ctx); diff --git a/hogql_parser/HogQLParser.interp b/hogql_parser/HogQLParser.interp index 2b24b72a2819d..b159bc05eb424 100644 --- a/hogql_parser/HogQLParser.interp +++ b/hogql_parser/HogQLParser.interp @@ -554,4 +554,4 @@ placeholder atn: -[4, 1, 242, 979, 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, 1, 0, 1, 0, 1, 0, 3, 0, 128, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 136, 8, 1, 10, 1, 12, 1, 139, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 147, 8, 2, 1, 3, 3, 3, 150, 8, 3, 1, 3, 1, 3, 3, 3, 154, 8, 3, 1, 3, 3, 3, 157, 8, 3, 1, 3, 1, 3, 3, 3, 161, 8, 3, 1, 3, 3, 3, 164, 8, 3, 1, 3, 3, 3, 167, 8, 3, 1, 3, 3, 3, 170, 8, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 1, 3, 3, 3, 177, 8, 3, 1, 3, 1, 3, 3, 3, 181, 8, 3, 1, 3, 3, 3, 184, 8, 3, 1, 3, 3, 3, 187, 8, 3, 1, 3, 3, 3, 190, 8, 3, 1, 3, 1, 3, 3, 3, 194, 8, 3, 1, 3, 3, 3, 197, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 206, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 212, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 231, 8, 8, 10, 8, 12, 8, 234, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 250, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 267, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 273, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 279, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 290, 8, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 3, 18, 306, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 320, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 326, 8, 18, 10, 18, 12, 18, 329, 9, 18, 1, 19, 3, 19, 332, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 337, 8, 19, 1, 19, 3, 19, 340, 8, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 1, 19, 3, 19, 347, 8, 19, 1, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 3, 19, 354, 8, 19, 3, 19, 356, 8, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 1, 19, 3, 19, 363, 8, 19, 1, 19, 1, 19, 3, 19, 367, 8, 19, 1, 19, 3, 19, 370, 8, 19, 3, 19, 372, 8, 19, 3, 19, 374, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 379, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 390, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 396, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 401, 8, 23, 10, 23, 12, 23, 404, 9, 23, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 422, 8, 25, 3, 25, 424, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 429, 8, 26, 10, 26, 12, 26, 432, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 439, 8, 28, 1, 28, 3, 28, 442, 8, 28, 1, 28, 3, 28, 445, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 464, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 478, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 492, 8, 35, 10, 35, 12, 35, 495, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 504, 8, 35, 10, 35, 12, 35, 507, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 516, 8, 35, 10, 35, 12, 35, 519, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 526, 8, 35, 1, 35, 1, 35, 3, 35, 530, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 535, 8, 36, 10, 36, 12, 36, 538, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 543, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 550, 8, 37, 11, 37, 12, 37, 551, 1, 37, 1, 37, 3, 37, 556, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 587, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 604, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 616, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 626, 8, 37, 1, 37, 3, 37, 629, 8, 37, 1, 37, 1, 37, 3, 37, 633, 8, 37, 1, 37, 3, 37, 636, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 649, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 666, 8, 37, 1, 37, 1, 37, 3, 37, 670, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 676, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 683, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 695, 8, 37, 1, 37, 1, 37, 3, 37, 699, 8, 37, 1, 37, 3, 37, 702, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 711, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 725, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 752, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 761, 8, 37, 5, 37, 763, 8, 37, 10, 37, 12, 37, 766, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 771, 8, 38, 10, 38, 12, 38, 774, 9, 38, 1, 39, 1, 39, 3, 39, 778, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 784, 8, 40, 10, 40, 12, 40, 787, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 794, 8, 40, 10, 40, 12, 40, 797, 9, 40, 3, 40, 799, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 807, 8, 41, 10, 41, 12, 41, 810, 9, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 818, 8, 41, 10, 41, 12, 41, 821, 9, 41, 1, 41, 1, 41, 3, 41, 825, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 832, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 845, 8, 42, 1, 43, 1, 43, 1, 43, 5, 43, 850, 8, 43, 10, 43, 12, 43, 853, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 865, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 871, 8, 45, 1, 45, 3, 45, 874, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 879, 8, 46, 10, 46, 12, 46, 882, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 893, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 899, 8, 47, 5, 47, 901, 8, 47, 10, 47, 12, 47, 904, 9, 47, 1, 48, 1, 48, 1, 48, 3, 48, 909, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 49, 916, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 923, 8, 50, 10, 50, 12, 50, 926, 9, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 936, 8, 52, 3, 52, 938, 8, 52, 1, 53, 3, 53, 941, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 949, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 954, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 964, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 969, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 0, 3, 36, 74, 94, 62, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 197, 198, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1107, 0, 127, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 6, 149, 1, 0, 0, 0, 8, 198, 1, 0, 0, 0, 10, 201, 1, 0, 0, 0, 12, 207, 1, 0, 0, 0, 14, 211, 1, 0, 0, 0, 16, 217, 1, 0, 0, 0, 18, 235, 1, 0, 0, 0, 20, 238, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 251, 1, 0, 0, 0, 26, 254, 1, 0, 0, 0, 28, 258, 1, 0, 0, 0, 30, 291, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 296, 1, 0, 0, 0, 36, 311, 1, 0, 0, 0, 38, 373, 1, 0, 0, 0, 40, 378, 1, 0, 0, 0, 42, 389, 1, 0, 0, 0, 44, 391, 1, 0, 0, 0, 46, 397, 1, 0, 0, 0, 48, 405, 1, 0, 0, 0, 50, 423, 1, 0, 0, 0, 52, 425, 1, 0, 0, 0, 54, 433, 1, 0, 0, 0, 56, 438, 1, 0, 0, 0, 58, 446, 1, 0, 0, 0, 60, 450, 1, 0, 0, 0, 62, 454, 1, 0, 0, 0, 64, 463, 1, 0, 0, 0, 66, 477, 1, 0, 0, 0, 68, 479, 1, 0, 0, 0, 70, 529, 1, 0, 0, 0, 72, 531, 1, 0, 0, 0, 74, 669, 1, 0, 0, 0, 76, 767, 1, 0, 0, 0, 78, 777, 1, 0, 0, 0, 80, 798, 1, 0, 0, 0, 82, 831, 1, 0, 0, 0, 84, 844, 1, 0, 0, 0, 86, 846, 1, 0, 0, 0, 88, 864, 1, 0, 0, 0, 90, 873, 1, 0, 0, 0, 92, 875, 1, 0, 0, 0, 94, 892, 1, 0, 0, 0, 96, 905, 1, 0, 0, 0, 98, 915, 1, 0, 0, 0, 100, 919, 1, 0, 0, 0, 102, 927, 1, 0, 0, 0, 104, 937, 1, 0, 0, 0, 106, 940, 1, 0, 0, 0, 108, 953, 1, 0, 0, 0, 110, 955, 1, 0, 0, 0, 112, 957, 1, 0, 0, 0, 114, 959, 1, 0, 0, 0, 116, 963, 1, 0, 0, 0, 118, 968, 1, 0, 0, 0, 120, 970, 1, 0, 0, 0, 122, 974, 1, 0, 0, 0, 124, 128, 3, 2, 1, 0, 125, 128, 3, 6, 3, 0, 126, 128, 3, 82, 41, 0, 127, 124, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 5, 0, 0, 1, 130, 1, 1, 0, 0, 0, 131, 137, 3, 4, 2, 0, 132, 133, 5, 176, 0, 0, 133, 134, 5, 4, 0, 0, 134, 136, 3, 4, 2, 0, 135, 132, 1, 0, 0, 0, 136, 139, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 147, 3, 6, 3, 0, 141, 142, 5, 220, 0, 0, 142, 143, 3, 2, 1, 0, 143, 144, 5, 236, 0, 0, 144, 147, 1, 0, 0, 0, 145, 147, 3, 122, 61, 0, 146, 140, 1, 0, 0, 0, 146, 141, 1, 0, 0, 0, 146, 145, 1, 0, 0, 0, 147, 5, 1, 0, 0, 0, 148, 150, 3, 8, 4, 0, 149, 148, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 153, 5, 146, 0, 0, 152, 154, 5, 49, 0, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 156, 1, 0, 0, 0, 155, 157, 3, 10, 5, 0, 156, 155, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 160, 3, 72, 36, 0, 159, 161, 3, 12, 6, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 164, 3, 14, 7, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 167, 3, 18, 9, 0, 166, 165, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 170, 3, 20, 10, 0, 169, 168, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 173, 3, 22, 11, 0, 172, 171, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 175, 5, 189, 0, 0, 175, 177, 7, 0, 0, 0, 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 179, 5, 189, 0, 0, 179, 181, 5, 169, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 183, 1, 0, 0, 0, 182, 184, 3, 24, 12, 0, 183, 182, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 187, 3, 16, 8, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 1, 0, 0, 0, 188, 190, 3, 26, 13, 0, 189, 188, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 194, 3, 30, 15, 0, 192, 194, 3, 32, 16, 0, 193, 191, 1, 0, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 196, 1, 0, 0, 0, 195, 197, 3, 34, 17, 0, 196, 195, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 7, 1, 0, 0, 0, 198, 199, 5, 189, 0, 0, 199, 200, 3, 86, 43, 0, 200, 9, 1, 0, 0, 0, 201, 202, 5, 168, 0, 0, 202, 205, 5, 198, 0, 0, 203, 204, 5, 189, 0, 0, 204, 206, 5, 164, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 11, 1, 0, 0, 0, 207, 208, 5, 68, 0, 0, 208, 209, 3, 36, 18, 0, 209, 13, 1, 0, 0, 0, 210, 212, 7, 1, 0, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 5, 90, 0, 0, 215, 216, 3, 72, 36, 0, 216, 15, 1, 0, 0, 0, 217, 218, 5, 188, 0, 0, 218, 219, 3, 118, 59, 0, 219, 220, 5, 10, 0, 0, 220, 221, 5, 220, 0, 0, 221, 222, 3, 56, 28, 0, 222, 232, 5, 236, 0, 0, 223, 224, 5, 206, 0, 0, 224, 225, 3, 118, 59, 0, 225, 226, 5, 10, 0, 0, 226, 227, 5, 220, 0, 0, 227, 228, 3, 56, 28, 0, 228, 229, 5, 236, 0, 0, 229, 231, 1, 0, 0, 0, 230, 223, 1, 0, 0, 0, 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 17, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 5, 129, 0, 0, 236, 237, 3, 74, 37, 0, 237, 19, 1, 0, 0, 0, 238, 239, 5, 187, 0, 0, 239, 240, 3, 74, 37, 0, 240, 21, 1, 0, 0, 0, 241, 242, 5, 73, 0, 0, 242, 249, 5, 18, 0, 0, 243, 244, 7, 0, 0, 0, 244, 245, 5, 220, 0, 0, 245, 246, 3, 72, 36, 0, 246, 247, 5, 236, 0, 0, 247, 250, 1, 0, 0, 0, 248, 250, 3, 72, 36, 0, 249, 243, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 23, 1, 0, 0, 0, 251, 252, 5, 74, 0, 0, 252, 253, 3, 74, 37, 0, 253, 25, 1, 0, 0, 0, 254, 255, 5, 122, 0, 0, 255, 256, 5, 18, 0, 0, 256, 257, 3, 46, 23, 0, 257, 27, 1, 0, 0, 0, 258, 259, 5, 122, 0, 0, 259, 260, 5, 18, 0, 0, 260, 261, 3, 72, 36, 0, 261, 29, 1, 0, 0, 0, 262, 263, 5, 99, 0, 0, 263, 266, 3, 74, 37, 0, 264, 265, 5, 206, 0, 0, 265, 267, 3, 74, 37, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 272, 1, 0, 0, 0, 268, 269, 5, 189, 0, 0, 269, 273, 5, 164, 0, 0, 270, 271, 5, 18, 0, 0, 271, 273, 3, 72, 36, 0, 272, 268, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 292, 1, 0, 0, 0, 274, 275, 5, 99, 0, 0, 275, 278, 3, 74, 37, 0, 276, 277, 5, 189, 0, 0, 277, 279, 5, 164, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 5, 118, 0, 0, 281, 282, 3, 74, 37, 0, 282, 292, 1, 0, 0, 0, 283, 284, 5, 99, 0, 0, 284, 285, 3, 74, 37, 0, 285, 286, 5, 118, 0, 0, 286, 289, 3, 74, 37, 0, 287, 288, 5, 18, 0, 0, 288, 290, 3, 72, 36, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 262, 1, 0, 0, 0, 291, 274, 1, 0, 0, 0, 291, 283, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 5, 118, 0, 0, 294, 295, 3, 74, 37, 0, 295, 33, 1, 0, 0, 0, 296, 297, 5, 150, 0, 0, 297, 298, 3, 52, 26, 0, 298, 35, 1, 0, 0, 0, 299, 300, 6, 18, -1, 0, 300, 302, 3, 94, 47, 0, 301, 303, 5, 61, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 305, 1, 0, 0, 0, 304, 306, 3, 44, 22, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 312, 1, 0, 0, 0, 307, 308, 5, 220, 0, 0, 308, 309, 3, 36, 18, 0, 309, 310, 5, 236, 0, 0, 310, 312, 1, 0, 0, 0, 311, 299, 1, 0, 0, 0, 311, 307, 1, 0, 0, 0, 312, 327, 1, 0, 0, 0, 313, 314, 10, 3, 0, 0, 314, 315, 3, 40, 20, 0, 315, 316, 3, 36, 18, 4, 316, 326, 1, 0, 0, 0, 317, 319, 10, 4, 0, 0, 318, 320, 3, 38, 19, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 90, 0, 0, 322, 323, 3, 36, 18, 0, 323, 324, 3, 42, 21, 0, 324, 326, 1, 0, 0, 0, 325, 313, 1, 0, 0, 0, 325, 317, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 37, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 340, 5, 84, 0, 0, 334, 336, 5, 84, 0, 0, 335, 337, 7, 2, 0, 0, 336, 335, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 340, 1, 0, 0, 0, 338, 340, 7, 2, 0, 0, 339, 331, 1, 0, 0, 0, 339, 334, 1, 0, 0, 0, 339, 338, 1, 0, 0, 0, 340, 374, 1, 0, 0, 0, 341, 343, 7, 3, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 7, 4, 0, 0, 345, 347, 5, 123, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 356, 1, 0, 0, 0, 348, 350, 7, 4, 0, 0, 349, 351, 5, 123, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 353, 1, 0, 0, 0, 352, 354, 7, 3, 0, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 356, 1, 0, 0, 0, 355, 342, 1, 0, 0, 0, 355, 348, 1, 0, 0, 0, 356, 374, 1, 0, 0, 0, 357, 359, 7, 5, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 362, 5, 69, 0, 0, 361, 363, 5, 123, 0, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 372, 1, 0, 0, 0, 364, 366, 5, 69, 0, 0, 365, 367, 5, 123, 0, 0, 366, 365, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 370, 7, 5, 0, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 358, 1, 0, 0, 0, 371, 364, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 339, 1, 0, 0, 0, 373, 355, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 39, 1, 0, 0, 0, 375, 376, 5, 31, 0, 0, 376, 379, 5, 90, 0, 0, 377, 379, 5, 206, 0, 0, 378, 375, 1, 0, 0, 0, 378, 377, 1, 0, 0, 0, 379, 41, 1, 0, 0, 0, 380, 381, 5, 119, 0, 0, 381, 390, 3, 72, 36, 0, 382, 383, 5, 179, 0, 0, 383, 384, 5, 220, 0, 0, 384, 385, 3, 72, 36, 0, 385, 386, 5, 236, 0, 0, 386, 390, 1, 0, 0, 0, 387, 388, 5, 179, 0, 0, 388, 390, 3, 72, 36, 0, 389, 380, 1, 0, 0, 0, 389, 382, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 43, 1, 0, 0, 0, 391, 392, 5, 144, 0, 0, 392, 395, 3, 50, 25, 0, 393, 394, 5, 118, 0, 0, 394, 396, 3, 50, 25, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 45, 1, 0, 0, 0, 397, 402, 3, 48, 24, 0, 398, 399, 5, 206, 0, 0, 399, 401, 3, 48, 24, 0, 400, 398, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 47, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 407, 3, 74, 37, 0, 406, 408, 7, 6, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 117, 0, 0, 410, 412, 7, 7, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 26, 0, 0, 414, 416, 5, 200, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 49, 1, 0, 0, 0, 417, 424, 3, 122, 61, 0, 418, 421, 3, 106, 53, 0, 419, 420, 5, 238, 0, 0, 420, 422, 3, 106, 53, 0, 421, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 417, 1, 0, 0, 0, 423, 418, 1, 0, 0, 0, 424, 51, 1, 0, 0, 0, 425, 430, 3, 54, 27, 0, 426, 427, 5, 206, 0, 0, 427, 429, 3, 54, 27, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 53, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 434, 3, 118, 59, 0, 434, 435, 5, 212, 0, 0, 435, 436, 3, 108, 54, 0, 436, 55, 1, 0, 0, 0, 437, 439, 3, 58, 29, 0, 438, 437, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 441, 1, 0, 0, 0, 440, 442, 3, 60, 30, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 1, 0, 0, 0, 443, 445, 3, 62, 31, 0, 444, 443, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 57, 1, 0, 0, 0, 446, 447, 5, 126, 0, 0, 447, 448, 5, 18, 0, 0, 448, 449, 3, 72, 36, 0, 449, 59, 1, 0, 0, 0, 450, 451, 5, 122, 0, 0, 451, 452, 5, 18, 0, 0, 452, 453, 3, 46, 23, 0, 453, 61, 1, 0, 0, 0, 454, 455, 7, 8, 0, 0, 455, 456, 3, 64, 32, 0, 456, 63, 1, 0, 0, 0, 457, 464, 3, 66, 33, 0, 458, 459, 5, 16, 0, 0, 459, 460, 3, 66, 33, 0, 460, 461, 5, 6, 0, 0, 461, 462, 3, 66, 33, 0, 462, 464, 1, 0, 0, 0, 463, 457, 1, 0, 0, 0, 463, 458, 1, 0, 0, 0, 464, 65, 1, 0, 0, 0, 465, 466, 5, 33, 0, 0, 466, 478, 5, 142, 0, 0, 467, 468, 5, 175, 0, 0, 468, 478, 5, 128, 0, 0, 469, 470, 5, 175, 0, 0, 470, 478, 5, 64, 0, 0, 471, 472, 3, 106, 53, 0, 472, 473, 5, 128, 0, 0, 473, 478, 1, 0, 0, 0, 474, 475, 3, 106, 53, 0, 475, 476, 5, 64, 0, 0, 476, 478, 1, 0, 0, 0, 477, 465, 1, 0, 0, 0, 477, 467, 1, 0, 0, 0, 477, 469, 1, 0, 0, 0, 477, 471, 1, 0, 0, 0, 477, 474, 1, 0, 0, 0, 478, 67, 1, 0, 0, 0, 479, 480, 3, 74, 37, 0, 480, 481, 5, 0, 0, 1, 481, 69, 1, 0, 0, 0, 482, 530, 3, 118, 59, 0, 483, 484, 3, 118, 59, 0, 484, 485, 5, 220, 0, 0, 485, 486, 3, 118, 59, 0, 486, 493, 3, 70, 35, 0, 487, 488, 5, 206, 0, 0, 488, 489, 3, 118, 59, 0, 489, 490, 3, 70, 35, 0, 490, 492, 1, 0, 0, 0, 491, 487, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 496, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 496, 497, 5, 236, 0, 0, 497, 530, 1, 0, 0, 0, 498, 499, 3, 118, 59, 0, 499, 500, 5, 220, 0, 0, 500, 505, 3, 120, 60, 0, 501, 502, 5, 206, 0, 0, 502, 504, 3, 120, 60, 0, 503, 501, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 508, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 5, 236, 0, 0, 509, 530, 1, 0, 0, 0, 510, 511, 3, 118, 59, 0, 511, 512, 5, 220, 0, 0, 512, 517, 3, 70, 35, 0, 513, 514, 5, 206, 0, 0, 514, 516, 3, 70, 35, 0, 515, 513, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 5, 236, 0, 0, 521, 530, 1, 0, 0, 0, 522, 523, 3, 118, 59, 0, 523, 525, 5, 220, 0, 0, 524, 526, 3, 72, 36, 0, 525, 524, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 5, 236, 0, 0, 528, 530, 1, 0, 0, 0, 529, 482, 1, 0, 0, 0, 529, 483, 1, 0, 0, 0, 529, 498, 1, 0, 0, 0, 529, 510, 1, 0, 0, 0, 529, 522, 1, 0, 0, 0, 530, 71, 1, 0, 0, 0, 531, 536, 3, 74, 37, 0, 532, 533, 5, 206, 0, 0, 533, 535, 3, 74, 37, 0, 534, 532, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 73, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 6, 37, -1, 0, 540, 542, 5, 19, 0, 0, 541, 543, 3, 74, 37, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 549, 1, 0, 0, 0, 544, 545, 5, 186, 0, 0, 545, 546, 3, 74, 37, 0, 546, 547, 5, 163, 0, 0, 547, 548, 3, 74, 37, 0, 548, 550, 1, 0, 0, 0, 549, 544, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 555, 1, 0, 0, 0, 553, 554, 5, 52, 0, 0, 554, 556, 3, 74, 37, 0, 555, 553, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 5, 53, 0, 0, 558, 670, 1, 0, 0, 0, 559, 560, 5, 20, 0, 0, 560, 561, 5, 220, 0, 0, 561, 562, 3, 74, 37, 0, 562, 563, 5, 10, 0, 0, 563, 564, 3, 70, 35, 0, 564, 565, 5, 236, 0, 0, 565, 670, 1, 0, 0, 0, 566, 567, 5, 36, 0, 0, 567, 670, 5, 200, 0, 0, 568, 569, 5, 59, 0, 0, 569, 570, 5, 220, 0, 0, 570, 571, 3, 110, 55, 0, 571, 572, 5, 68, 0, 0, 572, 573, 3, 74, 37, 0, 573, 574, 5, 236, 0, 0, 574, 670, 1, 0, 0, 0, 575, 576, 5, 86, 0, 0, 576, 577, 3, 74, 37, 0, 577, 578, 3, 110, 55, 0, 578, 670, 1, 0, 0, 0, 579, 580, 5, 155, 0, 0, 580, 581, 5, 220, 0, 0, 581, 582, 3, 74, 37, 0, 582, 583, 5, 68, 0, 0, 583, 586, 3, 74, 37, 0, 584, 585, 5, 65, 0, 0, 585, 587, 3, 74, 37, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 589, 5, 236, 0, 0, 589, 670, 1, 0, 0, 0, 590, 591, 5, 166, 0, 0, 591, 670, 5, 200, 0, 0, 592, 593, 5, 171, 0, 0, 593, 594, 5, 220, 0, 0, 594, 595, 7, 9, 0, 0, 595, 596, 5, 200, 0, 0, 596, 597, 5, 68, 0, 0, 597, 598, 3, 74, 37, 0, 598, 599, 5, 236, 0, 0, 599, 670, 1, 0, 0, 0, 600, 601, 3, 118, 59, 0, 601, 603, 5, 220, 0, 0, 602, 604, 3, 72, 36, 0, 603, 602, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 5, 236, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 5, 125, 0, 0, 608, 609, 5, 220, 0, 0, 609, 610, 3, 56, 28, 0, 610, 611, 5, 236, 0, 0, 611, 670, 1, 0, 0, 0, 612, 613, 3, 118, 59, 0, 613, 615, 5, 220, 0, 0, 614, 616, 3, 72, 36, 0, 615, 614, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 5, 236, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 5, 125, 0, 0, 620, 621, 3, 118, 59, 0, 621, 670, 1, 0, 0, 0, 622, 628, 3, 118, 59, 0, 623, 625, 5, 220, 0, 0, 624, 626, 3, 72, 36, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 5, 236, 0, 0, 628, 623, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 5, 220, 0, 0, 631, 633, 5, 49, 0, 0, 632, 631, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 635, 1, 0, 0, 0, 634, 636, 3, 76, 38, 0, 635, 634, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 5, 236, 0, 0, 638, 670, 1, 0, 0, 0, 639, 670, 3, 82, 41, 0, 640, 670, 3, 108, 54, 0, 641, 642, 5, 208, 0, 0, 642, 670, 3, 74, 37, 18, 643, 644, 5, 115, 0, 0, 644, 670, 3, 74, 37, 12, 645, 646, 3, 98, 49, 0, 646, 647, 5, 210, 0, 0, 647, 649, 1, 0, 0, 0, 648, 645, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 670, 5, 202, 0, 0, 651, 652, 5, 220, 0, 0, 652, 653, 3, 2, 1, 0, 653, 654, 5, 236, 0, 0, 654, 670, 1, 0, 0, 0, 655, 656, 5, 220, 0, 0, 656, 657, 3, 74, 37, 0, 657, 658, 5, 236, 0, 0, 658, 670, 1, 0, 0, 0, 659, 660, 5, 220, 0, 0, 660, 661, 3, 72, 36, 0, 661, 662, 5, 236, 0, 0, 662, 670, 1, 0, 0, 0, 663, 665, 5, 219, 0, 0, 664, 666, 3, 72, 36, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 670, 5, 235, 0, 0, 668, 670, 3, 90, 45, 0, 669, 539, 1, 0, 0, 0, 669, 559, 1, 0, 0, 0, 669, 566, 1, 0, 0, 0, 669, 568, 1, 0, 0, 0, 669, 575, 1, 0, 0, 0, 669, 579, 1, 0, 0, 0, 669, 590, 1, 0, 0, 0, 669, 592, 1, 0, 0, 0, 669, 600, 1, 0, 0, 0, 669, 612, 1, 0, 0, 0, 669, 622, 1, 0, 0, 0, 669, 639, 1, 0, 0, 0, 669, 640, 1, 0, 0, 0, 669, 641, 1, 0, 0, 0, 669, 643, 1, 0, 0, 0, 669, 648, 1, 0, 0, 0, 669, 651, 1, 0, 0, 0, 669, 655, 1, 0, 0, 0, 669, 659, 1, 0, 0, 0, 669, 663, 1, 0, 0, 0, 669, 668, 1, 0, 0, 0, 670, 764, 1, 0, 0, 0, 671, 675, 10, 17, 0, 0, 672, 676, 5, 202, 0, 0, 673, 676, 5, 238, 0, 0, 674, 676, 5, 227, 0, 0, 675, 672, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 763, 3, 74, 37, 18, 678, 682, 10, 16, 0, 0, 679, 683, 5, 228, 0, 0, 680, 683, 5, 208, 0, 0, 681, 683, 5, 207, 0, 0, 682, 679, 1, 0, 0, 0, 682, 680, 1, 0, 0, 0, 682, 681, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 763, 3, 74, 37, 17, 685, 710, 10, 15, 0, 0, 686, 711, 5, 211, 0, 0, 687, 711, 5, 212, 0, 0, 688, 711, 5, 223, 0, 0, 689, 711, 5, 221, 0, 0, 690, 711, 5, 222, 0, 0, 691, 711, 5, 213, 0, 0, 692, 711, 5, 214, 0, 0, 693, 695, 5, 115, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 5, 80, 0, 0, 697, 699, 5, 25, 0, 0, 698, 697, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 711, 1, 0, 0, 0, 700, 702, 5, 115, 0, 0, 701, 700, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 711, 7, 10, 0, 0, 704, 711, 5, 232, 0, 0, 705, 711, 5, 233, 0, 0, 706, 711, 5, 225, 0, 0, 707, 711, 5, 216, 0, 0, 708, 711, 5, 217, 0, 0, 709, 711, 5, 224, 0, 0, 710, 686, 1, 0, 0, 0, 710, 687, 1, 0, 0, 0, 710, 688, 1, 0, 0, 0, 710, 689, 1, 0, 0, 0, 710, 690, 1, 0, 0, 0, 710, 691, 1, 0, 0, 0, 710, 692, 1, 0, 0, 0, 710, 694, 1, 0, 0, 0, 710, 701, 1, 0, 0, 0, 710, 704, 1, 0, 0, 0, 710, 705, 1, 0, 0, 0, 710, 706, 1, 0, 0, 0, 710, 707, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 709, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 763, 3, 74, 37, 16, 713, 714, 10, 13, 0, 0, 714, 715, 5, 226, 0, 0, 715, 763, 3, 74, 37, 14, 716, 717, 10, 11, 0, 0, 717, 718, 5, 6, 0, 0, 718, 763, 3, 74, 37, 12, 719, 720, 10, 10, 0, 0, 720, 721, 5, 121, 0, 0, 721, 763, 3, 74, 37, 11, 722, 724, 10, 9, 0, 0, 723, 725, 5, 115, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 5, 16, 0, 0, 727, 728, 3, 74, 37, 0, 728, 729, 5, 6, 0, 0, 729, 730, 3, 74, 37, 10, 730, 763, 1, 0, 0, 0, 731, 732, 10, 8, 0, 0, 732, 733, 5, 229, 0, 0, 733, 734, 3, 74, 37, 0, 734, 735, 5, 205, 0, 0, 735, 736, 3, 74, 37, 8, 736, 763, 1, 0, 0, 0, 737, 738, 10, 21, 0, 0, 738, 739, 5, 219, 0, 0, 739, 740, 3, 74, 37, 0, 740, 741, 5, 235, 0, 0, 741, 763, 1, 0, 0, 0, 742, 743, 10, 20, 0, 0, 743, 744, 5, 210, 0, 0, 744, 763, 5, 198, 0, 0, 745, 746, 10, 19, 0, 0, 746, 747, 5, 210, 0, 0, 747, 763, 3, 118, 59, 0, 748, 749, 10, 14, 0, 0, 749, 751, 5, 88, 0, 0, 750, 752, 5, 115, 0, 0, 751, 750, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 763, 5, 116, 0, 0, 754, 760, 10, 7, 0, 0, 755, 761, 3, 116, 58, 0, 756, 757, 5, 10, 0, 0, 757, 761, 3, 118, 59, 0, 758, 759, 5, 10, 0, 0, 759, 761, 5, 200, 0, 0, 760, 755, 1, 0, 0, 0, 760, 756, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 763, 1, 0, 0, 0, 762, 671, 1, 0, 0, 0, 762, 678, 1, 0, 0, 0, 762, 685, 1, 0, 0, 0, 762, 713, 1, 0, 0, 0, 762, 716, 1, 0, 0, 0, 762, 719, 1, 0, 0, 0, 762, 722, 1, 0, 0, 0, 762, 731, 1, 0, 0, 0, 762, 737, 1, 0, 0, 0, 762, 742, 1, 0, 0, 0, 762, 745, 1, 0, 0, 0, 762, 748, 1, 0, 0, 0, 762, 754, 1, 0, 0, 0, 763, 766, 1, 0, 0, 0, 764, 762, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 75, 1, 0, 0, 0, 766, 764, 1, 0, 0, 0, 767, 772, 3, 78, 39, 0, 768, 769, 5, 206, 0, 0, 769, 771, 3, 78, 39, 0, 770, 768, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 77, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 775, 778, 3, 80, 40, 0, 776, 778, 3, 74, 37, 0, 777, 775, 1, 0, 0, 0, 777, 776, 1, 0, 0, 0, 778, 79, 1, 0, 0, 0, 779, 780, 5, 220, 0, 0, 780, 785, 3, 118, 59, 0, 781, 782, 5, 206, 0, 0, 782, 784, 3, 118, 59, 0, 783, 781, 1, 0, 0, 0, 784, 787, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 788, 789, 5, 236, 0, 0, 789, 799, 1, 0, 0, 0, 790, 795, 3, 118, 59, 0, 791, 792, 5, 206, 0, 0, 792, 794, 3, 118, 59, 0, 793, 791, 1, 0, 0, 0, 794, 797, 1, 0, 0, 0, 795, 793, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 799, 1, 0, 0, 0, 797, 795, 1, 0, 0, 0, 798, 779, 1, 0, 0, 0, 798, 790, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 801, 5, 201, 0, 0, 801, 802, 3, 74, 37, 0, 802, 81, 1, 0, 0, 0, 803, 804, 5, 222, 0, 0, 804, 808, 3, 118, 59, 0, 805, 807, 3, 84, 42, 0, 806, 805, 1, 0, 0, 0, 807, 810, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 811, 1, 0, 0, 0, 810, 808, 1, 0, 0, 0, 811, 812, 5, 238, 0, 0, 812, 813, 5, 214, 0, 0, 813, 832, 1, 0, 0, 0, 814, 815, 5, 222, 0, 0, 815, 819, 3, 118, 59, 0, 816, 818, 3, 84, 42, 0, 817, 816, 1, 0, 0, 0, 818, 821, 1, 0, 0, 0, 819, 817, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 1, 0, 0, 0, 821, 819, 1, 0, 0, 0, 822, 824, 5, 214, 0, 0, 823, 825, 3, 82, 41, 0, 824, 823, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 827, 5, 222, 0, 0, 827, 828, 5, 238, 0, 0, 828, 829, 3, 118, 59, 0, 829, 830, 5, 214, 0, 0, 830, 832, 1, 0, 0, 0, 831, 803, 1, 0, 0, 0, 831, 814, 1, 0, 0, 0, 832, 83, 1, 0, 0, 0, 833, 834, 3, 118, 59, 0, 834, 835, 5, 212, 0, 0, 835, 836, 5, 200, 0, 0, 836, 845, 1, 0, 0, 0, 837, 838, 3, 118, 59, 0, 838, 839, 5, 212, 0, 0, 839, 840, 5, 218, 0, 0, 840, 841, 3, 74, 37, 0, 841, 842, 5, 234, 0, 0, 842, 845, 1, 0, 0, 0, 843, 845, 3, 118, 59, 0, 844, 833, 1, 0, 0, 0, 844, 837, 1, 0, 0, 0, 844, 843, 1, 0, 0, 0, 845, 85, 1, 0, 0, 0, 846, 851, 3, 88, 44, 0, 847, 848, 5, 206, 0, 0, 848, 850, 3, 88, 44, 0, 849, 847, 1, 0, 0, 0, 850, 853, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 87, 1, 0, 0, 0, 853, 851, 1, 0, 0, 0, 854, 855, 3, 118, 59, 0, 855, 856, 5, 10, 0, 0, 856, 857, 5, 220, 0, 0, 857, 858, 3, 2, 1, 0, 858, 859, 5, 236, 0, 0, 859, 865, 1, 0, 0, 0, 860, 861, 3, 74, 37, 0, 861, 862, 5, 10, 0, 0, 862, 863, 3, 118, 59, 0, 863, 865, 1, 0, 0, 0, 864, 854, 1, 0, 0, 0, 864, 860, 1, 0, 0, 0, 865, 89, 1, 0, 0, 0, 866, 874, 3, 122, 61, 0, 867, 868, 3, 98, 49, 0, 868, 869, 5, 210, 0, 0, 869, 871, 1, 0, 0, 0, 870, 867, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 3, 92, 46, 0, 873, 866, 1, 0, 0, 0, 873, 870, 1, 0, 0, 0, 874, 91, 1, 0, 0, 0, 875, 880, 3, 118, 59, 0, 876, 877, 5, 210, 0, 0, 877, 879, 3, 118, 59, 0, 878, 876, 1, 0, 0, 0, 879, 882, 1, 0, 0, 0, 880, 878, 1, 0, 0, 0, 880, 881, 1, 0, 0, 0, 881, 93, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 883, 884, 6, 47, -1, 0, 884, 893, 3, 98, 49, 0, 885, 893, 3, 96, 48, 0, 886, 887, 5, 220, 0, 0, 887, 888, 3, 2, 1, 0, 888, 889, 5, 236, 0, 0, 889, 893, 1, 0, 0, 0, 890, 893, 3, 82, 41, 0, 891, 893, 3, 122, 61, 0, 892, 883, 1, 0, 0, 0, 892, 885, 1, 0, 0, 0, 892, 886, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 891, 1, 0, 0, 0, 893, 902, 1, 0, 0, 0, 894, 898, 10, 3, 0, 0, 895, 899, 3, 116, 58, 0, 896, 897, 5, 10, 0, 0, 897, 899, 3, 118, 59, 0, 898, 895, 1, 0, 0, 0, 898, 896, 1, 0, 0, 0, 899, 901, 1, 0, 0, 0, 900, 894, 1, 0, 0, 0, 901, 904, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 95, 1, 0, 0, 0, 904, 902, 1, 0, 0, 0, 905, 906, 3, 118, 59, 0, 906, 908, 5, 220, 0, 0, 907, 909, 3, 100, 50, 0, 908, 907, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 5, 236, 0, 0, 911, 97, 1, 0, 0, 0, 912, 913, 3, 102, 51, 0, 913, 914, 5, 210, 0, 0, 914, 916, 1, 0, 0, 0, 915, 912, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 918, 3, 118, 59, 0, 918, 99, 1, 0, 0, 0, 919, 924, 3, 74, 37, 0, 920, 921, 5, 206, 0, 0, 921, 923, 3, 74, 37, 0, 922, 920, 1, 0, 0, 0, 923, 926, 1, 0, 0, 0, 924, 922, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 101, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 927, 928, 3, 118, 59, 0, 928, 103, 1, 0, 0, 0, 929, 938, 5, 196, 0, 0, 930, 931, 5, 210, 0, 0, 931, 938, 7, 11, 0, 0, 932, 933, 5, 198, 0, 0, 933, 935, 5, 210, 0, 0, 934, 936, 7, 11, 0, 0, 935, 934, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 929, 1, 0, 0, 0, 937, 930, 1, 0, 0, 0, 937, 932, 1, 0, 0, 0, 938, 105, 1, 0, 0, 0, 939, 941, 7, 12, 0, 0, 940, 939, 1, 0, 0, 0, 940, 941, 1, 0, 0, 0, 941, 948, 1, 0, 0, 0, 942, 949, 3, 104, 52, 0, 943, 949, 5, 197, 0, 0, 944, 949, 5, 198, 0, 0, 945, 949, 5, 199, 0, 0, 946, 949, 5, 82, 0, 0, 947, 949, 5, 113, 0, 0, 948, 942, 1, 0, 0, 0, 948, 943, 1, 0, 0, 0, 948, 944, 1, 0, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 107, 1, 0, 0, 0, 950, 954, 3, 106, 53, 0, 951, 954, 5, 200, 0, 0, 952, 954, 5, 116, 0, 0, 953, 950, 1, 0, 0, 0, 953, 951, 1, 0, 0, 0, 953, 952, 1, 0, 0, 0, 954, 109, 1, 0, 0, 0, 955, 956, 7, 13, 0, 0, 956, 111, 1, 0, 0, 0, 957, 958, 7, 14, 0, 0, 958, 113, 1, 0, 0, 0, 959, 960, 7, 15, 0, 0, 960, 115, 1, 0, 0, 0, 961, 964, 5, 195, 0, 0, 962, 964, 3, 114, 57, 0, 963, 961, 1, 0, 0, 0, 963, 962, 1, 0, 0, 0, 964, 117, 1, 0, 0, 0, 965, 969, 5, 195, 0, 0, 966, 969, 3, 110, 55, 0, 967, 969, 3, 112, 56, 0, 968, 965, 1, 0, 0, 0, 968, 966, 1, 0, 0, 0, 968, 967, 1, 0, 0, 0, 969, 119, 1, 0, 0, 0, 970, 971, 5, 200, 0, 0, 971, 972, 5, 212, 0, 0, 972, 973, 3, 106, 53, 0, 973, 121, 1, 0, 0, 0, 974, 975, 5, 218, 0, 0, 975, 976, 3, 118, 59, 0, 976, 977, 5, 234, 0, 0, 977, 123, 1, 0, 0, 0, 120, 127, 137, 146, 149, 153, 156, 160, 163, 166, 169, 172, 176, 180, 183, 186, 189, 193, 196, 205, 211, 232, 249, 266, 272, 278, 289, 291, 302, 305, 311, 319, 325, 327, 331, 336, 339, 342, 346, 350, 353, 355, 358, 362, 366, 369, 371, 373, 378, 389, 395, 402, 407, 411, 415, 421, 423, 430, 438, 441, 444, 463, 477, 493, 505, 517, 525, 529, 536, 542, 551, 555, 586, 603, 615, 625, 628, 632, 635, 648, 665, 669, 675, 682, 694, 698, 701, 710, 724, 751, 760, 762, 764, 772, 777, 785, 795, 798, 808, 819, 824, 831, 844, 851, 864, 870, 873, 880, 892, 898, 902, 908, 915, 924, 935, 937, 940, 948, 953, 963, 968] \ No newline at end of file +[4, 1, 242, 972, 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, 1, 0, 1, 0, 1, 0, 3, 0, 128, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 136, 8, 1, 10, 1, 12, 1, 139, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 147, 8, 2, 1, 3, 3, 3, 150, 8, 3, 1, 3, 1, 3, 3, 3, 154, 8, 3, 1, 3, 3, 3, 157, 8, 3, 1, 3, 1, 3, 3, 3, 161, 8, 3, 1, 3, 3, 3, 164, 8, 3, 1, 3, 3, 3, 167, 8, 3, 1, 3, 3, 3, 170, 8, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 1, 3, 3, 3, 177, 8, 3, 1, 3, 1, 3, 3, 3, 181, 8, 3, 1, 3, 3, 3, 184, 8, 3, 1, 3, 3, 3, 187, 8, 3, 1, 3, 3, 3, 190, 8, 3, 1, 3, 1, 3, 3, 3, 194, 8, 3, 1, 3, 3, 3, 197, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 206, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 212, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 231, 8, 8, 10, 8, 12, 8, 234, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 250, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 267, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 273, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 279, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 290, 8, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 3, 18, 306, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 320, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 326, 8, 18, 10, 18, 12, 18, 329, 9, 18, 1, 19, 3, 19, 332, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 337, 8, 19, 1, 19, 3, 19, 340, 8, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 1, 19, 3, 19, 347, 8, 19, 1, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 3, 19, 354, 8, 19, 3, 19, 356, 8, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 1, 19, 3, 19, 363, 8, 19, 1, 19, 1, 19, 3, 19, 367, 8, 19, 1, 19, 3, 19, 370, 8, 19, 3, 19, 372, 8, 19, 3, 19, 374, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 379, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 390, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 396, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 401, 8, 23, 10, 23, 12, 23, 404, 9, 23, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 422, 8, 25, 3, 25, 424, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 429, 8, 26, 10, 26, 12, 26, 432, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 439, 8, 28, 1, 28, 3, 28, 442, 8, 28, 1, 28, 3, 28, 445, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 464, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 478, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 492, 8, 35, 10, 35, 12, 35, 495, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 504, 8, 35, 10, 35, 12, 35, 507, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 516, 8, 35, 10, 35, 12, 35, 519, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 526, 8, 35, 1, 35, 1, 35, 3, 35, 530, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 535, 8, 36, 10, 36, 12, 36, 538, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 543, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 550, 8, 37, 11, 37, 12, 37, 551, 1, 37, 1, 37, 3, 37, 556, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 580, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 597, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 609, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 619, 8, 37, 1, 37, 3, 37, 622, 8, 37, 1, 37, 1, 37, 3, 37, 626, 8, 37, 1, 37, 3, 37, 629, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 642, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 659, 8, 37, 1, 37, 1, 37, 3, 37, 663, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 669, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 676, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 688, 8, 37, 1, 37, 1, 37, 3, 37, 692, 8, 37, 1, 37, 3, 37, 695, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 704, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 718, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 745, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 754, 8, 37, 5, 37, 756, 8, 37, 10, 37, 12, 37, 759, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 764, 8, 38, 10, 38, 12, 38, 767, 9, 38, 1, 39, 1, 39, 3, 39, 771, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 777, 8, 40, 10, 40, 12, 40, 780, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 787, 8, 40, 10, 40, 12, 40, 790, 9, 40, 3, 40, 792, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 800, 8, 41, 10, 41, 12, 41, 803, 9, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 811, 8, 41, 10, 41, 12, 41, 814, 9, 41, 1, 41, 1, 41, 3, 41, 818, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 825, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 838, 8, 42, 1, 43, 1, 43, 1, 43, 5, 43, 843, 8, 43, 10, 43, 12, 43, 846, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 858, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 864, 8, 45, 1, 45, 3, 45, 867, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 872, 8, 46, 10, 46, 12, 46, 875, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 886, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 892, 8, 47, 5, 47, 894, 8, 47, 10, 47, 12, 47, 897, 9, 47, 1, 48, 1, 48, 1, 48, 3, 48, 902, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 49, 909, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 916, 8, 50, 10, 50, 12, 50, 919, 9, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 929, 8, 52, 3, 52, 931, 8, 52, 1, 53, 3, 53, 934, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 942, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 947, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 957, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 962, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 0, 3, 36, 74, 94, 62, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 197, 198, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1099, 0, 127, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 6, 149, 1, 0, 0, 0, 8, 198, 1, 0, 0, 0, 10, 201, 1, 0, 0, 0, 12, 207, 1, 0, 0, 0, 14, 211, 1, 0, 0, 0, 16, 217, 1, 0, 0, 0, 18, 235, 1, 0, 0, 0, 20, 238, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 251, 1, 0, 0, 0, 26, 254, 1, 0, 0, 0, 28, 258, 1, 0, 0, 0, 30, 291, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 296, 1, 0, 0, 0, 36, 311, 1, 0, 0, 0, 38, 373, 1, 0, 0, 0, 40, 378, 1, 0, 0, 0, 42, 389, 1, 0, 0, 0, 44, 391, 1, 0, 0, 0, 46, 397, 1, 0, 0, 0, 48, 405, 1, 0, 0, 0, 50, 423, 1, 0, 0, 0, 52, 425, 1, 0, 0, 0, 54, 433, 1, 0, 0, 0, 56, 438, 1, 0, 0, 0, 58, 446, 1, 0, 0, 0, 60, 450, 1, 0, 0, 0, 62, 454, 1, 0, 0, 0, 64, 463, 1, 0, 0, 0, 66, 477, 1, 0, 0, 0, 68, 479, 1, 0, 0, 0, 70, 529, 1, 0, 0, 0, 72, 531, 1, 0, 0, 0, 74, 662, 1, 0, 0, 0, 76, 760, 1, 0, 0, 0, 78, 770, 1, 0, 0, 0, 80, 791, 1, 0, 0, 0, 82, 824, 1, 0, 0, 0, 84, 837, 1, 0, 0, 0, 86, 839, 1, 0, 0, 0, 88, 857, 1, 0, 0, 0, 90, 866, 1, 0, 0, 0, 92, 868, 1, 0, 0, 0, 94, 885, 1, 0, 0, 0, 96, 898, 1, 0, 0, 0, 98, 908, 1, 0, 0, 0, 100, 912, 1, 0, 0, 0, 102, 920, 1, 0, 0, 0, 104, 930, 1, 0, 0, 0, 106, 933, 1, 0, 0, 0, 108, 946, 1, 0, 0, 0, 110, 948, 1, 0, 0, 0, 112, 950, 1, 0, 0, 0, 114, 952, 1, 0, 0, 0, 116, 956, 1, 0, 0, 0, 118, 961, 1, 0, 0, 0, 120, 963, 1, 0, 0, 0, 122, 967, 1, 0, 0, 0, 124, 128, 3, 2, 1, 0, 125, 128, 3, 6, 3, 0, 126, 128, 3, 82, 41, 0, 127, 124, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 5, 0, 0, 1, 130, 1, 1, 0, 0, 0, 131, 137, 3, 4, 2, 0, 132, 133, 5, 176, 0, 0, 133, 134, 5, 4, 0, 0, 134, 136, 3, 4, 2, 0, 135, 132, 1, 0, 0, 0, 136, 139, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 147, 3, 6, 3, 0, 141, 142, 5, 220, 0, 0, 142, 143, 3, 2, 1, 0, 143, 144, 5, 236, 0, 0, 144, 147, 1, 0, 0, 0, 145, 147, 3, 122, 61, 0, 146, 140, 1, 0, 0, 0, 146, 141, 1, 0, 0, 0, 146, 145, 1, 0, 0, 0, 147, 5, 1, 0, 0, 0, 148, 150, 3, 8, 4, 0, 149, 148, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 153, 5, 146, 0, 0, 152, 154, 5, 49, 0, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 156, 1, 0, 0, 0, 155, 157, 3, 10, 5, 0, 156, 155, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 160, 3, 72, 36, 0, 159, 161, 3, 12, 6, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 164, 3, 14, 7, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 167, 3, 18, 9, 0, 166, 165, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 170, 3, 20, 10, 0, 169, 168, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 173, 3, 22, 11, 0, 172, 171, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 175, 5, 189, 0, 0, 175, 177, 7, 0, 0, 0, 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 179, 5, 189, 0, 0, 179, 181, 5, 169, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 183, 1, 0, 0, 0, 182, 184, 3, 24, 12, 0, 183, 182, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 187, 3, 16, 8, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 1, 0, 0, 0, 188, 190, 3, 26, 13, 0, 189, 188, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 194, 3, 30, 15, 0, 192, 194, 3, 32, 16, 0, 193, 191, 1, 0, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 196, 1, 0, 0, 0, 195, 197, 3, 34, 17, 0, 196, 195, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 7, 1, 0, 0, 0, 198, 199, 5, 189, 0, 0, 199, 200, 3, 86, 43, 0, 200, 9, 1, 0, 0, 0, 201, 202, 5, 168, 0, 0, 202, 205, 5, 198, 0, 0, 203, 204, 5, 189, 0, 0, 204, 206, 5, 164, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 11, 1, 0, 0, 0, 207, 208, 5, 68, 0, 0, 208, 209, 3, 36, 18, 0, 209, 13, 1, 0, 0, 0, 210, 212, 7, 1, 0, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 5, 90, 0, 0, 215, 216, 3, 72, 36, 0, 216, 15, 1, 0, 0, 0, 217, 218, 5, 188, 0, 0, 218, 219, 3, 118, 59, 0, 219, 220, 5, 10, 0, 0, 220, 221, 5, 220, 0, 0, 221, 222, 3, 56, 28, 0, 222, 232, 5, 236, 0, 0, 223, 224, 5, 206, 0, 0, 224, 225, 3, 118, 59, 0, 225, 226, 5, 10, 0, 0, 226, 227, 5, 220, 0, 0, 227, 228, 3, 56, 28, 0, 228, 229, 5, 236, 0, 0, 229, 231, 1, 0, 0, 0, 230, 223, 1, 0, 0, 0, 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 17, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 5, 129, 0, 0, 236, 237, 3, 74, 37, 0, 237, 19, 1, 0, 0, 0, 238, 239, 5, 187, 0, 0, 239, 240, 3, 74, 37, 0, 240, 21, 1, 0, 0, 0, 241, 242, 5, 73, 0, 0, 242, 249, 5, 18, 0, 0, 243, 244, 7, 0, 0, 0, 244, 245, 5, 220, 0, 0, 245, 246, 3, 72, 36, 0, 246, 247, 5, 236, 0, 0, 247, 250, 1, 0, 0, 0, 248, 250, 3, 72, 36, 0, 249, 243, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 23, 1, 0, 0, 0, 251, 252, 5, 74, 0, 0, 252, 253, 3, 74, 37, 0, 253, 25, 1, 0, 0, 0, 254, 255, 5, 122, 0, 0, 255, 256, 5, 18, 0, 0, 256, 257, 3, 46, 23, 0, 257, 27, 1, 0, 0, 0, 258, 259, 5, 122, 0, 0, 259, 260, 5, 18, 0, 0, 260, 261, 3, 72, 36, 0, 261, 29, 1, 0, 0, 0, 262, 263, 5, 99, 0, 0, 263, 266, 3, 74, 37, 0, 264, 265, 5, 206, 0, 0, 265, 267, 3, 74, 37, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 272, 1, 0, 0, 0, 268, 269, 5, 189, 0, 0, 269, 273, 5, 164, 0, 0, 270, 271, 5, 18, 0, 0, 271, 273, 3, 72, 36, 0, 272, 268, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 292, 1, 0, 0, 0, 274, 275, 5, 99, 0, 0, 275, 278, 3, 74, 37, 0, 276, 277, 5, 189, 0, 0, 277, 279, 5, 164, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 5, 118, 0, 0, 281, 282, 3, 74, 37, 0, 282, 292, 1, 0, 0, 0, 283, 284, 5, 99, 0, 0, 284, 285, 3, 74, 37, 0, 285, 286, 5, 118, 0, 0, 286, 289, 3, 74, 37, 0, 287, 288, 5, 18, 0, 0, 288, 290, 3, 72, 36, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 262, 1, 0, 0, 0, 291, 274, 1, 0, 0, 0, 291, 283, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 5, 118, 0, 0, 294, 295, 3, 74, 37, 0, 295, 33, 1, 0, 0, 0, 296, 297, 5, 150, 0, 0, 297, 298, 3, 52, 26, 0, 298, 35, 1, 0, 0, 0, 299, 300, 6, 18, -1, 0, 300, 302, 3, 94, 47, 0, 301, 303, 5, 61, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 305, 1, 0, 0, 0, 304, 306, 3, 44, 22, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 312, 1, 0, 0, 0, 307, 308, 5, 220, 0, 0, 308, 309, 3, 36, 18, 0, 309, 310, 5, 236, 0, 0, 310, 312, 1, 0, 0, 0, 311, 299, 1, 0, 0, 0, 311, 307, 1, 0, 0, 0, 312, 327, 1, 0, 0, 0, 313, 314, 10, 3, 0, 0, 314, 315, 3, 40, 20, 0, 315, 316, 3, 36, 18, 4, 316, 326, 1, 0, 0, 0, 317, 319, 10, 4, 0, 0, 318, 320, 3, 38, 19, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 90, 0, 0, 322, 323, 3, 36, 18, 0, 323, 324, 3, 42, 21, 0, 324, 326, 1, 0, 0, 0, 325, 313, 1, 0, 0, 0, 325, 317, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 37, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 340, 5, 84, 0, 0, 334, 336, 5, 84, 0, 0, 335, 337, 7, 2, 0, 0, 336, 335, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 340, 1, 0, 0, 0, 338, 340, 7, 2, 0, 0, 339, 331, 1, 0, 0, 0, 339, 334, 1, 0, 0, 0, 339, 338, 1, 0, 0, 0, 340, 374, 1, 0, 0, 0, 341, 343, 7, 3, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 7, 4, 0, 0, 345, 347, 5, 123, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 356, 1, 0, 0, 0, 348, 350, 7, 4, 0, 0, 349, 351, 5, 123, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 353, 1, 0, 0, 0, 352, 354, 7, 3, 0, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 356, 1, 0, 0, 0, 355, 342, 1, 0, 0, 0, 355, 348, 1, 0, 0, 0, 356, 374, 1, 0, 0, 0, 357, 359, 7, 5, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 362, 5, 69, 0, 0, 361, 363, 5, 123, 0, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 372, 1, 0, 0, 0, 364, 366, 5, 69, 0, 0, 365, 367, 5, 123, 0, 0, 366, 365, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 370, 7, 5, 0, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 358, 1, 0, 0, 0, 371, 364, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 339, 1, 0, 0, 0, 373, 355, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 39, 1, 0, 0, 0, 375, 376, 5, 31, 0, 0, 376, 379, 5, 90, 0, 0, 377, 379, 5, 206, 0, 0, 378, 375, 1, 0, 0, 0, 378, 377, 1, 0, 0, 0, 379, 41, 1, 0, 0, 0, 380, 381, 5, 119, 0, 0, 381, 390, 3, 72, 36, 0, 382, 383, 5, 179, 0, 0, 383, 384, 5, 220, 0, 0, 384, 385, 3, 72, 36, 0, 385, 386, 5, 236, 0, 0, 386, 390, 1, 0, 0, 0, 387, 388, 5, 179, 0, 0, 388, 390, 3, 72, 36, 0, 389, 380, 1, 0, 0, 0, 389, 382, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 43, 1, 0, 0, 0, 391, 392, 5, 144, 0, 0, 392, 395, 3, 50, 25, 0, 393, 394, 5, 118, 0, 0, 394, 396, 3, 50, 25, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 45, 1, 0, 0, 0, 397, 402, 3, 48, 24, 0, 398, 399, 5, 206, 0, 0, 399, 401, 3, 48, 24, 0, 400, 398, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 47, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 407, 3, 74, 37, 0, 406, 408, 7, 6, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 117, 0, 0, 410, 412, 7, 7, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 26, 0, 0, 414, 416, 5, 200, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 49, 1, 0, 0, 0, 417, 424, 3, 122, 61, 0, 418, 421, 3, 106, 53, 0, 419, 420, 5, 238, 0, 0, 420, 422, 3, 106, 53, 0, 421, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 417, 1, 0, 0, 0, 423, 418, 1, 0, 0, 0, 424, 51, 1, 0, 0, 0, 425, 430, 3, 54, 27, 0, 426, 427, 5, 206, 0, 0, 427, 429, 3, 54, 27, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 53, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 434, 3, 118, 59, 0, 434, 435, 5, 212, 0, 0, 435, 436, 3, 108, 54, 0, 436, 55, 1, 0, 0, 0, 437, 439, 3, 58, 29, 0, 438, 437, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 441, 1, 0, 0, 0, 440, 442, 3, 60, 30, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 1, 0, 0, 0, 443, 445, 3, 62, 31, 0, 444, 443, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 57, 1, 0, 0, 0, 446, 447, 5, 126, 0, 0, 447, 448, 5, 18, 0, 0, 448, 449, 3, 72, 36, 0, 449, 59, 1, 0, 0, 0, 450, 451, 5, 122, 0, 0, 451, 452, 5, 18, 0, 0, 452, 453, 3, 46, 23, 0, 453, 61, 1, 0, 0, 0, 454, 455, 7, 8, 0, 0, 455, 456, 3, 64, 32, 0, 456, 63, 1, 0, 0, 0, 457, 464, 3, 66, 33, 0, 458, 459, 5, 16, 0, 0, 459, 460, 3, 66, 33, 0, 460, 461, 5, 6, 0, 0, 461, 462, 3, 66, 33, 0, 462, 464, 1, 0, 0, 0, 463, 457, 1, 0, 0, 0, 463, 458, 1, 0, 0, 0, 464, 65, 1, 0, 0, 0, 465, 466, 5, 33, 0, 0, 466, 478, 5, 142, 0, 0, 467, 468, 5, 175, 0, 0, 468, 478, 5, 128, 0, 0, 469, 470, 5, 175, 0, 0, 470, 478, 5, 64, 0, 0, 471, 472, 3, 106, 53, 0, 472, 473, 5, 128, 0, 0, 473, 478, 1, 0, 0, 0, 474, 475, 3, 106, 53, 0, 475, 476, 5, 64, 0, 0, 476, 478, 1, 0, 0, 0, 477, 465, 1, 0, 0, 0, 477, 467, 1, 0, 0, 0, 477, 469, 1, 0, 0, 0, 477, 471, 1, 0, 0, 0, 477, 474, 1, 0, 0, 0, 478, 67, 1, 0, 0, 0, 479, 480, 3, 74, 37, 0, 480, 481, 5, 0, 0, 1, 481, 69, 1, 0, 0, 0, 482, 530, 3, 118, 59, 0, 483, 484, 3, 118, 59, 0, 484, 485, 5, 220, 0, 0, 485, 486, 3, 118, 59, 0, 486, 493, 3, 70, 35, 0, 487, 488, 5, 206, 0, 0, 488, 489, 3, 118, 59, 0, 489, 490, 3, 70, 35, 0, 490, 492, 1, 0, 0, 0, 491, 487, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 496, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 496, 497, 5, 236, 0, 0, 497, 530, 1, 0, 0, 0, 498, 499, 3, 118, 59, 0, 499, 500, 5, 220, 0, 0, 500, 505, 3, 120, 60, 0, 501, 502, 5, 206, 0, 0, 502, 504, 3, 120, 60, 0, 503, 501, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 508, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 5, 236, 0, 0, 509, 530, 1, 0, 0, 0, 510, 511, 3, 118, 59, 0, 511, 512, 5, 220, 0, 0, 512, 517, 3, 70, 35, 0, 513, 514, 5, 206, 0, 0, 514, 516, 3, 70, 35, 0, 515, 513, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 5, 236, 0, 0, 521, 530, 1, 0, 0, 0, 522, 523, 3, 118, 59, 0, 523, 525, 5, 220, 0, 0, 524, 526, 3, 72, 36, 0, 525, 524, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 5, 236, 0, 0, 528, 530, 1, 0, 0, 0, 529, 482, 1, 0, 0, 0, 529, 483, 1, 0, 0, 0, 529, 498, 1, 0, 0, 0, 529, 510, 1, 0, 0, 0, 529, 522, 1, 0, 0, 0, 530, 71, 1, 0, 0, 0, 531, 536, 3, 74, 37, 0, 532, 533, 5, 206, 0, 0, 533, 535, 3, 74, 37, 0, 534, 532, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 73, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 6, 37, -1, 0, 540, 542, 5, 19, 0, 0, 541, 543, 3, 74, 37, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 549, 1, 0, 0, 0, 544, 545, 5, 186, 0, 0, 545, 546, 3, 74, 37, 0, 546, 547, 5, 163, 0, 0, 547, 548, 3, 74, 37, 0, 548, 550, 1, 0, 0, 0, 549, 544, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 555, 1, 0, 0, 0, 553, 554, 5, 52, 0, 0, 554, 556, 3, 74, 37, 0, 555, 553, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 5, 53, 0, 0, 558, 663, 1, 0, 0, 0, 559, 560, 5, 20, 0, 0, 560, 561, 5, 220, 0, 0, 561, 562, 3, 74, 37, 0, 562, 563, 5, 10, 0, 0, 563, 564, 3, 70, 35, 0, 564, 565, 5, 236, 0, 0, 565, 663, 1, 0, 0, 0, 566, 567, 5, 36, 0, 0, 567, 663, 5, 200, 0, 0, 568, 569, 5, 86, 0, 0, 569, 570, 3, 74, 37, 0, 570, 571, 3, 110, 55, 0, 571, 663, 1, 0, 0, 0, 572, 573, 5, 155, 0, 0, 573, 574, 5, 220, 0, 0, 574, 575, 3, 74, 37, 0, 575, 576, 5, 68, 0, 0, 576, 579, 3, 74, 37, 0, 577, 578, 5, 65, 0, 0, 578, 580, 3, 74, 37, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 582, 5, 236, 0, 0, 582, 663, 1, 0, 0, 0, 583, 584, 5, 166, 0, 0, 584, 663, 5, 200, 0, 0, 585, 586, 5, 171, 0, 0, 586, 587, 5, 220, 0, 0, 587, 588, 7, 9, 0, 0, 588, 589, 5, 200, 0, 0, 589, 590, 5, 68, 0, 0, 590, 591, 3, 74, 37, 0, 591, 592, 5, 236, 0, 0, 592, 663, 1, 0, 0, 0, 593, 594, 3, 118, 59, 0, 594, 596, 5, 220, 0, 0, 595, 597, 3, 72, 36, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 5, 236, 0, 0, 599, 600, 1, 0, 0, 0, 600, 601, 5, 125, 0, 0, 601, 602, 5, 220, 0, 0, 602, 603, 3, 56, 28, 0, 603, 604, 5, 236, 0, 0, 604, 663, 1, 0, 0, 0, 605, 606, 3, 118, 59, 0, 606, 608, 5, 220, 0, 0, 607, 609, 3, 72, 36, 0, 608, 607, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 611, 5, 236, 0, 0, 611, 612, 1, 0, 0, 0, 612, 613, 5, 125, 0, 0, 613, 614, 3, 118, 59, 0, 614, 663, 1, 0, 0, 0, 615, 621, 3, 118, 59, 0, 616, 618, 5, 220, 0, 0, 617, 619, 3, 72, 36, 0, 618, 617, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 5, 236, 0, 0, 621, 616, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 5, 220, 0, 0, 624, 626, 5, 49, 0, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 628, 1, 0, 0, 0, 627, 629, 3, 76, 38, 0, 628, 627, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 5, 236, 0, 0, 631, 663, 1, 0, 0, 0, 632, 663, 3, 82, 41, 0, 633, 663, 3, 108, 54, 0, 634, 635, 5, 208, 0, 0, 635, 663, 3, 74, 37, 18, 636, 637, 5, 115, 0, 0, 637, 663, 3, 74, 37, 12, 638, 639, 3, 98, 49, 0, 639, 640, 5, 210, 0, 0, 640, 642, 1, 0, 0, 0, 641, 638, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 663, 5, 202, 0, 0, 644, 645, 5, 220, 0, 0, 645, 646, 3, 2, 1, 0, 646, 647, 5, 236, 0, 0, 647, 663, 1, 0, 0, 0, 648, 649, 5, 220, 0, 0, 649, 650, 3, 74, 37, 0, 650, 651, 5, 236, 0, 0, 651, 663, 1, 0, 0, 0, 652, 653, 5, 220, 0, 0, 653, 654, 3, 72, 36, 0, 654, 655, 5, 236, 0, 0, 655, 663, 1, 0, 0, 0, 656, 658, 5, 219, 0, 0, 657, 659, 3, 72, 36, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 663, 5, 235, 0, 0, 661, 663, 3, 90, 45, 0, 662, 539, 1, 0, 0, 0, 662, 559, 1, 0, 0, 0, 662, 566, 1, 0, 0, 0, 662, 568, 1, 0, 0, 0, 662, 572, 1, 0, 0, 0, 662, 583, 1, 0, 0, 0, 662, 585, 1, 0, 0, 0, 662, 593, 1, 0, 0, 0, 662, 605, 1, 0, 0, 0, 662, 615, 1, 0, 0, 0, 662, 632, 1, 0, 0, 0, 662, 633, 1, 0, 0, 0, 662, 634, 1, 0, 0, 0, 662, 636, 1, 0, 0, 0, 662, 641, 1, 0, 0, 0, 662, 644, 1, 0, 0, 0, 662, 648, 1, 0, 0, 0, 662, 652, 1, 0, 0, 0, 662, 656, 1, 0, 0, 0, 662, 661, 1, 0, 0, 0, 663, 757, 1, 0, 0, 0, 664, 668, 10, 17, 0, 0, 665, 669, 5, 202, 0, 0, 666, 669, 5, 238, 0, 0, 667, 669, 5, 227, 0, 0, 668, 665, 1, 0, 0, 0, 668, 666, 1, 0, 0, 0, 668, 667, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 756, 3, 74, 37, 18, 671, 675, 10, 16, 0, 0, 672, 676, 5, 228, 0, 0, 673, 676, 5, 208, 0, 0, 674, 676, 5, 207, 0, 0, 675, 672, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 756, 3, 74, 37, 17, 678, 703, 10, 15, 0, 0, 679, 704, 5, 211, 0, 0, 680, 704, 5, 212, 0, 0, 681, 704, 5, 223, 0, 0, 682, 704, 5, 221, 0, 0, 683, 704, 5, 222, 0, 0, 684, 704, 5, 213, 0, 0, 685, 704, 5, 214, 0, 0, 686, 688, 5, 115, 0, 0, 687, 686, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 1, 0, 0, 0, 689, 691, 5, 80, 0, 0, 690, 692, 5, 25, 0, 0, 691, 690, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 704, 1, 0, 0, 0, 693, 695, 5, 115, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 704, 7, 10, 0, 0, 697, 704, 5, 232, 0, 0, 698, 704, 5, 233, 0, 0, 699, 704, 5, 225, 0, 0, 700, 704, 5, 216, 0, 0, 701, 704, 5, 217, 0, 0, 702, 704, 5, 224, 0, 0, 703, 679, 1, 0, 0, 0, 703, 680, 1, 0, 0, 0, 703, 681, 1, 0, 0, 0, 703, 682, 1, 0, 0, 0, 703, 683, 1, 0, 0, 0, 703, 684, 1, 0, 0, 0, 703, 685, 1, 0, 0, 0, 703, 687, 1, 0, 0, 0, 703, 694, 1, 0, 0, 0, 703, 697, 1, 0, 0, 0, 703, 698, 1, 0, 0, 0, 703, 699, 1, 0, 0, 0, 703, 700, 1, 0, 0, 0, 703, 701, 1, 0, 0, 0, 703, 702, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 756, 3, 74, 37, 16, 706, 707, 10, 13, 0, 0, 707, 708, 5, 226, 0, 0, 708, 756, 3, 74, 37, 14, 709, 710, 10, 11, 0, 0, 710, 711, 5, 6, 0, 0, 711, 756, 3, 74, 37, 12, 712, 713, 10, 10, 0, 0, 713, 714, 5, 121, 0, 0, 714, 756, 3, 74, 37, 11, 715, 717, 10, 9, 0, 0, 716, 718, 5, 115, 0, 0, 717, 716, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 16, 0, 0, 720, 721, 3, 74, 37, 0, 721, 722, 5, 6, 0, 0, 722, 723, 3, 74, 37, 10, 723, 756, 1, 0, 0, 0, 724, 725, 10, 8, 0, 0, 725, 726, 5, 229, 0, 0, 726, 727, 3, 74, 37, 0, 727, 728, 5, 205, 0, 0, 728, 729, 3, 74, 37, 8, 729, 756, 1, 0, 0, 0, 730, 731, 10, 21, 0, 0, 731, 732, 5, 219, 0, 0, 732, 733, 3, 74, 37, 0, 733, 734, 5, 235, 0, 0, 734, 756, 1, 0, 0, 0, 735, 736, 10, 20, 0, 0, 736, 737, 5, 210, 0, 0, 737, 756, 5, 198, 0, 0, 738, 739, 10, 19, 0, 0, 739, 740, 5, 210, 0, 0, 740, 756, 3, 118, 59, 0, 741, 742, 10, 14, 0, 0, 742, 744, 5, 88, 0, 0, 743, 745, 5, 115, 0, 0, 744, 743, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 756, 5, 116, 0, 0, 747, 753, 10, 7, 0, 0, 748, 754, 3, 116, 58, 0, 749, 750, 5, 10, 0, 0, 750, 754, 3, 118, 59, 0, 751, 752, 5, 10, 0, 0, 752, 754, 5, 200, 0, 0, 753, 748, 1, 0, 0, 0, 753, 749, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 754, 756, 1, 0, 0, 0, 755, 664, 1, 0, 0, 0, 755, 671, 1, 0, 0, 0, 755, 678, 1, 0, 0, 0, 755, 706, 1, 0, 0, 0, 755, 709, 1, 0, 0, 0, 755, 712, 1, 0, 0, 0, 755, 715, 1, 0, 0, 0, 755, 724, 1, 0, 0, 0, 755, 730, 1, 0, 0, 0, 755, 735, 1, 0, 0, 0, 755, 738, 1, 0, 0, 0, 755, 741, 1, 0, 0, 0, 755, 747, 1, 0, 0, 0, 756, 759, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 75, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 760, 765, 3, 78, 39, 0, 761, 762, 5, 206, 0, 0, 762, 764, 3, 78, 39, 0, 763, 761, 1, 0, 0, 0, 764, 767, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 77, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 768, 771, 3, 80, 40, 0, 769, 771, 3, 74, 37, 0, 770, 768, 1, 0, 0, 0, 770, 769, 1, 0, 0, 0, 771, 79, 1, 0, 0, 0, 772, 773, 5, 220, 0, 0, 773, 778, 3, 118, 59, 0, 774, 775, 5, 206, 0, 0, 775, 777, 3, 118, 59, 0, 776, 774, 1, 0, 0, 0, 777, 780, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 781, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 781, 782, 5, 236, 0, 0, 782, 792, 1, 0, 0, 0, 783, 788, 3, 118, 59, 0, 784, 785, 5, 206, 0, 0, 785, 787, 3, 118, 59, 0, 786, 784, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 792, 1, 0, 0, 0, 790, 788, 1, 0, 0, 0, 791, 772, 1, 0, 0, 0, 791, 783, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 794, 5, 201, 0, 0, 794, 795, 3, 74, 37, 0, 795, 81, 1, 0, 0, 0, 796, 797, 5, 222, 0, 0, 797, 801, 3, 118, 59, 0, 798, 800, 3, 84, 42, 0, 799, 798, 1, 0, 0, 0, 800, 803, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 804, 1, 0, 0, 0, 803, 801, 1, 0, 0, 0, 804, 805, 5, 238, 0, 0, 805, 806, 5, 214, 0, 0, 806, 825, 1, 0, 0, 0, 807, 808, 5, 222, 0, 0, 808, 812, 3, 118, 59, 0, 809, 811, 3, 84, 42, 0, 810, 809, 1, 0, 0, 0, 811, 814, 1, 0, 0, 0, 812, 810, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 815, 1, 0, 0, 0, 814, 812, 1, 0, 0, 0, 815, 817, 5, 214, 0, 0, 816, 818, 3, 82, 41, 0, 817, 816, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 5, 222, 0, 0, 820, 821, 5, 238, 0, 0, 821, 822, 3, 118, 59, 0, 822, 823, 5, 214, 0, 0, 823, 825, 1, 0, 0, 0, 824, 796, 1, 0, 0, 0, 824, 807, 1, 0, 0, 0, 825, 83, 1, 0, 0, 0, 826, 827, 3, 118, 59, 0, 827, 828, 5, 212, 0, 0, 828, 829, 5, 200, 0, 0, 829, 838, 1, 0, 0, 0, 830, 831, 3, 118, 59, 0, 831, 832, 5, 212, 0, 0, 832, 833, 5, 218, 0, 0, 833, 834, 3, 74, 37, 0, 834, 835, 5, 234, 0, 0, 835, 838, 1, 0, 0, 0, 836, 838, 3, 118, 59, 0, 837, 826, 1, 0, 0, 0, 837, 830, 1, 0, 0, 0, 837, 836, 1, 0, 0, 0, 838, 85, 1, 0, 0, 0, 839, 844, 3, 88, 44, 0, 840, 841, 5, 206, 0, 0, 841, 843, 3, 88, 44, 0, 842, 840, 1, 0, 0, 0, 843, 846, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 87, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 847, 848, 3, 118, 59, 0, 848, 849, 5, 10, 0, 0, 849, 850, 5, 220, 0, 0, 850, 851, 3, 2, 1, 0, 851, 852, 5, 236, 0, 0, 852, 858, 1, 0, 0, 0, 853, 854, 3, 74, 37, 0, 854, 855, 5, 10, 0, 0, 855, 856, 3, 118, 59, 0, 856, 858, 1, 0, 0, 0, 857, 847, 1, 0, 0, 0, 857, 853, 1, 0, 0, 0, 858, 89, 1, 0, 0, 0, 859, 867, 3, 122, 61, 0, 860, 861, 3, 98, 49, 0, 861, 862, 5, 210, 0, 0, 862, 864, 1, 0, 0, 0, 863, 860, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 1, 0, 0, 0, 865, 867, 3, 92, 46, 0, 866, 859, 1, 0, 0, 0, 866, 863, 1, 0, 0, 0, 867, 91, 1, 0, 0, 0, 868, 873, 3, 118, 59, 0, 869, 870, 5, 210, 0, 0, 870, 872, 3, 118, 59, 0, 871, 869, 1, 0, 0, 0, 872, 875, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 93, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 876, 877, 6, 47, -1, 0, 877, 886, 3, 98, 49, 0, 878, 886, 3, 96, 48, 0, 879, 880, 5, 220, 0, 0, 880, 881, 3, 2, 1, 0, 881, 882, 5, 236, 0, 0, 882, 886, 1, 0, 0, 0, 883, 886, 3, 82, 41, 0, 884, 886, 3, 122, 61, 0, 885, 876, 1, 0, 0, 0, 885, 878, 1, 0, 0, 0, 885, 879, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 885, 884, 1, 0, 0, 0, 886, 895, 1, 0, 0, 0, 887, 891, 10, 3, 0, 0, 888, 892, 3, 116, 58, 0, 889, 890, 5, 10, 0, 0, 890, 892, 3, 118, 59, 0, 891, 888, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 887, 1, 0, 0, 0, 894, 897, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 95, 1, 0, 0, 0, 897, 895, 1, 0, 0, 0, 898, 899, 3, 118, 59, 0, 899, 901, 5, 220, 0, 0, 900, 902, 3, 100, 50, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 5, 236, 0, 0, 904, 97, 1, 0, 0, 0, 905, 906, 3, 102, 51, 0, 906, 907, 5, 210, 0, 0, 907, 909, 1, 0, 0, 0, 908, 905, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 3, 118, 59, 0, 911, 99, 1, 0, 0, 0, 912, 917, 3, 74, 37, 0, 913, 914, 5, 206, 0, 0, 914, 916, 3, 74, 37, 0, 915, 913, 1, 0, 0, 0, 916, 919, 1, 0, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 101, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 920, 921, 3, 118, 59, 0, 921, 103, 1, 0, 0, 0, 922, 931, 5, 196, 0, 0, 923, 924, 5, 210, 0, 0, 924, 931, 7, 11, 0, 0, 925, 926, 5, 198, 0, 0, 926, 928, 5, 210, 0, 0, 927, 929, 7, 11, 0, 0, 928, 927, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 931, 1, 0, 0, 0, 930, 922, 1, 0, 0, 0, 930, 923, 1, 0, 0, 0, 930, 925, 1, 0, 0, 0, 931, 105, 1, 0, 0, 0, 932, 934, 7, 12, 0, 0, 933, 932, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 941, 1, 0, 0, 0, 935, 942, 3, 104, 52, 0, 936, 942, 5, 197, 0, 0, 937, 942, 5, 198, 0, 0, 938, 942, 5, 199, 0, 0, 939, 942, 5, 82, 0, 0, 940, 942, 5, 113, 0, 0, 941, 935, 1, 0, 0, 0, 941, 936, 1, 0, 0, 0, 941, 937, 1, 0, 0, 0, 941, 938, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 107, 1, 0, 0, 0, 943, 947, 3, 106, 53, 0, 944, 947, 5, 200, 0, 0, 945, 947, 5, 116, 0, 0, 946, 943, 1, 0, 0, 0, 946, 944, 1, 0, 0, 0, 946, 945, 1, 0, 0, 0, 947, 109, 1, 0, 0, 0, 948, 949, 7, 13, 0, 0, 949, 111, 1, 0, 0, 0, 950, 951, 7, 14, 0, 0, 951, 113, 1, 0, 0, 0, 952, 953, 7, 15, 0, 0, 953, 115, 1, 0, 0, 0, 954, 957, 5, 195, 0, 0, 955, 957, 3, 114, 57, 0, 956, 954, 1, 0, 0, 0, 956, 955, 1, 0, 0, 0, 957, 117, 1, 0, 0, 0, 958, 962, 5, 195, 0, 0, 959, 962, 3, 110, 55, 0, 960, 962, 3, 112, 56, 0, 961, 958, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 961, 960, 1, 0, 0, 0, 962, 119, 1, 0, 0, 0, 963, 964, 5, 200, 0, 0, 964, 965, 5, 212, 0, 0, 965, 966, 3, 106, 53, 0, 966, 121, 1, 0, 0, 0, 967, 968, 5, 218, 0, 0, 968, 969, 3, 118, 59, 0, 969, 970, 5, 234, 0, 0, 970, 123, 1, 0, 0, 0, 120, 127, 137, 146, 149, 153, 156, 160, 163, 166, 169, 172, 176, 180, 183, 186, 189, 193, 196, 205, 211, 232, 249, 266, 272, 278, 289, 291, 302, 305, 311, 319, 325, 327, 331, 336, 339, 342, 346, 350, 353, 355, 358, 362, 366, 369, 371, 373, 378, 389, 395, 402, 407, 411, 415, 421, 423, 430, 438, 441, 444, 463, 477, 493, 505, 517, 525, 529, 536, 542, 551, 555, 579, 596, 608, 618, 621, 625, 628, 641, 658, 662, 668, 675, 687, 691, 694, 703, 717, 744, 753, 755, 757, 765, 770, 778, 788, 791, 801, 812, 817, 824, 837, 844, 857, 863, 866, 873, 885, 891, 895, 901, 908, 917, 928, 930, 933, 941, 946, 956, 961] \ No newline at end of file diff --git a/hogql_parser/HogQLParserBaseVisitor.h b/hogql_parser/HogQLParserBaseVisitor.h index 00e3cd4e391ad..9d8132683af38 100644 --- a/hogql_parser/HogQLParserBaseVisitor.h +++ b/hogql_parser/HogQLParserBaseVisitor.h @@ -211,10 +211,6 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor { return visitChildren(ctx); } - virtual std::any visitColumnExprExtract(HogQLParser::ColumnExprExtractContext *ctx) override { - return visitChildren(ctx); - } - virtual std::any visitColumnExprNegate(HogQLParser::ColumnExprNegateContext *ctx) override { return visitChildren(ctx); } diff --git a/hogql_parser/HogQLParserVisitor.h b/hogql_parser/HogQLParserVisitor.h index 8355b14ae1ea4..72a7eb7aaddc6 100644 --- a/hogql_parser/HogQLParserVisitor.h +++ b/hogql_parser/HogQLParserVisitor.h @@ -117,8 +117,6 @@ class HogQLParserVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitColumnExprAlias(HogQLParser::ColumnExprAliasContext *context) = 0; - virtual std::any visitColumnExprExtract(HogQLParser::ColumnExprExtractContext *context) = 0; - virtual std::any visitColumnExprNegate(HogQLParser::ColumnExprNegateContext *context) = 0; virtual std::any visitColumnExprSubquery(HogQLParser::ColumnExprSubqueryContext *context) = 0; diff --git a/hogql_parser/parser.cpp b/hogql_parser/parser.cpp index 1c16cbe1280c1..1ee0cc910f8f6 100644 --- a/hogql_parser/parser.cpp +++ b/hogql_parser/parser.cpp @@ -1082,8 +1082,6 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { RETURN_NEW_AST_NODE("Alias", "{s:N,s:s#}", "expr", expr, "alias", alias.data(), alias.size()); } - VISIT_UNSUPPORTED(ColumnExprExtract) - VISIT(ColumnExprNegate) { PyObject* left = build_ast_node("Constant", "{s:i}", "value", 0); if (!left) throw PyInternalException(); diff --git a/posthog/hogql/grammar/HogQLParser.g4 b/posthog/hogql/grammar/HogQLParser.g4 index a0f22ae3cdb0a..0729a05215653 100644 --- a/posthog/hogql/grammar/HogQLParser.g4 +++ b/posthog/hogql/grammar/HogQLParser.g4 @@ -103,7 +103,7 @@ columnExpr : CASE caseExpr=columnExpr? (WHEN whenExpr=columnExpr THEN thenExpr=columnExpr)+ (ELSE elseExpr=columnExpr)? END # ColumnExprCase | CAST LPAREN columnExpr AS columnTypeExpr RPAREN # ColumnExprCast | DATE STRING_LITERAL # ColumnExprDate - | EXTRACT LPAREN interval FROM columnExpr RPAREN # ColumnExprExtract +// | EXTRACT LPAREN interval FROM columnExpr RPAREN # ColumnExprExtract // Interferes with a function call | INTERVAL columnExpr interval # ColumnExprInterval | SUBSTRING LPAREN columnExpr FROM columnExpr (FOR columnExpr)? RPAREN # ColumnExprSubstring | TIMESTAMP STRING_LITERAL # ColumnExprTimestamp diff --git a/posthog/hogql/grammar/HogQLParser.interp b/posthog/hogql/grammar/HogQLParser.interp index 2b24b72a2819d..b159bc05eb424 100644 --- a/posthog/hogql/grammar/HogQLParser.interp +++ b/posthog/hogql/grammar/HogQLParser.interp @@ -554,4 +554,4 @@ placeholder atn: -[4, 1, 242, 979, 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, 1, 0, 1, 0, 1, 0, 3, 0, 128, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 136, 8, 1, 10, 1, 12, 1, 139, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 147, 8, 2, 1, 3, 3, 3, 150, 8, 3, 1, 3, 1, 3, 3, 3, 154, 8, 3, 1, 3, 3, 3, 157, 8, 3, 1, 3, 1, 3, 3, 3, 161, 8, 3, 1, 3, 3, 3, 164, 8, 3, 1, 3, 3, 3, 167, 8, 3, 1, 3, 3, 3, 170, 8, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 1, 3, 3, 3, 177, 8, 3, 1, 3, 1, 3, 3, 3, 181, 8, 3, 1, 3, 3, 3, 184, 8, 3, 1, 3, 3, 3, 187, 8, 3, 1, 3, 3, 3, 190, 8, 3, 1, 3, 1, 3, 3, 3, 194, 8, 3, 1, 3, 3, 3, 197, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 206, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 212, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 231, 8, 8, 10, 8, 12, 8, 234, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 250, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 267, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 273, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 279, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 290, 8, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 3, 18, 306, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 320, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 326, 8, 18, 10, 18, 12, 18, 329, 9, 18, 1, 19, 3, 19, 332, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 337, 8, 19, 1, 19, 3, 19, 340, 8, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 1, 19, 3, 19, 347, 8, 19, 1, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 3, 19, 354, 8, 19, 3, 19, 356, 8, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 1, 19, 3, 19, 363, 8, 19, 1, 19, 1, 19, 3, 19, 367, 8, 19, 1, 19, 3, 19, 370, 8, 19, 3, 19, 372, 8, 19, 3, 19, 374, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 379, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 390, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 396, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 401, 8, 23, 10, 23, 12, 23, 404, 9, 23, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 422, 8, 25, 3, 25, 424, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 429, 8, 26, 10, 26, 12, 26, 432, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 439, 8, 28, 1, 28, 3, 28, 442, 8, 28, 1, 28, 3, 28, 445, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 464, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 478, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 492, 8, 35, 10, 35, 12, 35, 495, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 504, 8, 35, 10, 35, 12, 35, 507, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 516, 8, 35, 10, 35, 12, 35, 519, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 526, 8, 35, 1, 35, 1, 35, 3, 35, 530, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 535, 8, 36, 10, 36, 12, 36, 538, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 543, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 550, 8, 37, 11, 37, 12, 37, 551, 1, 37, 1, 37, 3, 37, 556, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 587, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 604, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 616, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 626, 8, 37, 1, 37, 3, 37, 629, 8, 37, 1, 37, 1, 37, 3, 37, 633, 8, 37, 1, 37, 3, 37, 636, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 649, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 666, 8, 37, 1, 37, 1, 37, 3, 37, 670, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 676, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 683, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 695, 8, 37, 1, 37, 1, 37, 3, 37, 699, 8, 37, 1, 37, 3, 37, 702, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 711, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 725, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 752, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 761, 8, 37, 5, 37, 763, 8, 37, 10, 37, 12, 37, 766, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 771, 8, 38, 10, 38, 12, 38, 774, 9, 38, 1, 39, 1, 39, 3, 39, 778, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 784, 8, 40, 10, 40, 12, 40, 787, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 794, 8, 40, 10, 40, 12, 40, 797, 9, 40, 3, 40, 799, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 807, 8, 41, 10, 41, 12, 41, 810, 9, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 818, 8, 41, 10, 41, 12, 41, 821, 9, 41, 1, 41, 1, 41, 3, 41, 825, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 832, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 845, 8, 42, 1, 43, 1, 43, 1, 43, 5, 43, 850, 8, 43, 10, 43, 12, 43, 853, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 865, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 871, 8, 45, 1, 45, 3, 45, 874, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 879, 8, 46, 10, 46, 12, 46, 882, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 893, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 899, 8, 47, 5, 47, 901, 8, 47, 10, 47, 12, 47, 904, 9, 47, 1, 48, 1, 48, 1, 48, 3, 48, 909, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 49, 916, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 923, 8, 50, 10, 50, 12, 50, 926, 9, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 936, 8, 52, 3, 52, 938, 8, 52, 1, 53, 3, 53, 941, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 949, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 954, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 964, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 969, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 0, 3, 36, 74, 94, 62, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 197, 198, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1107, 0, 127, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 6, 149, 1, 0, 0, 0, 8, 198, 1, 0, 0, 0, 10, 201, 1, 0, 0, 0, 12, 207, 1, 0, 0, 0, 14, 211, 1, 0, 0, 0, 16, 217, 1, 0, 0, 0, 18, 235, 1, 0, 0, 0, 20, 238, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 251, 1, 0, 0, 0, 26, 254, 1, 0, 0, 0, 28, 258, 1, 0, 0, 0, 30, 291, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 296, 1, 0, 0, 0, 36, 311, 1, 0, 0, 0, 38, 373, 1, 0, 0, 0, 40, 378, 1, 0, 0, 0, 42, 389, 1, 0, 0, 0, 44, 391, 1, 0, 0, 0, 46, 397, 1, 0, 0, 0, 48, 405, 1, 0, 0, 0, 50, 423, 1, 0, 0, 0, 52, 425, 1, 0, 0, 0, 54, 433, 1, 0, 0, 0, 56, 438, 1, 0, 0, 0, 58, 446, 1, 0, 0, 0, 60, 450, 1, 0, 0, 0, 62, 454, 1, 0, 0, 0, 64, 463, 1, 0, 0, 0, 66, 477, 1, 0, 0, 0, 68, 479, 1, 0, 0, 0, 70, 529, 1, 0, 0, 0, 72, 531, 1, 0, 0, 0, 74, 669, 1, 0, 0, 0, 76, 767, 1, 0, 0, 0, 78, 777, 1, 0, 0, 0, 80, 798, 1, 0, 0, 0, 82, 831, 1, 0, 0, 0, 84, 844, 1, 0, 0, 0, 86, 846, 1, 0, 0, 0, 88, 864, 1, 0, 0, 0, 90, 873, 1, 0, 0, 0, 92, 875, 1, 0, 0, 0, 94, 892, 1, 0, 0, 0, 96, 905, 1, 0, 0, 0, 98, 915, 1, 0, 0, 0, 100, 919, 1, 0, 0, 0, 102, 927, 1, 0, 0, 0, 104, 937, 1, 0, 0, 0, 106, 940, 1, 0, 0, 0, 108, 953, 1, 0, 0, 0, 110, 955, 1, 0, 0, 0, 112, 957, 1, 0, 0, 0, 114, 959, 1, 0, 0, 0, 116, 963, 1, 0, 0, 0, 118, 968, 1, 0, 0, 0, 120, 970, 1, 0, 0, 0, 122, 974, 1, 0, 0, 0, 124, 128, 3, 2, 1, 0, 125, 128, 3, 6, 3, 0, 126, 128, 3, 82, 41, 0, 127, 124, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 5, 0, 0, 1, 130, 1, 1, 0, 0, 0, 131, 137, 3, 4, 2, 0, 132, 133, 5, 176, 0, 0, 133, 134, 5, 4, 0, 0, 134, 136, 3, 4, 2, 0, 135, 132, 1, 0, 0, 0, 136, 139, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 147, 3, 6, 3, 0, 141, 142, 5, 220, 0, 0, 142, 143, 3, 2, 1, 0, 143, 144, 5, 236, 0, 0, 144, 147, 1, 0, 0, 0, 145, 147, 3, 122, 61, 0, 146, 140, 1, 0, 0, 0, 146, 141, 1, 0, 0, 0, 146, 145, 1, 0, 0, 0, 147, 5, 1, 0, 0, 0, 148, 150, 3, 8, 4, 0, 149, 148, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 153, 5, 146, 0, 0, 152, 154, 5, 49, 0, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 156, 1, 0, 0, 0, 155, 157, 3, 10, 5, 0, 156, 155, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 160, 3, 72, 36, 0, 159, 161, 3, 12, 6, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 164, 3, 14, 7, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 167, 3, 18, 9, 0, 166, 165, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 170, 3, 20, 10, 0, 169, 168, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 173, 3, 22, 11, 0, 172, 171, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 175, 5, 189, 0, 0, 175, 177, 7, 0, 0, 0, 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 179, 5, 189, 0, 0, 179, 181, 5, 169, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 183, 1, 0, 0, 0, 182, 184, 3, 24, 12, 0, 183, 182, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 187, 3, 16, 8, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 1, 0, 0, 0, 188, 190, 3, 26, 13, 0, 189, 188, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 194, 3, 30, 15, 0, 192, 194, 3, 32, 16, 0, 193, 191, 1, 0, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 196, 1, 0, 0, 0, 195, 197, 3, 34, 17, 0, 196, 195, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 7, 1, 0, 0, 0, 198, 199, 5, 189, 0, 0, 199, 200, 3, 86, 43, 0, 200, 9, 1, 0, 0, 0, 201, 202, 5, 168, 0, 0, 202, 205, 5, 198, 0, 0, 203, 204, 5, 189, 0, 0, 204, 206, 5, 164, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 11, 1, 0, 0, 0, 207, 208, 5, 68, 0, 0, 208, 209, 3, 36, 18, 0, 209, 13, 1, 0, 0, 0, 210, 212, 7, 1, 0, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 5, 90, 0, 0, 215, 216, 3, 72, 36, 0, 216, 15, 1, 0, 0, 0, 217, 218, 5, 188, 0, 0, 218, 219, 3, 118, 59, 0, 219, 220, 5, 10, 0, 0, 220, 221, 5, 220, 0, 0, 221, 222, 3, 56, 28, 0, 222, 232, 5, 236, 0, 0, 223, 224, 5, 206, 0, 0, 224, 225, 3, 118, 59, 0, 225, 226, 5, 10, 0, 0, 226, 227, 5, 220, 0, 0, 227, 228, 3, 56, 28, 0, 228, 229, 5, 236, 0, 0, 229, 231, 1, 0, 0, 0, 230, 223, 1, 0, 0, 0, 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 17, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 5, 129, 0, 0, 236, 237, 3, 74, 37, 0, 237, 19, 1, 0, 0, 0, 238, 239, 5, 187, 0, 0, 239, 240, 3, 74, 37, 0, 240, 21, 1, 0, 0, 0, 241, 242, 5, 73, 0, 0, 242, 249, 5, 18, 0, 0, 243, 244, 7, 0, 0, 0, 244, 245, 5, 220, 0, 0, 245, 246, 3, 72, 36, 0, 246, 247, 5, 236, 0, 0, 247, 250, 1, 0, 0, 0, 248, 250, 3, 72, 36, 0, 249, 243, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 23, 1, 0, 0, 0, 251, 252, 5, 74, 0, 0, 252, 253, 3, 74, 37, 0, 253, 25, 1, 0, 0, 0, 254, 255, 5, 122, 0, 0, 255, 256, 5, 18, 0, 0, 256, 257, 3, 46, 23, 0, 257, 27, 1, 0, 0, 0, 258, 259, 5, 122, 0, 0, 259, 260, 5, 18, 0, 0, 260, 261, 3, 72, 36, 0, 261, 29, 1, 0, 0, 0, 262, 263, 5, 99, 0, 0, 263, 266, 3, 74, 37, 0, 264, 265, 5, 206, 0, 0, 265, 267, 3, 74, 37, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 272, 1, 0, 0, 0, 268, 269, 5, 189, 0, 0, 269, 273, 5, 164, 0, 0, 270, 271, 5, 18, 0, 0, 271, 273, 3, 72, 36, 0, 272, 268, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 292, 1, 0, 0, 0, 274, 275, 5, 99, 0, 0, 275, 278, 3, 74, 37, 0, 276, 277, 5, 189, 0, 0, 277, 279, 5, 164, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 5, 118, 0, 0, 281, 282, 3, 74, 37, 0, 282, 292, 1, 0, 0, 0, 283, 284, 5, 99, 0, 0, 284, 285, 3, 74, 37, 0, 285, 286, 5, 118, 0, 0, 286, 289, 3, 74, 37, 0, 287, 288, 5, 18, 0, 0, 288, 290, 3, 72, 36, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 262, 1, 0, 0, 0, 291, 274, 1, 0, 0, 0, 291, 283, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 5, 118, 0, 0, 294, 295, 3, 74, 37, 0, 295, 33, 1, 0, 0, 0, 296, 297, 5, 150, 0, 0, 297, 298, 3, 52, 26, 0, 298, 35, 1, 0, 0, 0, 299, 300, 6, 18, -1, 0, 300, 302, 3, 94, 47, 0, 301, 303, 5, 61, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 305, 1, 0, 0, 0, 304, 306, 3, 44, 22, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 312, 1, 0, 0, 0, 307, 308, 5, 220, 0, 0, 308, 309, 3, 36, 18, 0, 309, 310, 5, 236, 0, 0, 310, 312, 1, 0, 0, 0, 311, 299, 1, 0, 0, 0, 311, 307, 1, 0, 0, 0, 312, 327, 1, 0, 0, 0, 313, 314, 10, 3, 0, 0, 314, 315, 3, 40, 20, 0, 315, 316, 3, 36, 18, 4, 316, 326, 1, 0, 0, 0, 317, 319, 10, 4, 0, 0, 318, 320, 3, 38, 19, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 90, 0, 0, 322, 323, 3, 36, 18, 0, 323, 324, 3, 42, 21, 0, 324, 326, 1, 0, 0, 0, 325, 313, 1, 0, 0, 0, 325, 317, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 37, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 340, 5, 84, 0, 0, 334, 336, 5, 84, 0, 0, 335, 337, 7, 2, 0, 0, 336, 335, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 340, 1, 0, 0, 0, 338, 340, 7, 2, 0, 0, 339, 331, 1, 0, 0, 0, 339, 334, 1, 0, 0, 0, 339, 338, 1, 0, 0, 0, 340, 374, 1, 0, 0, 0, 341, 343, 7, 3, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 7, 4, 0, 0, 345, 347, 5, 123, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 356, 1, 0, 0, 0, 348, 350, 7, 4, 0, 0, 349, 351, 5, 123, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 353, 1, 0, 0, 0, 352, 354, 7, 3, 0, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 356, 1, 0, 0, 0, 355, 342, 1, 0, 0, 0, 355, 348, 1, 0, 0, 0, 356, 374, 1, 0, 0, 0, 357, 359, 7, 5, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 362, 5, 69, 0, 0, 361, 363, 5, 123, 0, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 372, 1, 0, 0, 0, 364, 366, 5, 69, 0, 0, 365, 367, 5, 123, 0, 0, 366, 365, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 370, 7, 5, 0, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 358, 1, 0, 0, 0, 371, 364, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 339, 1, 0, 0, 0, 373, 355, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 39, 1, 0, 0, 0, 375, 376, 5, 31, 0, 0, 376, 379, 5, 90, 0, 0, 377, 379, 5, 206, 0, 0, 378, 375, 1, 0, 0, 0, 378, 377, 1, 0, 0, 0, 379, 41, 1, 0, 0, 0, 380, 381, 5, 119, 0, 0, 381, 390, 3, 72, 36, 0, 382, 383, 5, 179, 0, 0, 383, 384, 5, 220, 0, 0, 384, 385, 3, 72, 36, 0, 385, 386, 5, 236, 0, 0, 386, 390, 1, 0, 0, 0, 387, 388, 5, 179, 0, 0, 388, 390, 3, 72, 36, 0, 389, 380, 1, 0, 0, 0, 389, 382, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 43, 1, 0, 0, 0, 391, 392, 5, 144, 0, 0, 392, 395, 3, 50, 25, 0, 393, 394, 5, 118, 0, 0, 394, 396, 3, 50, 25, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 45, 1, 0, 0, 0, 397, 402, 3, 48, 24, 0, 398, 399, 5, 206, 0, 0, 399, 401, 3, 48, 24, 0, 400, 398, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 47, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 407, 3, 74, 37, 0, 406, 408, 7, 6, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 117, 0, 0, 410, 412, 7, 7, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 26, 0, 0, 414, 416, 5, 200, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 49, 1, 0, 0, 0, 417, 424, 3, 122, 61, 0, 418, 421, 3, 106, 53, 0, 419, 420, 5, 238, 0, 0, 420, 422, 3, 106, 53, 0, 421, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 417, 1, 0, 0, 0, 423, 418, 1, 0, 0, 0, 424, 51, 1, 0, 0, 0, 425, 430, 3, 54, 27, 0, 426, 427, 5, 206, 0, 0, 427, 429, 3, 54, 27, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 53, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 434, 3, 118, 59, 0, 434, 435, 5, 212, 0, 0, 435, 436, 3, 108, 54, 0, 436, 55, 1, 0, 0, 0, 437, 439, 3, 58, 29, 0, 438, 437, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 441, 1, 0, 0, 0, 440, 442, 3, 60, 30, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 1, 0, 0, 0, 443, 445, 3, 62, 31, 0, 444, 443, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 57, 1, 0, 0, 0, 446, 447, 5, 126, 0, 0, 447, 448, 5, 18, 0, 0, 448, 449, 3, 72, 36, 0, 449, 59, 1, 0, 0, 0, 450, 451, 5, 122, 0, 0, 451, 452, 5, 18, 0, 0, 452, 453, 3, 46, 23, 0, 453, 61, 1, 0, 0, 0, 454, 455, 7, 8, 0, 0, 455, 456, 3, 64, 32, 0, 456, 63, 1, 0, 0, 0, 457, 464, 3, 66, 33, 0, 458, 459, 5, 16, 0, 0, 459, 460, 3, 66, 33, 0, 460, 461, 5, 6, 0, 0, 461, 462, 3, 66, 33, 0, 462, 464, 1, 0, 0, 0, 463, 457, 1, 0, 0, 0, 463, 458, 1, 0, 0, 0, 464, 65, 1, 0, 0, 0, 465, 466, 5, 33, 0, 0, 466, 478, 5, 142, 0, 0, 467, 468, 5, 175, 0, 0, 468, 478, 5, 128, 0, 0, 469, 470, 5, 175, 0, 0, 470, 478, 5, 64, 0, 0, 471, 472, 3, 106, 53, 0, 472, 473, 5, 128, 0, 0, 473, 478, 1, 0, 0, 0, 474, 475, 3, 106, 53, 0, 475, 476, 5, 64, 0, 0, 476, 478, 1, 0, 0, 0, 477, 465, 1, 0, 0, 0, 477, 467, 1, 0, 0, 0, 477, 469, 1, 0, 0, 0, 477, 471, 1, 0, 0, 0, 477, 474, 1, 0, 0, 0, 478, 67, 1, 0, 0, 0, 479, 480, 3, 74, 37, 0, 480, 481, 5, 0, 0, 1, 481, 69, 1, 0, 0, 0, 482, 530, 3, 118, 59, 0, 483, 484, 3, 118, 59, 0, 484, 485, 5, 220, 0, 0, 485, 486, 3, 118, 59, 0, 486, 493, 3, 70, 35, 0, 487, 488, 5, 206, 0, 0, 488, 489, 3, 118, 59, 0, 489, 490, 3, 70, 35, 0, 490, 492, 1, 0, 0, 0, 491, 487, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 496, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 496, 497, 5, 236, 0, 0, 497, 530, 1, 0, 0, 0, 498, 499, 3, 118, 59, 0, 499, 500, 5, 220, 0, 0, 500, 505, 3, 120, 60, 0, 501, 502, 5, 206, 0, 0, 502, 504, 3, 120, 60, 0, 503, 501, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 508, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 5, 236, 0, 0, 509, 530, 1, 0, 0, 0, 510, 511, 3, 118, 59, 0, 511, 512, 5, 220, 0, 0, 512, 517, 3, 70, 35, 0, 513, 514, 5, 206, 0, 0, 514, 516, 3, 70, 35, 0, 515, 513, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 5, 236, 0, 0, 521, 530, 1, 0, 0, 0, 522, 523, 3, 118, 59, 0, 523, 525, 5, 220, 0, 0, 524, 526, 3, 72, 36, 0, 525, 524, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 5, 236, 0, 0, 528, 530, 1, 0, 0, 0, 529, 482, 1, 0, 0, 0, 529, 483, 1, 0, 0, 0, 529, 498, 1, 0, 0, 0, 529, 510, 1, 0, 0, 0, 529, 522, 1, 0, 0, 0, 530, 71, 1, 0, 0, 0, 531, 536, 3, 74, 37, 0, 532, 533, 5, 206, 0, 0, 533, 535, 3, 74, 37, 0, 534, 532, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 73, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 6, 37, -1, 0, 540, 542, 5, 19, 0, 0, 541, 543, 3, 74, 37, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 549, 1, 0, 0, 0, 544, 545, 5, 186, 0, 0, 545, 546, 3, 74, 37, 0, 546, 547, 5, 163, 0, 0, 547, 548, 3, 74, 37, 0, 548, 550, 1, 0, 0, 0, 549, 544, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 555, 1, 0, 0, 0, 553, 554, 5, 52, 0, 0, 554, 556, 3, 74, 37, 0, 555, 553, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 5, 53, 0, 0, 558, 670, 1, 0, 0, 0, 559, 560, 5, 20, 0, 0, 560, 561, 5, 220, 0, 0, 561, 562, 3, 74, 37, 0, 562, 563, 5, 10, 0, 0, 563, 564, 3, 70, 35, 0, 564, 565, 5, 236, 0, 0, 565, 670, 1, 0, 0, 0, 566, 567, 5, 36, 0, 0, 567, 670, 5, 200, 0, 0, 568, 569, 5, 59, 0, 0, 569, 570, 5, 220, 0, 0, 570, 571, 3, 110, 55, 0, 571, 572, 5, 68, 0, 0, 572, 573, 3, 74, 37, 0, 573, 574, 5, 236, 0, 0, 574, 670, 1, 0, 0, 0, 575, 576, 5, 86, 0, 0, 576, 577, 3, 74, 37, 0, 577, 578, 3, 110, 55, 0, 578, 670, 1, 0, 0, 0, 579, 580, 5, 155, 0, 0, 580, 581, 5, 220, 0, 0, 581, 582, 3, 74, 37, 0, 582, 583, 5, 68, 0, 0, 583, 586, 3, 74, 37, 0, 584, 585, 5, 65, 0, 0, 585, 587, 3, 74, 37, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 589, 5, 236, 0, 0, 589, 670, 1, 0, 0, 0, 590, 591, 5, 166, 0, 0, 591, 670, 5, 200, 0, 0, 592, 593, 5, 171, 0, 0, 593, 594, 5, 220, 0, 0, 594, 595, 7, 9, 0, 0, 595, 596, 5, 200, 0, 0, 596, 597, 5, 68, 0, 0, 597, 598, 3, 74, 37, 0, 598, 599, 5, 236, 0, 0, 599, 670, 1, 0, 0, 0, 600, 601, 3, 118, 59, 0, 601, 603, 5, 220, 0, 0, 602, 604, 3, 72, 36, 0, 603, 602, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 5, 236, 0, 0, 606, 607, 1, 0, 0, 0, 607, 608, 5, 125, 0, 0, 608, 609, 5, 220, 0, 0, 609, 610, 3, 56, 28, 0, 610, 611, 5, 236, 0, 0, 611, 670, 1, 0, 0, 0, 612, 613, 3, 118, 59, 0, 613, 615, 5, 220, 0, 0, 614, 616, 3, 72, 36, 0, 615, 614, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 5, 236, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 5, 125, 0, 0, 620, 621, 3, 118, 59, 0, 621, 670, 1, 0, 0, 0, 622, 628, 3, 118, 59, 0, 623, 625, 5, 220, 0, 0, 624, 626, 3, 72, 36, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 5, 236, 0, 0, 628, 623, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 5, 220, 0, 0, 631, 633, 5, 49, 0, 0, 632, 631, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 635, 1, 0, 0, 0, 634, 636, 3, 76, 38, 0, 635, 634, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 638, 5, 236, 0, 0, 638, 670, 1, 0, 0, 0, 639, 670, 3, 82, 41, 0, 640, 670, 3, 108, 54, 0, 641, 642, 5, 208, 0, 0, 642, 670, 3, 74, 37, 18, 643, 644, 5, 115, 0, 0, 644, 670, 3, 74, 37, 12, 645, 646, 3, 98, 49, 0, 646, 647, 5, 210, 0, 0, 647, 649, 1, 0, 0, 0, 648, 645, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 670, 5, 202, 0, 0, 651, 652, 5, 220, 0, 0, 652, 653, 3, 2, 1, 0, 653, 654, 5, 236, 0, 0, 654, 670, 1, 0, 0, 0, 655, 656, 5, 220, 0, 0, 656, 657, 3, 74, 37, 0, 657, 658, 5, 236, 0, 0, 658, 670, 1, 0, 0, 0, 659, 660, 5, 220, 0, 0, 660, 661, 3, 72, 36, 0, 661, 662, 5, 236, 0, 0, 662, 670, 1, 0, 0, 0, 663, 665, 5, 219, 0, 0, 664, 666, 3, 72, 36, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 670, 5, 235, 0, 0, 668, 670, 3, 90, 45, 0, 669, 539, 1, 0, 0, 0, 669, 559, 1, 0, 0, 0, 669, 566, 1, 0, 0, 0, 669, 568, 1, 0, 0, 0, 669, 575, 1, 0, 0, 0, 669, 579, 1, 0, 0, 0, 669, 590, 1, 0, 0, 0, 669, 592, 1, 0, 0, 0, 669, 600, 1, 0, 0, 0, 669, 612, 1, 0, 0, 0, 669, 622, 1, 0, 0, 0, 669, 639, 1, 0, 0, 0, 669, 640, 1, 0, 0, 0, 669, 641, 1, 0, 0, 0, 669, 643, 1, 0, 0, 0, 669, 648, 1, 0, 0, 0, 669, 651, 1, 0, 0, 0, 669, 655, 1, 0, 0, 0, 669, 659, 1, 0, 0, 0, 669, 663, 1, 0, 0, 0, 669, 668, 1, 0, 0, 0, 670, 764, 1, 0, 0, 0, 671, 675, 10, 17, 0, 0, 672, 676, 5, 202, 0, 0, 673, 676, 5, 238, 0, 0, 674, 676, 5, 227, 0, 0, 675, 672, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 763, 3, 74, 37, 18, 678, 682, 10, 16, 0, 0, 679, 683, 5, 228, 0, 0, 680, 683, 5, 208, 0, 0, 681, 683, 5, 207, 0, 0, 682, 679, 1, 0, 0, 0, 682, 680, 1, 0, 0, 0, 682, 681, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 763, 3, 74, 37, 17, 685, 710, 10, 15, 0, 0, 686, 711, 5, 211, 0, 0, 687, 711, 5, 212, 0, 0, 688, 711, 5, 223, 0, 0, 689, 711, 5, 221, 0, 0, 690, 711, 5, 222, 0, 0, 691, 711, 5, 213, 0, 0, 692, 711, 5, 214, 0, 0, 693, 695, 5, 115, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 698, 5, 80, 0, 0, 697, 699, 5, 25, 0, 0, 698, 697, 1, 0, 0, 0, 698, 699, 1, 0, 0, 0, 699, 711, 1, 0, 0, 0, 700, 702, 5, 115, 0, 0, 701, 700, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 711, 7, 10, 0, 0, 704, 711, 5, 232, 0, 0, 705, 711, 5, 233, 0, 0, 706, 711, 5, 225, 0, 0, 707, 711, 5, 216, 0, 0, 708, 711, 5, 217, 0, 0, 709, 711, 5, 224, 0, 0, 710, 686, 1, 0, 0, 0, 710, 687, 1, 0, 0, 0, 710, 688, 1, 0, 0, 0, 710, 689, 1, 0, 0, 0, 710, 690, 1, 0, 0, 0, 710, 691, 1, 0, 0, 0, 710, 692, 1, 0, 0, 0, 710, 694, 1, 0, 0, 0, 710, 701, 1, 0, 0, 0, 710, 704, 1, 0, 0, 0, 710, 705, 1, 0, 0, 0, 710, 706, 1, 0, 0, 0, 710, 707, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 709, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 763, 3, 74, 37, 16, 713, 714, 10, 13, 0, 0, 714, 715, 5, 226, 0, 0, 715, 763, 3, 74, 37, 14, 716, 717, 10, 11, 0, 0, 717, 718, 5, 6, 0, 0, 718, 763, 3, 74, 37, 12, 719, 720, 10, 10, 0, 0, 720, 721, 5, 121, 0, 0, 721, 763, 3, 74, 37, 11, 722, 724, 10, 9, 0, 0, 723, 725, 5, 115, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 5, 16, 0, 0, 727, 728, 3, 74, 37, 0, 728, 729, 5, 6, 0, 0, 729, 730, 3, 74, 37, 10, 730, 763, 1, 0, 0, 0, 731, 732, 10, 8, 0, 0, 732, 733, 5, 229, 0, 0, 733, 734, 3, 74, 37, 0, 734, 735, 5, 205, 0, 0, 735, 736, 3, 74, 37, 8, 736, 763, 1, 0, 0, 0, 737, 738, 10, 21, 0, 0, 738, 739, 5, 219, 0, 0, 739, 740, 3, 74, 37, 0, 740, 741, 5, 235, 0, 0, 741, 763, 1, 0, 0, 0, 742, 743, 10, 20, 0, 0, 743, 744, 5, 210, 0, 0, 744, 763, 5, 198, 0, 0, 745, 746, 10, 19, 0, 0, 746, 747, 5, 210, 0, 0, 747, 763, 3, 118, 59, 0, 748, 749, 10, 14, 0, 0, 749, 751, 5, 88, 0, 0, 750, 752, 5, 115, 0, 0, 751, 750, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 763, 5, 116, 0, 0, 754, 760, 10, 7, 0, 0, 755, 761, 3, 116, 58, 0, 756, 757, 5, 10, 0, 0, 757, 761, 3, 118, 59, 0, 758, 759, 5, 10, 0, 0, 759, 761, 5, 200, 0, 0, 760, 755, 1, 0, 0, 0, 760, 756, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 763, 1, 0, 0, 0, 762, 671, 1, 0, 0, 0, 762, 678, 1, 0, 0, 0, 762, 685, 1, 0, 0, 0, 762, 713, 1, 0, 0, 0, 762, 716, 1, 0, 0, 0, 762, 719, 1, 0, 0, 0, 762, 722, 1, 0, 0, 0, 762, 731, 1, 0, 0, 0, 762, 737, 1, 0, 0, 0, 762, 742, 1, 0, 0, 0, 762, 745, 1, 0, 0, 0, 762, 748, 1, 0, 0, 0, 762, 754, 1, 0, 0, 0, 763, 766, 1, 0, 0, 0, 764, 762, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 75, 1, 0, 0, 0, 766, 764, 1, 0, 0, 0, 767, 772, 3, 78, 39, 0, 768, 769, 5, 206, 0, 0, 769, 771, 3, 78, 39, 0, 770, 768, 1, 0, 0, 0, 771, 774, 1, 0, 0, 0, 772, 770, 1, 0, 0, 0, 772, 773, 1, 0, 0, 0, 773, 77, 1, 0, 0, 0, 774, 772, 1, 0, 0, 0, 775, 778, 3, 80, 40, 0, 776, 778, 3, 74, 37, 0, 777, 775, 1, 0, 0, 0, 777, 776, 1, 0, 0, 0, 778, 79, 1, 0, 0, 0, 779, 780, 5, 220, 0, 0, 780, 785, 3, 118, 59, 0, 781, 782, 5, 206, 0, 0, 782, 784, 3, 118, 59, 0, 783, 781, 1, 0, 0, 0, 784, 787, 1, 0, 0, 0, 785, 783, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 788, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 788, 789, 5, 236, 0, 0, 789, 799, 1, 0, 0, 0, 790, 795, 3, 118, 59, 0, 791, 792, 5, 206, 0, 0, 792, 794, 3, 118, 59, 0, 793, 791, 1, 0, 0, 0, 794, 797, 1, 0, 0, 0, 795, 793, 1, 0, 0, 0, 795, 796, 1, 0, 0, 0, 796, 799, 1, 0, 0, 0, 797, 795, 1, 0, 0, 0, 798, 779, 1, 0, 0, 0, 798, 790, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 801, 5, 201, 0, 0, 801, 802, 3, 74, 37, 0, 802, 81, 1, 0, 0, 0, 803, 804, 5, 222, 0, 0, 804, 808, 3, 118, 59, 0, 805, 807, 3, 84, 42, 0, 806, 805, 1, 0, 0, 0, 807, 810, 1, 0, 0, 0, 808, 806, 1, 0, 0, 0, 808, 809, 1, 0, 0, 0, 809, 811, 1, 0, 0, 0, 810, 808, 1, 0, 0, 0, 811, 812, 5, 238, 0, 0, 812, 813, 5, 214, 0, 0, 813, 832, 1, 0, 0, 0, 814, 815, 5, 222, 0, 0, 815, 819, 3, 118, 59, 0, 816, 818, 3, 84, 42, 0, 817, 816, 1, 0, 0, 0, 818, 821, 1, 0, 0, 0, 819, 817, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 1, 0, 0, 0, 821, 819, 1, 0, 0, 0, 822, 824, 5, 214, 0, 0, 823, 825, 3, 82, 41, 0, 824, 823, 1, 0, 0, 0, 824, 825, 1, 0, 0, 0, 825, 826, 1, 0, 0, 0, 826, 827, 5, 222, 0, 0, 827, 828, 5, 238, 0, 0, 828, 829, 3, 118, 59, 0, 829, 830, 5, 214, 0, 0, 830, 832, 1, 0, 0, 0, 831, 803, 1, 0, 0, 0, 831, 814, 1, 0, 0, 0, 832, 83, 1, 0, 0, 0, 833, 834, 3, 118, 59, 0, 834, 835, 5, 212, 0, 0, 835, 836, 5, 200, 0, 0, 836, 845, 1, 0, 0, 0, 837, 838, 3, 118, 59, 0, 838, 839, 5, 212, 0, 0, 839, 840, 5, 218, 0, 0, 840, 841, 3, 74, 37, 0, 841, 842, 5, 234, 0, 0, 842, 845, 1, 0, 0, 0, 843, 845, 3, 118, 59, 0, 844, 833, 1, 0, 0, 0, 844, 837, 1, 0, 0, 0, 844, 843, 1, 0, 0, 0, 845, 85, 1, 0, 0, 0, 846, 851, 3, 88, 44, 0, 847, 848, 5, 206, 0, 0, 848, 850, 3, 88, 44, 0, 849, 847, 1, 0, 0, 0, 850, 853, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 87, 1, 0, 0, 0, 853, 851, 1, 0, 0, 0, 854, 855, 3, 118, 59, 0, 855, 856, 5, 10, 0, 0, 856, 857, 5, 220, 0, 0, 857, 858, 3, 2, 1, 0, 858, 859, 5, 236, 0, 0, 859, 865, 1, 0, 0, 0, 860, 861, 3, 74, 37, 0, 861, 862, 5, 10, 0, 0, 862, 863, 3, 118, 59, 0, 863, 865, 1, 0, 0, 0, 864, 854, 1, 0, 0, 0, 864, 860, 1, 0, 0, 0, 865, 89, 1, 0, 0, 0, 866, 874, 3, 122, 61, 0, 867, 868, 3, 98, 49, 0, 868, 869, 5, 210, 0, 0, 869, 871, 1, 0, 0, 0, 870, 867, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 3, 92, 46, 0, 873, 866, 1, 0, 0, 0, 873, 870, 1, 0, 0, 0, 874, 91, 1, 0, 0, 0, 875, 880, 3, 118, 59, 0, 876, 877, 5, 210, 0, 0, 877, 879, 3, 118, 59, 0, 878, 876, 1, 0, 0, 0, 879, 882, 1, 0, 0, 0, 880, 878, 1, 0, 0, 0, 880, 881, 1, 0, 0, 0, 881, 93, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 883, 884, 6, 47, -1, 0, 884, 893, 3, 98, 49, 0, 885, 893, 3, 96, 48, 0, 886, 887, 5, 220, 0, 0, 887, 888, 3, 2, 1, 0, 888, 889, 5, 236, 0, 0, 889, 893, 1, 0, 0, 0, 890, 893, 3, 82, 41, 0, 891, 893, 3, 122, 61, 0, 892, 883, 1, 0, 0, 0, 892, 885, 1, 0, 0, 0, 892, 886, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 891, 1, 0, 0, 0, 893, 902, 1, 0, 0, 0, 894, 898, 10, 3, 0, 0, 895, 899, 3, 116, 58, 0, 896, 897, 5, 10, 0, 0, 897, 899, 3, 118, 59, 0, 898, 895, 1, 0, 0, 0, 898, 896, 1, 0, 0, 0, 899, 901, 1, 0, 0, 0, 900, 894, 1, 0, 0, 0, 901, 904, 1, 0, 0, 0, 902, 900, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 95, 1, 0, 0, 0, 904, 902, 1, 0, 0, 0, 905, 906, 3, 118, 59, 0, 906, 908, 5, 220, 0, 0, 907, 909, 3, 100, 50, 0, 908, 907, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 5, 236, 0, 0, 911, 97, 1, 0, 0, 0, 912, 913, 3, 102, 51, 0, 913, 914, 5, 210, 0, 0, 914, 916, 1, 0, 0, 0, 915, 912, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 917, 1, 0, 0, 0, 917, 918, 3, 118, 59, 0, 918, 99, 1, 0, 0, 0, 919, 924, 3, 74, 37, 0, 920, 921, 5, 206, 0, 0, 921, 923, 3, 74, 37, 0, 922, 920, 1, 0, 0, 0, 923, 926, 1, 0, 0, 0, 924, 922, 1, 0, 0, 0, 924, 925, 1, 0, 0, 0, 925, 101, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 927, 928, 3, 118, 59, 0, 928, 103, 1, 0, 0, 0, 929, 938, 5, 196, 0, 0, 930, 931, 5, 210, 0, 0, 931, 938, 7, 11, 0, 0, 932, 933, 5, 198, 0, 0, 933, 935, 5, 210, 0, 0, 934, 936, 7, 11, 0, 0, 935, 934, 1, 0, 0, 0, 935, 936, 1, 0, 0, 0, 936, 938, 1, 0, 0, 0, 937, 929, 1, 0, 0, 0, 937, 930, 1, 0, 0, 0, 937, 932, 1, 0, 0, 0, 938, 105, 1, 0, 0, 0, 939, 941, 7, 12, 0, 0, 940, 939, 1, 0, 0, 0, 940, 941, 1, 0, 0, 0, 941, 948, 1, 0, 0, 0, 942, 949, 3, 104, 52, 0, 943, 949, 5, 197, 0, 0, 944, 949, 5, 198, 0, 0, 945, 949, 5, 199, 0, 0, 946, 949, 5, 82, 0, 0, 947, 949, 5, 113, 0, 0, 948, 942, 1, 0, 0, 0, 948, 943, 1, 0, 0, 0, 948, 944, 1, 0, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 107, 1, 0, 0, 0, 950, 954, 3, 106, 53, 0, 951, 954, 5, 200, 0, 0, 952, 954, 5, 116, 0, 0, 953, 950, 1, 0, 0, 0, 953, 951, 1, 0, 0, 0, 953, 952, 1, 0, 0, 0, 954, 109, 1, 0, 0, 0, 955, 956, 7, 13, 0, 0, 956, 111, 1, 0, 0, 0, 957, 958, 7, 14, 0, 0, 958, 113, 1, 0, 0, 0, 959, 960, 7, 15, 0, 0, 960, 115, 1, 0, 0, 0, 961, 964, 5, 195, 0, 0, 962, 964, 3, 114, 57, 0, 963, 961, 1, 0, 0, 0, 963, 962, 1, 0, 0, 0, 964, 117, 1, 0, 0, 0, 965, 969, 5, 195, 0, 0, 966, 969, 3, 110, 55, 0, 967, 969, 3, 112, 56, 0, 968, 965, 1, 0, 0, 0, 968, 966, 1, 0, 0, 0, 968, 967, 1, 0, 0, 0, 969, 119, 1, 0, 0, 0, 970, 971, 5, 200, 0, 0, 971, 972, 5, 212, 0, 0, 972, 973, 3, 106, 53, 0, 973, 121, 1, 0, 0, 0, 974, 975, 5, 218, 0, 0, 975, 976, 3, 118, 59, 0, 976, 977, 5, 234, 0, 0, 977, 123, 1, 0, 0, 0, 120, 127, 137, 146, 149, 153, 156, 160, 163, 166, 169, 172, 176, 180, 183, 186, 189, 193, 196, 205, 211, 232, 249, 266, 272, 278, 289, 291, 302, 305, 311, 319, 325, 327, 331, 336, 339, 342, 346, 350, 353, 355, 358, 362, 366, 369, 371, 373, 378, 389, 395, 402, 407, 411, 415, 421, 423, 430, 438, 441, 444, 463, 477, 493, 505, 517, 525, 529, 536, 542, 551, 555, 586, 603, 615, 625, 628, 632, 635, 648, 665, 669, 675, 682, 694, 698, 701, 710, 724, 751, 760, 762, 764, 772, 777, 785, 795, 798, 808, 819, 824, 831, 844, 851, 864, 870, 873, 880, 892, 898, 902, 908, 915, 924, 935, 937, 940, 948, 953, 963, 968] \ No newline at end of file +[4, 1, 242, 972, 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, 1, 0, 1, 0, 1, 0, 3, 0, 128, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 136, 8, 1, 10, 1, 12, 1, 139, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 147, 8, 2, 1, 3, 3, 3, 150, 8, 3, 1, 3, 1, 3, 3, 3, 154, 8, 3, 1, 3, 3, 3, 157, 8, 3, 1, 3, 1, 3, 3, 3, 161, 8, 3, 1, 3, 3, 3, 164, 8, 3, 1, 3, 3, 3, 167, 8, 3, 1, 3, 3, 3, 170, 8, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 1, 3, 3, 3, 177, 8, 3, 1, 3, 1, 3, 3, 3, 181, 8, 3, 1, 3, 3, 3, 184, 8, 3, 1, 3, 3, 3, 187, 8, 3, 1, 3, 3, 3, 190, 8, 3, 1, 3, 1, 3, 3, 3, 194, 8, 3, 1, 3, 3, 3, 197, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 206, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 212, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 231, 8, 8, 10, 8, 12, 8, 234, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 250, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 267, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 273, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 279, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 290, 8, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 303, 8, 18, 1, 18, 3, 18, 306, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 320, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 326, 8, 18, 10, 18, 12, 18, 329, 9, 18, 1, 19, 3, 19, 332, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 337, 8, 19, 1, 19, 3, 19, 340, 8, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 1, 19, 3, 19, 347, 8, 19, 1, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 3, 19, 354, 8, 19, 3, 19, 356, 8, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 1, 19, 3, 19, 363, 8, 19, 1, 19, 1, 19, 3, 19, 367, 8, 19, 1, 19, 3, 19, 370, 8, 19, 3, 19, 372, 8, 19, 3, 19, 374, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 379, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 390, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 396, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 401, 8, 23, 10, 23, 12, 23, 404, 9, 23, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 422, 8, 25, 3, 25, 424, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 429, 8, 26, 10, 26, 12, 26, 432, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 439, 8, 28, 1, 28, 3, 28, 442, 8, 28, 1, 28, 3, 28, 445, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 464, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 478, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 492, 8, 35, 10, 35, 12, 35, 495, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 504, 8, 35, 10, 35, 12, 35, 507, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 516, 8, 35, 10, 35, 12, 35, 519, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 526, 8, 35, 1, 35, 1, 35, 3, 35, 530, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 535, 8, 36, 10, 36, 12, 36, 538, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 543, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 550, 8, 37, 11, 37, 12, 37, 551, 1, 37, 1, 37, 3, 37, 556, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 580, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 597, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 609, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 619, 8, 37, 1, 37, 3, 37, 622, 8, 37, 1, 37, 1, 37, 3, 37, 626, 8, 37, 1, 37, 3, 37, 629, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 642, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 659, 8, 37, 1, 37, 1, 37, 3, 37, 663, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 669, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 676, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 688, 8, 37, 1, 37, 1, 37, 3, 37, 692, 8, 37, 1, 37, 3, 37, 695, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 704, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 718, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 745, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 754, 8, 37, 5, 37, 756, 8, 37, 10, 37, 12, 37, 759, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 764, 8, 38, 10, 38, 12, 38, 767, 9, 38, 1, 39, 1, 39, 3, 39, 771, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 777, 8, 40, 10, 40, 12, 40, 780, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 787, 8, 40, 10, 40, 12, 40, 790, 9, 40, 3, 40, 792, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 800, 8, 41, 10, 41, 12, 41, 803, 9, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 811, 8, 41, 10, 41, 12, 41, 814, 9, 41, 1, 41, 1, 41, 3, 41, 818, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 825, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 838, 8, 42, 1, 43, 1, 43, 1, 43, 5, 43, 843, 8, 43, 10, 43, 12, 43, 846, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 858, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 864, 8, 45, 1, 45, 3, 45, 867, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 872, 8, 46, 10, 46, 12, 46, 875, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 886, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 892, 8, 47, 5, 47, 894, 8, 47, 10, 47, 12, 47, 897, 9, 47, 1, 48, 1, 48, 1, 48, 3, 48, 902, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 49, 909, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 916, 8, 50, 10, 50, 12, 50, 919, 9, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 929, 8, 52, 3, 52, 931, 8, 52, 1, 53, 3, 53, 934, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 942, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 947, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 957, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 962, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 0, 3, 36, 74, 94, 62, 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, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 197, 198, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1099, 0, 127, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 4, 146, 1, 0, 0, 0, 6, 149, 1, 0, 0, 0, 8, 198, 1, 0, 0, 0, 10, 201, 1, 0, 0, 0, 12, 207, 1, 0, 0, 0, 14, 211, 1, 0, 0, 0, 16, 217, 1, 0, 0, 0, 18, 235, 1, 0, 0, 0, 20, 238, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 251, 1, 0, 0, 0, 26, 254, 1, 0, 0, 0, 28, 258, 1, 0, 0, 0, 30, 291, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 296, 1, 0, 0, 0, 36, 311, 1, 0, 0, 0, 38, 373, 1, 0, 0, 0, 40, 378, 1, 0, 0, 0, 42, 389, 1, 0, 0, 0, 44, 391, 1, 0, 0, 0, 46, 397, 1, 0, 0, 0, 48, 405, 1, 0, 0, 0, 50, 423, 1, 0, 0, 0, 52, 425, 1, 0, 0, 0, 54, 433, 1, 0, 0, 0, 56, 438, 1, 0, 0, 0, 58, 446, 1, 0, 0, 0, 60, 450, 1, 0, 0, 0, 62, 454, 1, 0, 0, 0, 64, 463, 1, 0, 0, 0, 66, 477, 1, 0, 0, 0, 68, 479, 1, 0, 0, 0, 70, 529, 1, 0, 0, 0, 72, 531, 1, 0, 0, 0, 74, 662, 1, 0, 0, 0, 76, 760, 1, 0, 0, 0, 78, 770, 1, 0, 0, 0, 80, 791, 1, 0, 0, 0, 82, 824, 1, 0, 0, 0, 84, 837, 1, 0, 0, 0, 86, 839, 1, 0, 0, 0, 88, 857, 1, 0, 0, 0, 90, 866, 1, 0, 0, 0, 92, 868, 1, 0, 0, 0, 94, 885, 1, 0, 0, 0, 96, 898, 1, 0, 0, 0, 98, 908, 1, 0, 0, 0, 100, 912, 1, 0, 0, 0, 102, 920, 1, 0, 0, 0, 104, 930, 1, 0, 0, 0, 106, 933, 1, 0, 0, 0, 108, 946, 1, 0, 0, 0, 110, 948, 1, 0, 0, 0, 112, 950, 1, 0, 0, 0, 114, 952, 1, 0, 0, 0, 116, 956, 1, 0, 0, 0, 118, 961, 1, 0, 0, 0, 120, 963, 1, 0, 0, 0, 122, 967, 1, 0, 0, 0, 124, 128, 3, 2, 1, 0, 125, 128, 3, 6, 3, 0, 126, 128, 3, 82, 41, 0, 127, 124, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 5, 0, 0, 1, 130, 1, 1, 0, 0, 0, 131, 137, 3, 4, 2, 0, 132, 133, 5, 176, 0, 0, 133, 134, 5, 4, 0, 0, 134, 136, 3, 4, 2, 0, 135, 132, 1, 0, 0, 0, 136, 139, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 147, 3, 6, 3, 0, 141, 142, 5, 220, 0, 0, 142, 143, 3, 2, 1, 0, 143, 144, 5, 236, 0, 0, 144, 147, 1, 0, 0, 0, 145, 147, 3, 122, 61, 0, 146, 140, 1, 0, 0, 0, 146, 141, 1, 0, 0, 0, 146, 145, 1, 0, 0, 0, 147, 5, 1, 0, 0, 0, 148, 150, 3, 8, 4, 0, 149, 148, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 153, 5, 146, 0, 0, 152, 154, 5, 49, 0, 0, 153, 152, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 156, 1, 0, 0, 0, 155, 157, 3, 10, 5, 0, 156, 155, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 158, 1, 0, 0, 0, 158, 160, 3, 72, 36, 0, 159, 161, 3, 12, 6, 0, 160, 159, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 164, 3, 14, 7, 0, 163, 162, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 167, 3, 18, 9, 0, 166, 165, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 170, 3, 20, 10, 0, 169, 168, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 172, 1, 0, 0, 0, 171, 173, 3, 22, 11, 0, 172, 171, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 176, 1, 0, 0, 0, 174, 175, 5, 189, 0, 0, 175, 177, 7, 0, 0, 0, 176, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 180, 1, 0, 0, 0, 178, 179, 5, 189, 0, 0, 179, 181, 5, 169, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 183, 1, 0, 0, 0, 182, 184, 3, 24, 12, 0, 183, 182, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 186, 1, 0, 0, 0, 185, 187, 3, 16, 8, 0, 186, 185, 1, 0, 0, 0, 186, 187, 1, 0, 0, 0, 187, 189, 1, 0, 0, 0, 188, 190, 3, 26, 13, 0, 189, 188, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 194, 3, 30, 15, 0, 192, 194, 3, 32, 16, 0, 193, 191, 1, 0, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 196, 1, 0, 0, 0, 195, 197, 3, 34, 17, 0, 196, 195, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 7, 1, 0, 0, 0, 198, 199, 5, 189, 0, 0, 199, 200, 3, 86, 43, 0, 200, 9, 1, 0, 0, 0, 201, 202, 5, 168, 0, 0, 202, 205, 5, 198, 0, 0, 203, 204, 5, 189, 0, 0, 204, 206, 5, 164, 0, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 11, 1, 0, 0, 0, 207, 208, 5, 68, 0, 0, 208, 209, 3, 36, 18, 0, 209, 13, 1, 0, 0, 0, 210, 212, 7, 1, 0, 0, 211, 210, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 5, 90, 0, 0, 215, 216, 3, 72, 36, 0, 216, 15, 1, 0, 0, 0, 217, 218, 5, 188, 0, 0, 218, 219, 3, 118, 59, 0, 219, 220, 5, 10, 0, 0, 220, 221, 5, 220, 0, 0, 221, 222, 3, 56, 28, 0, 222, 232, 5, 236, 0, 0, 223, 224, 5, 206, 0, 0, 224, 225, 3, 118, 59, 0, 225, 226, 5, 10, 0, 0, 226, 227, 5, 220, 0, 0, 227, 228, 3, 56, 28, 0, 228, 229, 5, 236, 0, 0, 229, 231, 1, 0, 0, 0, 230, 223, 1, 0, 0, 0, 231, 234, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 17, 1, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 5, 129, 0, 0, 236, 237, 3, 74, 37, 0, 237, 19, 1, 0, 0, 0, 238, 239, 5, 187, 0, 0, 239, 240, 3, 74, 37, 0, 240, 21, 1, 0, 0, 0, 241, 242, 5, 73, 0, 0, 242, 249, 5, 18, 0, 0, 243, 244, 7, 0, 0, 0, 244, 245, 5, 220, 0, 0, 245, 246, 3, 72, 36, 0, 246, 247, 5, 236, 0, 0, 247, 250, 1, 0, 0, 0, 248, 250, 3, 72, 36, 0, 249, 243, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 23, 1, 0, 0, 0, 251, 252, 5, 74, 0, 0, 252, 253, 3, 74, 37, 0, 253, 25, 1, 0, 0, 0, 254, 255, 5, 122, 0, 0, 255, 256, 5, 18, 0, 0, 256, 257, 3, 46, 23, 0, 257, 27, 1, 0, 0, 0, 258, 259, 5, 122, 0, 0, 259, 260, 5, 18, 0, 0, 260, 261, 3, 72, 36, 0, 261, 29, 1, 0, 0, 0, 262, 263, 5, 99, 0, 0, 263, 266, 3, 74, 37, 0, 264, 265, 5, 206, 0, 0, 265, 267, 3, 74, 37, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 272, 1, 0, 0, 0, 268, 269, 5, 189, 0, 0, 269, 273, 5, 164, 0, 0, 270, 271, 5, 18, 0, 0, 271, 273, 3, 72, 36, 0, 272, 268, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 292, 1, 0, 0, 0, 274, 275, 5, 99, 0, 0, 275, 278, 3, 74, 37, 0, 276, 277, 5, 189, 0, 0, 277, 279, 5, 164, 0, 0, 278, 276, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 281, 5, 118, 0, 0, 281, 282, 3, 74, 37, 0, 282, 292, 1, 0, 0, 0, 283, 284, 5, 99, 0, 0, 284, 285, 3, 74, 37, 0, 285, 286, 5, 118, 0, 0, 286, 289, 3, 74, 37, 0, 287, 288, 5, 18, 0, 0, 288, 290, 3, 72, 36, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 292, 1, 0, 0, 0, 291, 262, 1, 0, 0, 0, 291, 274, 1, 0, 0, 0, 291, 283, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 5, 118, 0, 0, 294, 295, 3, 74, 37, 0, 295, 33, 1, 0, 0, 0, 296, 297, 5, 150, 0, 0, 297, 298, 3, 52, 26, 0, 298, 35, 1, 0, 0, 0, 299, 300, 6, 18, -1, 0, 300, 302, 3, 94, 47, 0, 301, 303, 5, 61, 0, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 305, 1, 0, 0, 0, 304, 306, 3, 44, 22, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 312, 1, 0, 0, 0, 307, 308, 5, 220, 0, 0, 308, 309, 3, 36, 18, 0, 309, 310, 5, 236, 0, 0, 310, 312, 1, 0, 0, 0, 311, 299, 1, 0, 0, 0, 311, 307, 1, 0, 0, 0, 312, 327, 1, 0, 0, 0, 313, 314, 10, 3, 0, 0, 314, 315, 3, 40, 20, 0, 315, 316, 3, 36, 18, 4, 316, 326, 1, 0, 0, 0, 317, 319, 10, 4, 0, 0, 318, 320, 3, 38, 19, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 90, 0, 0, 322, 323, 3, 36, 18, 0, 323, 324, 3, 42, 21, 0, 324, 326, 1, 0, 0, 0, 325, 313, 1, 0, 0, 0, 325, 317, 1, 0, 0, 0, 326, 329, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 327, 328, 1, 0, 0, 0, 328, 37, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 340, 5, 84, 0, 0, 334, 336, 5, 84, 0, 0, 335, 337, 7, 2, 0, 0, 336, 335, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 340, 1, 0, 0, 0, 338, 340, 7, 2, 0, 0, 339, 331, 1, 0, 0, 0, 339, 334, 1, 0, 0, 0, 339, 338, 1, 0, 0, 0, 340, 374, 1, 0, 0, 0, 341, 343, 7, 3, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 7, 4, 0, 0, 345, 347, 5, 123, 0, 0, 346, 345, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 356, 1, 0, 0, 0, 348, 350, 7, 4, 0, 0, 349, 351, 5, 123, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 353, 1, 0, 0, 0, 352, 354, 7, 3, 0, 0, 353, 352, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 356, 1, 0, 0, 0, 355, 342, 1, 0, 0, 0, 355, 348, 1, 0, 0, 0, 356, 374, 1, 0, 0, 0, 357, 359, 7, 5, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 1, 0, 0, 0, 360, 362, 5, 69, 0, 0, 361, 363, 5, 123, 0, 0, 362, 361, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 372, 1, 0, 0, 0, 364, 366, 5, 69, 0, 0, 365, 367, 5, 123, 0, 0, 366, 365, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 370, 7, 5, 0, 0, 369, 368, 1, 0, 0, 0, 369, 370, 1, 0, 0, 0, 370, 372, 1, 0, 0, 0, 371, 358, 1, 0, 0, 0, 371, 364, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 339, 1, 0, 0, 0, 373, 355, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 39, 1, 0, 0, 0, 375, 376, 5, 31, 0, 0, 376, 379, 5, 90, 0, 0, 377, 379, 5, 206, 0, 0, 378, 375, 1, 0, 0, 0, 378, 377, 1, 0, 0, 0, 379, 41, 1, 0, 0, 0, 380, 381, 5, 119, 0, 0, 381, 390, 3, 72, 36, 0, 382, 383, 5, 179, 0, 0, 383, 384, 5, 220, 0, 0, 384, 385, 3, 72, 36, 0, 385, 386, 5, 236, 0, 0, 386, 390, 1, 0, 0, 0, 387, 388, 5, 179, 0, 0, 388, 390, 3, 72, 36, 0, 389, 380, 1, 0, 0, 0, 389, 382, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 43, 1, 0, 0, 0, 391, 392, 5, 144, 0, 0, 392, 395, 3, 50, 25, 0, 393, 394, 5, 118, 0, 0, 394, 396, 3, 50, 25, 0, 395, 393, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 45, 1, 0, 0, 0, 397, 402, 3, 48, 24, 0, 398, 399, 5, 206, 0, 0, 399, 401, 3, 48, 24, 0, 400, 398, 1, 0, 0, 0, 401, 404, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 47, 1, 0, 0, 0, 404, 402, 1, 0, 0, 0, 405, 407, 3, 74, 37, 0, 406, 408, 7, 6, 0, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 117, 0, 0, 410, 412, 7, 7, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 26, 0, 0, 414, 416, 5, 200, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 49, 1, 0, 0, 0, 417, 424, 3, 122, 61, 0, 418, 421, 3, 106, 53, 0, 419, 420, 5, 238, 0, 0, 420, 422, 3, 106, 53, 0, 421, 419, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 417, 1, 0, 0, 0, 423, 418, 1, 0, 0, 0, 424, 51, 1, 0, 0, 0, 425, 430, 3, 54, 27, 0, 426, 427, 5, 206, 0, 0, 427, 429, 3, 54, 27, 0, 428, 426, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 53, 1, 0, 0, 0, 432, 430, 1, 0, 0, 0, 433, 434, 3, 118, 59, 0, 434, 435, 5, 212, 0, 0, 435, 436, 3, 108, 54, 0, 436, 55, 1, 0, 0, 0, 437, 439, 3, 58, 29, 0, 438, 437, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 441, 1, 0, 0, 0, 440, 442, 3, 60, 30, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 444, 1, 0, 0, 0, 443, 445, 3, 62, 31, 0, 444, 443, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 57, 1, 0, 0, 0, 446, 447, 5, 126, 0, 0, 447, 448, 5, 18, 0, 0, 448, 449, 3, 72, 36, 0, 449, 59, 1, 0, 0, 0, 450, 451, 5, 122, 0, 0, 451, 452, 5, 18, 0, 0, 452, 453, 3, 46, 23, 0, 453, 61, 1, 0, 0, 0, 454, 455, 7, 8, 0, 0, 455, 456, 3, 64, 32, 0, 456, 63, 1, 0, 0, 0, 457, 464, 3, 66, 33, 0, 458, 459, 5, 16, 0, 0, 459, 460, 3, 66, 33, 0, 460, 461, 5, 6, 0, 0, 461, 462, 3, 66, 33, 0, 462, 464, 1, 0, 0, 0, 463, 457, 1, 0, 0, 0, 463, 458, 1, 0, 0, 0, 464, 65, 1, 0, 0, 0, 465, 466, 5, 33, 0, 0, 466, 478, 5, 142, 0, 0, 467, 468, 5, 175, 0, 0, 468, 478, 5, 128, 0, 0, 469, 470, 5, 175, 0, 0, 470, 478, 5, 64, 0, 0, 471, 472, 3, 106, 53, 0, 472, 473, 5, 128, 0, 0, 473, 478, 1, 0, 0, 0, 474, 475, 3, 106, 53, 0, 475, 476, 5, 64, 0, 0, 476, 478, 1, 0, 0, 0, 477, 465, 1, 0, 0, 0, 477, 467, 1, 0, 0, 0, 477, 469, 1, 0, 0, 0, 477, 471, 1, 0, 0, 0, 477, 474, 1, 0, 0, 0, 478, 67, 1, 0, 0, 0, 479, 480, 3, 74, 37, 0, 480, 481, 5, 0, 0, 1, 481, 69, 1, 0, 0, 0, 482, 530, 3, 118, 59, 0, 483, 484, 3, 118, 59, 0, 484, 485, 5, 220, 0, 0, 485, 486, 3, 118, 59, 0, 486, 493, 3, 70, 35, 0, 487, 488, 5, 206, 0, 0, 488, 489, 3, 118, 59, 0, 489, 490, 3, 70, 35, 0, 490, 492, 1, 0, 0, 0, 491, 487, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 493, 494, 1, 0, 0, 0, 494, 496, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 496, 497, 5, 236, 0, 0, 497, 530, 1, 0, 0, 0, 498, 499, 3, 118, 59, 0, 499, 500, 5, 220, 0, 0, 500, 505, 3, 120, 60, 0, 501, 502, 5, 206, 0, 0, 502, 504, 3, 120, 60, 0, 503, 501, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 508, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 5, 236, 0, 0, 509, 530, 1, 0, 0, 0, 510, 511, 3, 118, 59, 0, 511, 512, 5, 220, 0, 0, 512, 517, 3, 70, 35, 0, 513, 514, 5, 206, 0, 0, 514, 516, 3, 70, 35, 0, 515, 513, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 5, 236, 0, 0, 521, 530, 1, 0, 0, 0, 522, 523, 3, 118, 59, 0, 523, 525, 5, 220, 0, 0, 524, 526, 3, 72, 36, 0, 525, 524, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 5, 236, 0, 0, 528, 530, 1, 0, 0, 0, 529, 482, 1, 0, 0, 0, 529, 483, 1, 0, 0, 0, 529, 498, 1, 0, 0, 0, 529, 510, 1, 0, 0, 0, 529, 522, 1, 0, 0, 0, 530, 71, 1, 0, 0, 0, 531, 536, 3, 74, 37, 0, 532, 533, 5, 206, 0, 0, 533, 535, 3, 74, 37, 0, 534, 532, 1, 0, 0, 0, 535, 538, 1, 0, 0, 0, 536, 534, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 73, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 6, 37, -1, 0, 540, 542, 5, 19, 0, 0, 541, 543, 3, 74, 37, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 549, 1, 0, 0, 0, 544, 545, 5, 186, 0, 0, 545, 546, 3, 74, 37, 0, 546, 547, 5, 163, 0, 0, 547, 548, 3, 74, 37, 0, 548, 550, 1, 0, 0, 0, 549, 544, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 555, 1, 0, 0, 0, 553, 554, 5, 52, 0, 0, 554, 556, 3, 74, 37, 0, 555, 553, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 558, 5, 53, 0, 0, 558, 663, 1, 0, 0, 0, 559, 560, 5, 20, 0, 0, 560, 561, 5, 220, 0, 0, 561, 562, 3, 74, 37, 0, 562, 563, 5, 10, 0, 0, 563, 564, 3, 70, 35, 0, 564, 565, 5, 236, 0, 0, 565, 663, 1, 0, 0, 0, 566, 567, 5, 36, 0, 0, 567, 663, 5, 200, 0, 0, 568, 569, 5, 86, 0, 0, 569, 570, 3, 74, 37, 0, 570, 571, 3, 110, 55, 0, 571, 663, 1, 0, 0, 0, 572, 573, 5, 155, 0, 0, 573, 574, 5, 220, 0, 0, 574, 575, 3, 74, 37, 0, 575, 576, 5, 68, 0, 0, 576, 579, 3, 74, 37, 0, 577, 578, 5, 65, 0, 0, 578, 580, 3, 74, 37, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 582, 5, 236, 0, 0, 582, 663, 1, 0, 0, 0, 583, 584, 5, 166, 0, 0, 584, 663, 5, 200, 0, 0, 585, 586, 5, 171, 0, 0, 586, 587, 5, 220, 0, 0, 587, 588, 7, 9, 0, 0, 588, 589, 5, 200, 0, 0, 589, 590, 5, 68, 0, 0, 590, 591, 3, 74, 37, 0, 591, 592, 5, 236, 0, 0, 592, 663, 1, 0, 0, 0, 593, 594, 3, 118, 59, 0, 594, 596, 5, 220, 0, 0, 595, 597, 3, 72, 36, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 5, 236, 0, 0, 599, 600, 1, 0, 0, 0, 600, 601, 5, 125, 0, 0, 601, 602, 5, 220, 0, 0, 602, 603, 3, 56, 28, 0, 603, 604, 5, 236, 0, 0, 604, 663, 1, 0, 0, 0, 605, 606, 3, 118, 59, 0, 606, 608, 5, 220, 0, 0, 607, 609, 3, 72, 36, 0, 608, 607, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 611, 5, 236, 0, 0, 611, 612, 1, 0, 0, 0, 612, 613, 5, 125, 0, 0, 613, 614, 3, 118, 59, 0, 614, 663, 1, 0, 0, 0, 615, 621, 3, 118, 59, 0, 616, 618, 5, 220, 0, 0, 617, 619, 3, 72, 36, 0, 618, 617, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 5, 236, 0, 0, 621, 616, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 625, 5, 220, 0, 0, 624, 626, 5, 49, 0, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 628, 1, 0, 0, 0, 627, 629, 3, 76, 38, 0, 628, 627, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 5, 236, 0, 0, 631, 663, 1, 0, 0, 0, 632, 663, 3, 82, 41, 0, 633, 663, 3, 108, 54, 0, 634, 635, 5, 208, 0, 0, 635, 663, 3, 74, 37, 18, 636, 637, 5, 115, 0, 0, 637, 663, 3, 74, 37, 12, 638, 639, 3, 98, 49, 0, 639, 640, 5, 210, 0, 0, 640, 642, 1, 0, 0, 0, 641, 638, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 663, 5, 202, 0, 0, 644, 645, 5, 220, 0, 0, 645, 646, 3, 2, 1, 0, 646, 647, 5, 236, 0, 0, 647, 663, 1, 0, 0, 0, 648, 649, 5, 220, 0, 0, 649, 650, 3, 74, 37, 0, 650, 651, 5, 236, 0, 0, 651, 663, 1, 0, 0, 0, 652, 653, 5, 220, 0, 0, 653, 654, 3, 72, 36, 0, 654, 655, 5, 236, 0, 0, 655, 663, 1, 0, 0, 0, 656, 658, 5, 219, 0, 0, 657, 659, 3, 72, 36, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 660, 1, 0, 0, 0, 660, 663, 5, 235, 0, 0, 661, 663, 3, 90, 45, 0, 662, 539, 1, 0, 0, 0, 662, 559, 1, 0, 0, 0, 662, 566, 1, 0, 0, 0, 662, 568, 1, 0, 0, 0, 662, 572, 1, 0, 0, 0, 662, 583, 1, 0, 0, 0, 662, 585, 1, 0, 0, 0, 662, 593, 1, 0, 0, 0, 662, 605, 1, 0, 0, 0, 662, 615, 1, 0, 0, 0, 662, 632, 1, 0, 0, 0, 662, 633, 1, 0, 0, 0, 662, 634, 1, 0, 0, 0, 662, 636, 1, 0, 0, 0, 662, 641, 1, 0, 0, 0, 662, 644, 1, 0, 0, 0, 662, 648, 1, 0, 0, 0, 662, 652, 1, 0, 0, 0, 662, 656, 1, 0, 0, 0, 662, 661, 1, 0, 0, 0, 663, 757, 1, 0, 0, 0, 664, 668, 10, 17, 0, 0, 665, 669, 5, 202, 0, 0, 666, 669, 5, 238, 0, 0, 667, 669, 5, 227, 0, 0, 668, 665, 1, 0, 0, 0, 668, 666, 1, 0, 0, 0, 668, 667, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 756, 3, 74, 37, 18, 671, 675, 10, 16, 0, 0, 672, 676, 5, 228, 0, 0, 673, 676, 5, 208, 0, 0, 674, 676, 5, 207, 0, 0, 675, 672, 1, 0, 0, 0, 675, 673, 1, 0, 0, 0, 675, 674, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 756, 3, 74, 37, 17, 678, 703, 10, 15, 0, 0, 679, 704, 5, 211, 0, 0, 680, 704, 5, 212, 0, 0, 681, 704, 5, 223, 0, 0, 682, 704, 5, 221, 0, 0, 683, 704, 5, 222, 0, 0, 684, 704, 5, 213, 0, 0, 685, 704, 5, 214, 0, 0, 686, 688, 5, 115, 0, 0, 687, 686, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 1, 0, 0, 0, 689, 691, 5, 80, 0, 0, 690, 692, 5, 25, 0, 0, 691, 690, 1, 0, 0, 0, 691, 692, 1, 0, 0, 0, 692, 704, 1, 0, 0, 0, 693, 695, 5, 115, 0, 0, 694, 693, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 704, 7, 10, 0, 0, 697, 704, 5, 232, 0, 0, 698, 704, 5, 233, 0, 0, 699, 704, 5, 225, 0, 0, 700, 704, 5, 216, 0, 0, 701, 704, 5, 217, 0, 0, 702, 704, 5, 224, 0, 0, 703, 679, 1, 0, 0, 0, 703, 680, 1, 0, 0, 0, 703, 681, 1, 0, 0, 0, 703, 682, 1, 0, 0, 0, 703, 683, 1, 0, 0, 0, 703, 684, 1, 0, 0, 0, 703, 685, 1, 0, 0, 0, 703, 687, 1, 0, 0, 0, 703, 694, 1, 0, 0, 0, 703, 697, 1, 0, 0, 0, 703, 698, 1, 0, 0, 0, 703, 699, 1, 0, 0, 0, 703, 700, 1, 0, 0, 0, 703, 701, 1, 0, 0, 0, 703, 702, 1, 0, 0, 0, 704, 705, 1, 0, 0, 0, 705, 756, 3, 74, 37, 16, 706, 707, 10, 13, 0, 0, 707, 708, 5, 226, 0, 0, 708, 756, 3, 74, 37, 14, 709, 710, 10, 11, 0, 0, 710, 711, 5, 6, 0, 0, 711, 756, 3, 74, 37, 12, 712, 713, 10, 10, 0, 0, 713, 714, 5, 121, 0, 0, 714, 756, 3, 74, 37, 11, 715, 717, 10, 9, 0, 0, 716, 718, 5, 115, 0, 0, 717, 716, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 16, 0, 0, 720, 721, 3, 74, 37, 0, 721, 722, 5, 6, 0, 0, 722, 723, 3, 74, 37, 10, 723, 756, 1, 0, 0, 0, 724, 725, 10, 8, 0, 0, 725, 726, 5, 229, 0, 0, 726, 727, 3, 74, 37, 0, 727, 728, 5, 205, 0, 0, 728, 729, 3, 74, 37, 8, 729, 756, 1, 0, 0, 0, 730, 731, 10, 21, 0, 0, 731, 732, 5, 219, 0, 0, 732, 733, 3, 74, 37, 0, 733, 734, 5, 235, 0, 0, 734, 756, 1, 0, 0, 0, 735, 736, 10, 20, 0, 0, 736, 737, 5, 210, 0, 0, 737, 756, 5, 198, 0, 0, 738, 739, 10, 19, 0, 0, 739, 740, 5, 210, 0, 0, 740, 756, 3, 118, 59, 0, 741, 742, 10, 14, 0, 0, 742, 744, 5, 88, 0, 0, 743, 745, 5, 115, 0, 0, 744, 743, 1, 0, 0, 0, 744, 745, 1, 0, 0, 0, 745, 746, 1, 0, 0, 0, 746, 756, 5, 116, 0, 0, 747, 753, 10, 7, 0, 0, 748, 754, 3, 116, 58, 0, 749, 750, 5, 10, 0, 0, 750, 754, 3, 118, 59, 0, 751, 752, 5, 10, 0, 0, 752, 754, 5, 200, 0, 0, 753, 748, 1, 0, 0, 0, 753, 749, 1, 0, 0, 0, 753, 751, 1, 0, 0, 0, 754, 756, 1, 0, 0, 0, 755, 664, 1, 0, 0, 0, 755, 671, 1, 0, 0, 0, 755, 678, 1, 0, 0, 0, 755, 706, 1, 0, 0, 0, 755, 709, 1, 0, 0, 0, 755, 712, 1, 0, 0, 0, 755, 715, 1, 0, 0, 0, 755, 724, 1, 0, 0, 0, 755, 730, 1, 0, 0, 0, 755, 735, 1, 0, 0, 0, 755, 738, 1, 0, 0, 0, 755, 741, 1, 0, 0, 0, 755, 747, 1, 0, 0, 0, 756, 759, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 75, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 760, 765, 3, 78, 39, 0, 761, 762, 5, 206, 0, 0, 762, 764, 3, 78, 39, 0, 763, 761, 1, 0, 0, 0, 764, 767, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 765, 766, 1, 0, 0, 0, 766, 77, 1, 0, 0, 0, 767, 765, 1, 0, 0, 0, 768, 771, 3, 80, 40, 0, 769, 771, 3, 74, 37, 0, 770, 768, 1, 0, 0, 0, 770, 769, 1, 0, 0, 0, 771, 79, 1, 0, 0, 0, 772, 773, 5, 220, 0, 0, 773, 778, 3, 118, 59, 0, 774, 775, 5, 206, 0, 0, 775, 777, 3, 118, 59, 0, 776, 774, 1, 0, 0, 0, 777, 780, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 781, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 781, 782, 5, 236, 0, 0, 782, 792, 1, 0, 0, 0, 783, 788, 3, 118, 59, 0, 784, 785, 5, 206, 0, 0, 785, 787, 3, 118, 59, 0, 786, 784, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 788, 789, 1, 0, 0, 0, 789, 792, 1, 0, 0, 0, 790, 788, 1, 0, 0, 0, 791, 772, 1, 0, 0, 0, 791, 783, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 794, 5, 201, 0, 0, 794, 795, 3, 74, 37, 0, 795, 81, 1, 0, 0, 0, 796, 797, 5, 222, 0, 0, 797, 801, 3, 118, 59, 0, 798, 800, 3, 84, 42, 0, 799, 798, 1, 0, 0, 0, 800, 803, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 801, 802, 1, 0, 0, 0, 802, 804, 1, 0, 0, 0, 803, 801, 1, 0, 0, 0, 804, 805, 5, 238, 0, 0, 805, 806, 5, 214, 0, 0, 806, 825, 1, 0, 0, 0, 807, 808, 5, 222, 0, 0, 808, 812, 3, 118, 59, 0, 809, 811, 3, 84, 42, 0, 810, 809, 1, 0, 0, 0, 811, 814, 1, 0, 0, 0, 812, 810, 1, 0, 0, 0, 812, 813, 1, 0, 0, 0, 813, 815, 1, 0, 0, 0, 814, 812, 1, 0, 0, 0, 815, 817, 5, 214, 0, 0, 816, 818, 3, 82, 41, 0, 817, 816, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 5, 222, 0, 0, 820, 821, 5, 238, 0, 0, 821, 822, 3, 118, 59, 0, 822, 823, 5, 214, 0, 0, 823, 825, 1, 0, 0, 0, 824, 796, 1, 0, 0, 0, 824, 807, 1, 0, 0, 0, 825, 83, 1, 0, 0, 0, 826, 827, 3, 118, 59, 0, 827, 828, 5, 212, 0, 0, 828, 829, 5, 200, 0, 0, 829, 838, 1, 0, 0, 0, 830, 831, 3, 118, 59, 0, 831, 832, 5, 212, 0, 0, 832, 833, 5, 218, 0, 0, 833, 834, 3, 74, 37, 0, 834, 835, 5, 234, 0, 0, 835, 838, 1, 0, 0, 0, 836, 838, 3, 118, 59, 0, 837, 826, 1, 0, 0, 0, 837, 830, 1, 0, 0, 0, 837, 836, 1, 0, 0, 0, 838, 85, 1, 0, 0, 0, 839, 844, 3, 88, 44, 0, 840, 841, 5, 206, 0, 0, 841, 843, 3, 88, 44, 0, 842, 840, 1, 0, 0, 0, 843, 846, 1, 0, 0, 0, 844, 842, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 87, 1, 0, 0, 0, 846, 844, 1, 0, 0, 0, 847, 848, 3, 118, 59, 0, 848, 849, 5, 10, 0, 0, 849, 850, 5, 220, 0, 0, 850, 851, 3, 2, 1, 0, 851, 852, 5, 236, 0, 0, 852, 858, 1, 0, 0, 0, 853, 854, 3, 74, 37, 0, 854, 855, 5, 10, 0, 0, 855, 856, 3, 118, 59, 0, 856, 858, 1, 0, 0, 0, 857, 847, 1, 0, 0, 0, 857, 853, 1, 0, 0, 0, 858, 89, 1, 0, 0, 0, 859, 867, 3, 122, 61, 0, 860, 861, 3, 98, 49, 0, 861, 862, 5, 210, 0, 0, 862, 864, 1, 0, 0, 0, 863, 860, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 1, 0, 0, 0, 865, 867, 3, 92, 46, 0, 866, 859, 1, 0, 0, 0, 866, 863, 1, 0, 0, 0, 867, 91, 1, 0, 0, 0, 868, 873, 3, 118, 59, 0, 869, 870, 5, 210, 0, 0, 870, 872, 3, 118, 59, 0, 871, 869, 1, 0, 0, 0, 872, 875, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 93, 1, 0, 0, 0, 875, 873, 1, 0, 0, 0, 876, 877, 6, 47, -1, 0, 877, 886, 3, 98, 49, 0, 878, 886, 3, 96, 48, 0, 879, 880, 5, 220, 0, 0, 880, 881, 3, 2, 1, 0, 881, 882, 5, 236, 0, 0, 882, 886, 1, 0, 0, 0, 883, 886, 3, 82, 41, 0, 884, 886, 3, 122, 61, 0, 885, 876, 1, 0, 0, 0, 885, 878, 1, 0, 0, 0, 885, 879, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 885, 884, 1, 0, 0, 0, 886, 895, 1, 0, 0, 0, 887, 891, 10, 3, 0, 0, 888, 892, 3, 116, 58, 0, 889, 890, 5, 10, 0, 0, 890, 892, 3, 118, 59, 0, 891, 888, 1, 0, 0, 0, 891, 889, 1, 0, 0, 0, 892, 894, 1, 0, 0, 0, 893, 887, 1, 0, 0, 0, 894, 897, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 95, 1, 0, 0, 0, 897, 895, 1, 0, 0, 0, 898, 899, 3, 118, 59, 0, 899, 901, 5, 220, 0, 0, 900, 902, 3, 100, 50, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 904, 5, 236, 0, 0, 904, 97, 1, 0, 0, 0, 905, 906, 3, 102, 51, 0, 906, 907, 5, 210, 0, 0, 907, 909, 1, 0, 0, 0, 908, 905, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 3, 118, 59, 0, 911, 99, 1, 0, 0, 0, 912, 917, 3, 74, 37, 0, 913, 914, 5, 206, 0, 0, 914, 916, 3, 74, 37, 0, 915, 913, 1, 0, 0, 0, 916, 919, 1, 0, 0, 0, 917, 915, 1, 0, 0, 0, 917, 918, 1, 0, 0, 0, 918, 101, 1, 0, 0, 0, 919, 917, 1, 0, 0, 0, 920, 921, 3, 118, 59, 0, 921, 103, 1, 0, 0, 0, 922, 931, 5, 196, 0, 0, 923, 924, 5, 210, 0, 0, 924, 931, 7, 11, 0, 0, 925, 926, 5, 198, 0, 0, 926, 928, 5, 210, 0, 0, 927, 929, 7, 11, 0, 0, 928, 927, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 931, 1, 0, 0, 0, 930, 922, 1, 0, 0, 0, 930, 923, 1, 0, 0, 0, 930, 925, 1, 0, 0, 0, 931, 105, 1, 0, 0, 0, 932, 934, 7, 12, 0, 0, 933, 932, 1, 0, 0, 0, 933, 934, 1, 0, 0, 0, 934, 941, 1, 0, 0, 0, 935, 942, 3, 104, 52, 0, 936, 942, 5, 197, 0, 0, 937, 942, 5, 198, 0, 0, 938, 942, 5, 199, 0, 0, 939, 942, 5, 82, 0, 0, 940, 942, 5, 113, 0, 0, 941, 935, 1, 0, 0, 0, 941, 936, 1, 0, 0, 0, 941, 937, 1, 0, 0, 0, 941, 938, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 107, 1, 0, 0, 0, 943, 947, 3, 106, 53, 0, 944, 947, 5, 200, 0, 0, 945, 947, 5, 116, 0, 0, 946, 943, 1, 0, 0, 0, 946, 944, 1, 0, 0, 0, 946, 945, 1, 0, 0, 0, 947, 109, 1, 0, 0, 0, 948, 949, 7, 13, 0, 0, 949, 111, 1, 0, 0, 0, 950, 951, 7, 14, 0, 0, 951, 113, 1, 0, 0, 0, 952, 953, 7, 15, 0, 0, 953, 115, 1, 0, 0, 0, 954, 957, 5, 195, 0, 0, 955, 957, 3, 114, 57, 0, 956, 954, 1, 0, 0, 0, 956, 955, 1, 0, 0, 0, 957, 117, 1, 0, 0, 0, 958, 962, 5, 195, 0, 0, 959, 962, 3, 110, 55, 0, 960, 962, 3, 112, 56, 0, 961, 958, 1, 0, 0, 0, 961, 959, 1, 0, 0, 0, 961, 960, 1, 0, 0, 0, 962, 119, 1, 0, 0, 0, 963, 964, 5, 200, 0, 0, 964, 965, 5, 212, 0, 0, 965, 966, 3, 106, 53, 0, 966, 121, 1, 0, 0, 0, 967, 968, 5, 218, 0, 0, 968, 969, 3, 118, 59, 0, 969, 970, 5, 234, 0, 0, 970, 123, 1, 0, 0, 0, 120, 127, 137, 146, 149, 153, 156, 160, 163, 166, 169, 172, 176, 180, 183, 186, 189, 193, 196, 205, 211, 232, 249, 266, 272, 278, 289, 291, 302, 305, 311, 319, 325, 327, 331, 336, 339, 342, 346, 350, 353, 355, 358, 362, 366, 369, 371, 373, 378, 389, 395, 402, 407, 411, 415, 421, 423, 430, 438, 441, 444, 463, 477, 493, 505, 517, 525, 529, 536, 542, 551, 555, 579, 596, 608, 618, 621, 625, 628, 641, 658, 662, 668, 675, 687, 691, 694, 703, 717, 744, 753, 755, 757, 765, 770, 778, 788, 791, 801, 812, 817, 824, 837, 844, 857, 863, 866, 873, 885, 891, 895, 901, 908, 917, 928, 930, 933, 941, 946, 956, 961] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLParser.py b/posthog/hogql/grammar/HogQLParser.py index 6bf1053a93059..dff73f2d50927 100644 --- a/posthog/hogql/grammar/HogQLParser.py +++ b/posthog/hogql/grammar/HogQLParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,242,979,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, + 4,1,242,972,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, @@ -57,344 +57,342 @@ def serializedATN(): 36,5,36,535,8,36,10,36,12,36,538,9,36,1,37,1,37,1,37,3,37,543,8, 37,1,37,1,37,1,37,1,37,1,37,4,37,550,8,37,11,37,12,37,551,1,37,1, 37,3,37,556,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,587,8,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,604, - 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,616, - 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,626,8,37,1,37, - 3,37,629,8,37,1,37,1,37,3,37,633,8,37,1,37,3,37,636,8,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,649,8,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,3,37,666,8,37,1,37,1,37,3,37,670,8,37,1,37,1,37,1,37,1,37, - 3,37,676,8,37,1,37,1,37,1,37,1,37,1,37,3,37,683,8,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,695,8,37,1,37,1,37,3, - 37,699,8,37,1,37,3,37,702,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 3,37,711,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,725,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3, + 37,580,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,3,37,597,8,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,3,37,609,8,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,3,37,619,8,37,1,37,3,37,622,8,37,1,37,1,37,3,37,626, + 8,37,1,37,3,37,629,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,3,37,642,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,659,8,37,1,37,1,37, + 3,37,663,8,37,1,37,1,37,1,37,1,37,3,37,669,8,37,1,37,1,37,1,37,1, + 37,1,37,3,37,676,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,3,37,688,8,37,1,37,1,37,3,37,692,8,37,1,37,3,37,695,8,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,704,8,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,718,8,37,1,37, 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,3,37,752,8,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,3,37,761,8,37,5,37,763,8,37,10,37,12,37,766,9,37,1,38,1,38, - 1,38,5,38,771,8,38,10,38,12,38,774,9,38,1,39,1,39,3,39,778,8,39, - 1,40,1,40,1,40,1,40,5,40,784,8,40,10,40,12,40,787,9,40,1,40,1,40, - 1,40,1,40,1,40,5,40,794,8,40,10,40,12,40,797,9,40,3,40,799,8,40, - 1,40,1,40,1,40,1,41,1,41,1,41,5,41,807,8,41,10,41,12,41,810,9,41, - 1,41,1,41,1,41,1,41,1,41,1,41,5,41,818,8,41,10,41,12,41,821,9,41, - 1,41,1,41,3,41,825,8,41,1,41,1,41,1,41,1,41,1,41,3,41,832,8,41,1, - 42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,3,42,845,8, - 42,1,43,1,43,1,43,5,43,850,8,43,10,43,12,43,853,9,43,1,44,1,44,1, - 44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,865,8,44,1,45,1,45,1, - 45,1,45,3,45,871,8,45,1,45,3,45,874,8,45,1,46,1,46,1,46,5,46,879, - 8,46,10,46,12,46,882,9,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47, - 1,47,3,47,893,8,47,1,47,1,47,1,47,1,47,3,47,899,8,47,5,47,901,8, - 47,10,47,12,47,904,9,47,1,48,1,48,1,48,3,48,909,8,48,1,48,1,48,1, - 49,1,49,1,49,3,49,916,8,49,1,49,1,49,1,50,1,50,1,50,5,50,923,8,50, - 10,50,12,50,926,9,50,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,3,52, - 936,8,52,3,52,938,8,52,1,53,3,53,941,8,53,1,53,1,53,1,53,1,53,1, - 53,1,53,3,53,949,8,53,1,54,1,54,1,54,3,54,954,8,54,1,55,1,55,1,56, - 1,56,1,57,1,57,1,58,1,58,3,58,964,8,58,1,59,1,59,1,59,3,59,969,8, - 59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61,0,3,36,74,94,62, - 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,0, - 16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12,4,0,4,4,7, - 8,12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42,43,2, - 0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170,2,0,79, - 79,98,98,1,0,197,198,2,0,208,208,228,228,8,0,37,37,76,76,108,108, - 110,110,132,132,145,145,185,185,190,190,13,0,2,24,26,36,38,75,77, - 81,83,107,109,109,111,112,114,115,117,130,133,144,146,184,186,189, - 191,192,4,0,36,36,62,62,77,77,91,91,1107,0,127,1,0,0,0,2,131,1,0, - 0,0,4,146,1,0,0,0,6,149,1,0,0,0,8,198,1,0,0,0,10,201,1,0,0,0,12, - 207,1,0,0,0,14,211,1,0,0,0,16,217,1,0,0,0,18,235,1,0,0,0,20,238, - 1,0,0,0,22,241,1,0,0,0,24,251,1,0,0,0,26,254,1,0,0,0,28,258,1,0, - 0,0,30,291,1,0,0,0,32,293,1,0,0,0,34,296,1,0,0,0,36,311,1,0,0,0, - 38,373,1,0,0,0,40,378,1,0,0,0,42,389,1,0,0,0,44,391,1,0,0,0,46,397, - 1,0,0,0,48,405,1,0,0,0,50,423,1,0,0,0,52,425,1,0,0,0,54,433,1,0, - 0,0,56,438,1,0,0,0,58,446,1,0,0,0,60,450,1,0,0,0,62,454,1,0,0,0, - 64,463,1,0,0,0,66,477,1,0,0,0,68,479,1,0,0,0,70,529,1,0,0,0,72,531, - 1,0,0,0,74,669,1,0,0,0,76,767,1,0,0,0,78,777,1,0,0,0,80,798,1,0, - 0,0,82,831,1,0,0,0,84,844,1,0,0,0,86,846,1,0,0,0,88,864,1,0,0,0, - 90,873,1,0,0,0,92,875,1,0,0,0,94,892,1,0,0,0,96,905,1,0,0,0,98,915, - 1,0,0,0,100,919,1,0,0,0,102,927,1,0,0,0,104,937,1,0,0,0,106,940, - 1,0,0,0,108,953,1,0,0,0,110,955,1,0,0,0,112,957,1,0,0,0,114,959, - 1,0,0,0,116,963,1,0,0,0,118,968,1,0,0,0,120,970,1,0,0,0,122,974, - 1,0,0,0,124,128,3,2,1,0,125,128,3,6,3,0,126,128,3,82,41,0,127,124, - 1,0,0,0,127,125,1,0,0,0,127,126,1,0,0,0,128,129,1,0,0,0,129,130, - 5,0,0,1,130,1,1,0,0,0,131,137,3,4,2,0,132,133,5,176,0,0,133,134, - 5,4,0,0,134,136,3,4,2,0,135,132,1,0,0,0,136,139,1,0,0,0,137,135, - 1,0,0,0,137,138,1,0,0,0,138,3,1,0,0,0,139,137,1,0,0,0,140,147,3, - 6,3,0,141,142,5,220,0,0,142,143,3,2,1,0,143,144,5,236,0,0,144,147, - 1,0,0,0,145,147,3,122,61,0,146,140,1,0,0,0,146,141,1,0,0,0,146,145, - 1,0,0,0,147,5,1,0,0,0,148,150,3,8,4,0,149,148,1,0,0,0,149,150,1, - 0,0,0,150,151,1,0,0,0,151,153,5,146,0,0,152,154,5,49,0,0,153,152, - 1,0,0,0,153,154,1,0,0,0,154,156,1,0,0,0,155,157,3,10,5,0,156,155, - 1,0,0,0,156,157,1,0,0,0,157,158,1,0,0,0,158,160,3,72,36,0,159,161, - 3,12,6,0,160,159,1,0,0,0,160,161,1,0,0,0,161,163,1,0,0,0,162,164, - 3,14,7,0,163,162,1,0,0,0,163,164,1,0,0,0,164,166,1,0,0,0,165,167, - 3,18,9,0,166,165,1,0,0,0,166,167,1,0,0,0,167,169,1,0,0,0,168,170, - 3,20,10,0,169,168,1,0,0,0,169,170,1,0,0,0,170,172,1,0,0,0,171,173, - 3,22,11,0,172,171,1,0,0,0,172,173,1,0,0,0,173,176,1,0,0,0,174,175, - 5,189,0,0,175,177,7,0,0,0,176,174,1,0,0,0,176,177,1,0,0,0,177,180, - 1,0,0,0,178,179,5,189,0,0,179,181,5,169,0,0,180,178,1,0,0,0,180, - 181,1,0,0,0,181,183,1,0,0,0,182,184,3,24,12,0,183,182,1,0,0,0,183, - 184,1,0,0,0,184,186,1,0,0,0,185,187,3,16,8,0,186,185,1,0,0,0,186, - 187,1,0,0,0,187,189,1,0,0,0,188,190,3,26,13,0,189,188,1,0,0,0,189, - 190,1,0,0,0,190,193,1,0,0,0,191,194,3,30,15,0,192,194,3,32,16,0, - 193,191,1,0,0,0,193,192,1,0,0,0,193,194,1,0,0,0,194,196,1,0,0,0, - 195,197,3,34,17,0,196,195,1,0,0,0,196,197,1,0,0,0,197,7,1,0,0,0, - 198,199,5,189,0,0,199,200,3,86,43,0,200,9,1,0,0,0,201,202,5,168, - 0,0,202,205,5,198,0,0,203,204,5,189,0,0,204,206,5,164,0,0,205,203, - 1,0,0,0,205,206,1,0,0,0,206,11,1,0,0,0,207,208,5,68,0,0,208,209, - 3,36,18,0,209,13,1,0,0,0,210,212,7,1,0,0,211,210,1,0,0,0,211,212, - 1,0,0,0,212,213,1,0,0,0,213,214,5,9,0,0,214,215,5,90,0,0,215,216, - 3,72,36,0,216,15,1,0,0,0,217,218,5,188,0,0,218,219,3,118,59,0,219, - 220,5,10,0,0,220,221,5,220,0,0,221,222,3,56,28,0,222,232,5,236,0, - 0,223,224,5,206,0,0,224,225,3,118,59,0,225,226,5,10,0,0,226,227, - 5,220,0,0,227,228,3,56,28,0,228,229,5,236,0,0,229,231,1,0,0,0,230, - 223,1,0,0,0,231,234,1,0,0,0,232,230,1,0,0,0,232,233,1,0,0,0,233, - 17,1,0,0,0,234,232,1,0,0,0,235,236,5,129,0,0,236,237,3,74,37,0,237, - 19,1,0,0,0,238,239,5,187,0,0,239,240,3,74,37,0,240,21,1,0,0,0,241, - 242,5,73,0,0,242,249,5,18,0,0,243,244,7,0,0,0,244,245,5,220,0,0, - 245,246,3,72,36,0,246,247,5,236,0,0,247,250,1,0,0,0,248,250,3,72, - 36,0,249,243,1,0,0,0,249,248,1,0,0,0,250,23,1,0,0,0,251,252,5,74, - 0,0,252,253,3,74,37,0,253,25,1,0,0,0,254,255,5,122,0,0,255,256,5, - 18,0,0,256,257,3,46,23,0,257,27,1,0,0,0,258,259,5,122,0,0,259,260, - 5,18,0,0,260,261,3,72,36,0,261,29,1,0,0,0,262,263,5,99,0,0,263,266, - 3,74,37,0,264,265,5,206,0,0,265,267,3,74,37,0,266,264,1,0,0,0,266, - 267,1,0,0,0,267,272,1,0,0,0,268,269,5,189,0,0,269,273,5,164,0,0, - 270,271,5,18,0,0,271,273,3,72,36,0,272,268,1,0,0,0,272,270,1,0,0, - 0,272,273,1,0,0,0,273,292,1,0,0,0,274,275,5,99,0,0,275,278,3,74, - 37,0,276,277,5,189,0,0,277,279,5,164,0,0,278,276,1,0,0,0,278,279, - 1,0,0,0,279,280,1,0,0,0,280,281,5,118,0,0,281,282,3,74,37,0,282, - 292,1,0,0,0,283,284,5,99,0,0,284,285,3,74,37,0,285,286,5,118,0,0, - 286,289,3,74,37,0,287,288,5,18,0,0,288,290,3,72,36,0,289,287,1,0, - 0,0,289,290,1,0,0,0,290,292,1,0,0,0,291,262,1,0,0,0,291,274,1,0, - 0,0,291,283,1,0,0,0,292,31,1,0,0,0,293,294,5,118,0,0,294,295,3,74, - 37,0,295,33,1,0,0,0,296,297,5,150,0,0,297,298,3,52,26,0,298,35,1, - 0,0,0,299,300,6,18,-1,0,300,302,3,94,47,0,301,303,5,61,0,0,302,301, - 1,0,0,0,302,303,1,0,0,0,303,305,1,0,0,0,304,306,3,44,22,0,305,304, - 1,0,0,0,305,306,1,0,0,0,306,312,1,0,0,0,307,308,5,220,0,0,308,309, - 3,36,18,0,309,310,5,236,0,0,310,312,1,0,0,0,311,299,1,0,0,0,311, - 307,1,0,0,0,312,327,1,0,0,0,313,314,10,3,0,0,314,315,3,40,20,0,315, - 316,3,36,18,4,316,326,1,0,0,0,317,319,10,4,0,0,318,320,3,38,19,0, - 319,318,1,0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321,322,5,90,0,0, - 322,323,3,36,18,0,323,324,3,42,21,0,324,326,1,0,0,0,325,313,1,0, - 0,0,325,317,1,0,0,0,326,329,1,0,0,0,327,325,1,0,0,0,327,328,1,0, - 0,0,328,37,1,0,0,0,329,327,1,0,0,0,330,332,7,2,0,0,331,330,1,0,0, - 0,331,332,1,0,0,0,332,333,1,0,0,0,333,340,5,84,0,0,334,336,5,84, - 0,0,335,337,7,2,0,0,336,335,1,0,0,0,336,337,1,0,0,0,337,340,1,0, - 0,0,338,340,7,2,0,0,339,331,1,0,0,0,339,334,1,0,0,0,339,338,1,0, - 0,0,340,374,1,0,0,0,341,343,7,3,0,0,342,341,1,0,0,0,342,343,1,0, - 0,0,343,344,1,0,0,0,344,346,7,4,0,0,345,347,5,123,0,0,346,345,1, - 0,0,0,346,347,1,0,0,0,347,356,1,0,0,0,348,350,7,4,0,0,349,351,5, - 123,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,353,1,0,0,0,352,354, - 7,3,0,0,353,352,1,0,0,0,353,354,1,0,0,0,354,356,1,0,0,0,355,342, - 1,0,0,0,355,348,1,0,0,0,356,374,1,0,0,0,357,359,7,5,0,0,358,357, - 1,0,0,0,358,359,1,0,0,0,359,360,1,0,0,0,360,362,5,69,0,0,361,363, - 5,123,0,0,362,361,1,0,0,0,362,363,1,0,0,0,363,372,1,0,0,0,364,366, - 5,69,0,0,365,367,5,123,0,0,366,365,1,0,0,0,366,367,1,0,0,0,367,369, - 1,0,0,0,368,370,7,5,0,0,369,368,1,0,0,0,369,370,1,0,0,0,370,372, - 1,0,0,0,371,358,1,0,0,0,371,364,1,0,0,0,372,374,1,0,0,0,373,339, - 1,0,0,0,373,355,1,0,0,0,373,371,1,0,0,0,374,39,1,0,0,0,375,376,5, - 31,0,0,376,379,5,90,0,0,377,379,5,206,0,0,378,375,1,0,0,0,378,377, - 1,0,0,0,379,41,1,0,0,0,380,381,5,119,0,0,381,390,3,72,36,0,382,383, - 5,179,0,0,383,384,5,220,0,0,384,385,3,72,36,0,385,386,5,236,0,0, - 386,390,1,0,0,0,387,388,5,179,0,0,388,390,3,72,36,0,389,380,1,0, - 0,0,389,382,1,0,0,0,389,387,1,0,0,0,390,43,1,0,0,0,391,392,5,144, - 0,0,392,395,3,50,25,0,393,394,5,118,0,0,394,396,3,50,25,0,395,393, - 1,0,0,0,395,396,1,0,0,0,396,45,1,0,0,0,397,402,3,48,24,0,398,399, - 5,206,0,0,399,401,3,48,24,0,400,398,1,0,0,0,401,404,1,0,0,0,402, - 400,1,0,0,0,402,403,1,0,0,0,403,47,1,0,0,0,404,402,1,0,0,0,405,407, - 3,74,37,0,406,408,7,6,0,0,407,406,1,0,0,0,407,408,1,0,0,0,408,411, - 1,0,0,0,409,410,5,117,0,0,410,412,7,7,0,0,411,409,1,0,0,0,411,412, - 1,0,0,0,412,415,1,0,0,0,413,414,5,26,0,0,414,416,5,200,0,0,415,413, - 1,0,0,0,415,416,1,0,0,0,416,49,1,0,0,0,417,424,3,122,61,0,418,421, - 3,106,53,0,419,420,5,238,0,0,420,422,3,106,53,0,421,419,1,0,0,0, - 421,422,1,0,0,0,422,424,1,0,0,0,423,417,1,0,0,0,423,418,1,0,0,0, - 424,51,1,0,0,0,425,430,3,54,27,0,426,427,5,206,0,0,427,429,3,54, - 27,0,428,426,1,0,0,0,429,432,1,0,0,0,430,428,1,0,0,0,430,431,1,0, - 0,0,431,53,1,0,0,0,432,430,1,0,0,0,433,434,3,118,59,0,434,435,5, - 212,0,0,435,436,3,108,54,0,436,55,1,0,0,0,437,439,3,58,29,0,438, - 437,1,0,0,0,438,439,1,0,0,0,439,441,1,0,0,0,440,442,3,60,30,0,441, - 440,1,0,0,0,441,442,1,0,0,0,442,444,1,0,0,0,443,445,3,62,31,0,444, - 443,1,0,0,0,444,445,1,0,0,0,445,57,1,0,0,0,446,447,5,126,0,0,447, - 448,5,18,0,0,448,449,3,72,36,0,449,59,1,0,0,0,450,451,5,122,0,0, - 451,452,5,18,0,0,452,453,3,46,23,0,453,61,1,0,0,0,454,455,7,8,0, - 0,455,456,3,64,32,0,456,63,1,0,0,0,457,464,3,66,33,0,458,459,5,16, - 0,0,459,460,3,66,33,0,460,461,5,6,0,0,461,462,3,66,33,0,462,464, - 1,0,0,0,463,457,1,0,0,0,463,458,1,0,0,0,464,65,1,0,0,0,465,466,5, - 33,0,0,466,478,5,142,0,0,467,468,5,175,0,0,468,478,5,128,0,0,469, - 470,5,175,0,0,470,478,5,64,0,0,471,472,3,106,53,0,472,473,5,128, - 0,0,473,478,1,0,0,0,474,475,3,106,53,0,475,476,5,64,0,0,476,478, - 1,0,0,0,477,465,1,0,0,0,477,467,1,0,0,0,477,469,1,0,0,0,477,471, - 1,0,0,0,477,474,1,0,0,0,478,67,1,0,0,0,479,480,3,74,37,0,480,481, - 5,0,0,1,481,69,1,0,0,0,482,530,3,118,59,0,483,484,3,118,59,0,484, - 485,5,220,0,0,485,486,3,118,59,0,486,493,3,70,35,0,487,488,5,206, - 0,0,488,489,3,118,59,0,489,490,3,70,35,0,490,492,1,0,0,0,491,487, - 1,0,0,0,492,495,1,0,0,0,493,491,1,0,0,0,493,494,1,0,0,0,494,496, - 1,0,0,0,495,493,1,0,0,0,496,497,5,236,0,0,497,530,1,0,0,0,498,499, - 3,118,59,0,499,500,5,220,0,0,500,505,3,120,60,0,501,502,5,206,0, - 0,502,504,3,120,60,0,503,501,1,0,0,0,504,507,1,0,0,0,505,503,1,0, - 0,0,505,506,1,0,0,0,506,508,1,0,0,0,507,505,1,0,0,0,508,509,5,236, - 0,0,509,530,1,0,0,0,510,511,3,118,59,0,511,512,5,220,0,0,512,517, - 3,70,35,0,513,514,5,206,0,0,514,516,3,70,35,0,515,513,1,0,0,0,516, - 519,1,0,0,0,517,515,1,0,0,0,517,518,1,0,0,0,518,520,1,0,0,0,519, - 517,1,0,0,0,520,521,5,236,0,0,521,530,1,0,0,0,522,523,3,118,59,0, - 523,525,5,220,0,0,524,526,3,72,36,0,525,524,1,0,0,0,525,526,1,0, - 0,0,526,527,1,0,0,0,527,528,5,236,0,0,528,530,1,0,0,0,529,482,1, - 0,0,0,529,483,1,0,0,0,529,498,1,0,0,0,529,510,1,0,0,0,529,522,1, - 0,0,0,530,71,1,0,0,0,531,536,3,74,37,0,532,533,5,206,0,0,533,535, - 3,74,37,0,534,532,1,0,0,0,535,538,1,0,0,0,536,534,1,0,0,0,536,537, - 1,0,0,0,537,73,1,0,0,0,538,536,1,0,0,0,539,540,6,37,-1,0,540,542, - 5,19,0,0,541,543,3,74,37,0,542,541,1,0,0,0,542,543,1,0,0,0,543,549, - 1,0,0,0,544,545,5,186,0,0,545,546,3,74,37,0,546,547,5,163,0,0,547, - 548,3,74,37,0,548,550,1,0,0,0,549,544,1,0,0,0,550,551,1,0,0,0,551, - 549,1,0,0,0,551,552,1,0,0,0,552,555,1,0,0,0,553,554,5,52,0,0,554, - 556,3,74,37,0,555,553,1,0,0,0,555,556,1,0,0,0,556,557,1,0,0,0,557, - 558,5,53,0,0,558,670,1,0,0,0,559,560,5,20,0,0,560,561,5,220,0,0, - 561,562,3,74,37,0,562,563,5,10,0,0,563,564,3,70,35,0,564,565,5,236, - 0,0,565,670,1,0,0,0,566,567,5,36,0,0,567,670,5,200,0,0,568,569,5, - 59,0,0,569,570,5,220,0,0,570,571,3,110,55,0,571,572,5,68,0,0,572, - 573,3,74,37,0,573,574,5,236,0,0,574,670,1,0,0,0,575,576,5,86,0,0, - 576,577,3,74,37,0,577,578,3,110,55,0,578,670,1,0,0,0,579,580,5,155, - 0,0,580,581,5,220,0,0,581,582,3,74,37,0,582,583,5,68,0,0,583,586, - 3,74,37,0,584,585,5,65,0,0,585,587,3,74,37,0,586,584,1,0,0,0,586, - 587,1,0,0,0,587,588,1,0,0,0,588,589,5,236,0,0,589,670,1,0,0,0,590, - 591,5,166,0,0,591,670,5,200,0,0,592,593,5,171,0,0,593,594,5,220, - 0,0,594,595,7,9,0,0,595,596,5,200,0,0,596,597,5,68,0,0,597,598,3, - 74,37,0,598,599,5,236,0,0,599,670,1,0,0,0,600,601,3,118,59,0,601, - 603,5,220,0,0,602,604,3,72,36,0,603,602,1,0,0,0,603,604,1,0,0,0, - 604,605,1,0,0,0,605,606,5,236,0,0,606,607,1,0,0,0,607,608,5,125, - 0,0,608,609,5,220,0,0,609,610,3,56,28,0,610,611,5,236,0,0,611,670, - 1,0,0,0,612,613,3,118,59,0,613,615,5,220,0,0,614,616,3,72,36,0,615, - 614,1,0,0,0,615,616,1,0,0,0,616,617,1,0,0,0,617,618,5,236,0,0,618, - 619,1,0,0,0,619,620,5,125,0,0,620,621,3,118,59,0,621,670,1,0,0,0, - 622,628,3,118,59,0,623,625,5,220,0,0,624,626,3,72,36,0,625,624,1, - 0,0,0,625,626,1,0,0,0,626,627,1,0,0,0,627,629,5,236,0,0,628,623, - 1,0,0,0,628,629,1,0,0,0,629,630,1,0,0,0,630,632,5,220,0,0,631,633, - 5,49,0,0,632,631,1,0,0,0,632,633,1,0,0,0,633,635,1,0,0,0,634,636, - 3,76,38,0,635,634,1,0,0,0,635,636,1,0,0,0,636,637,1,0,0,0,637,638, - 5,236,0,0,638,670,1,0,0,0,639,670,3,82,41,0,640,670,3,108,54,0,641, - 642,5,208,0,0,642,670,3,74,37,18,643,644,5,115,0,0,644,670,3,74, - 37,12,645,646,3,98,49,0,646,647,5,210,0,0,647,649,1,0,0,0,648,645, - 1,0,0,0,648,649,1,0,0,0,649,650,1,0,0,0,650,670,5,202,0,0,651,652, - 5,220,0,0,652,653,3,2,1,0,653,654,5,236,0,0,654,670,1,0,0,0,655, - 656,5,220,0,0,656,657,3,74,37,0,657,658,5,236,0,0,658,670,1,0,0, - 0,659,660,5,220,0,0,660,661,3,72,36,0,661,662,5,236,0,0,662,670, - 1,0,0,0,663,665,5,219,0,0,664,666,3,72,36,0,665,664,1,0,0,0,665, - 666,1,0,0,0,666,667,1,0,0,0,667,670,5,235,0,0,668,670,3,90,45,0, - 669,539,1,0,0,0,669,559,1,0,0,0,669,566,1,0,0,0,669,568,1,0,0,0, - 669,575,1,0,0,0,669,579,1,0,0,0,669,590,1,0,0,0,669,592,1,0,0,0, - 669,600,1,0,0,0,669,612,1,0,0,0,669,622,1,0,0,0,669,639,1,0,0,0, - 669,640,1,0,0,0,669,641,1,0,0,0,669,643,1,0,0,0,669,648,1,0,0,0, - 669,651,1,0,0,0,669,655,1,0,0,0,669,659,1,0,0,0,669,663,1,0,0,0, - 669,668,1,0,0,0,670,764,1,0,0,0,671,675,10,17,0,0,672,676,5,202, - 0,0,673,676,5,238,0,0,674,676,5,227,0,0,675,672,1,0,0,0,675,673, - 1,0,0,0,675,674,1,0,0,0,676,677,1,0,0,0,677,763,3,74,37,18,678,682, - 10,16,0,0,679,683,5,228,0,0,680,683,5,208,0,0,681,683,5,207,0,0, - 682,679,1,0,0,0,682,680,1,0,0,0,682,681,1,0,0,0,683,684,1,0,0,0, - 684,763,3,74,37,17,685,710,10,15,0,0,686,711,5,211,0,0,687,711,5, - 212,0,0,688,711,5,223,0,0,689,711,5,221,0,0,690,711,5,222,0,0,691, - 711,5,213,0,0,692,711,5,214,0,0,693,695,5,115,0,0,694,693,1,0,0, - 0,694,695,1,0,0,0,695,696,1,0,0,0,696,698,5,80,0,0,697,699,5,25, - 0,0,698,697,1,0,0,0,698,699,1,0,0,0,699,711,1,0,0,0,700,702,5,115, - 0,0,701,700,1,0,0,0,701,702,1,0,0,0,702,703,1,0,0,0,703,711,7,10, - 0,0,704,711,5,232,0,0,705,711,5,233,0,0,706,711,5,225,0,0,707,711, - 5,216,0,0,708,711,5,217,0,0,709,711,5,224,0,0,710,686,1,0,0,0,710, - 687,1,0,0,0,710,688,1,0,0,0,710,689,1,0,0,0,710,690,1,0,0,0,710, - 691,1,0,0,0,710,692,1,0,0,0,710,694,1,0,0,0,710,701,1,0,0,0,710, - 704,1,0,0,0,710,705,1,0,0,0,710,706,1,0,0,0,710,707,1,0,0,0,710, - 708,1,0,0,0,710,709,1,0,0,0,711,712,1,0,0,0,712,763,3,74,37,16,713, - 714,10,13,0,0,714,715,5,226,0,0,715,763,3,74,37,14,716,717,10,11, - 0,0,717,718,5,6,0,0,718,763,3,74,37,12,719,720,10,10,0,0,720,721, - 5,121,0,0,721,763,3,74,37,11,722,724,10,9,0,0,723,725,5,115,0,0, - 724,723,1,0,0,0,724,725,1,0,0,0,725,726,1,0,0,0,726,727,5,16,0,0, - 727,728,3,74,37,0,728,729,5,6,0,0,729,730,3,74,37,10,730,763,1,0, - 0,0,731,732,10,8,0,0,732,733,5,229,0,0,733,734,3,74,37,0,734,735, - 5,205,0,0,735,736,3,74,37,8,736,763,1,0,0,0,737,738,10,21,0,0,738, - 739,5,219,0,0,739,740,3,74,37,0,740,741,5,235,0,0,741,763,1,0,0, - 0,742,743,10,20,0,0,743,744,5,210,0,0,744,763,5,198,0,0,745,746, - 10,19,0,0,746,747,5,210,0,0,747,763,3,118,59,0,748,749,10,14,0,0, - 749,751,5,88,0,0,750,752,5,115,0,0,751,750,1,0,0,0,751,752,1,0,0, - 0,752,753,1,0,0,0,753,763,5,116,0,0,754,760,10,7,0,0,755,761,3,116, - 58,0,756,757,5,10,0,0,757,761,3,118,59,0,758,759,5,10,0,0,759,761, - 5,200,0,0,760,755,1,0,0,0,760,756,1,0,0,0,760,758,1,0,0,0,761,763, - 1,0,0,0,762,671,1,0,0,0,762,678,1,0,0,0,762,685,1,0,0,0,762,713, - 1,0,0,0,762,716,1,0,0,0,762,719,1,0,0,0,762,722,1,0,0,0,762,731, - 1,0,0,0,762,737,1,0,0,0,762,742,1,0,0,0,762,745,1,0,0,0,762,748, - 1,0,0,0,762,754,1,0,0,0,763,766,1,0,0,0,764,762,1,0,0,0,764,765, - 1,0,0,0,765,75,1,0,0,0,766,764,1,0,0,0,767,772,3,78,39,0,768,769, - 5,206,0,0,769,771,3,78,39,0,770,768,1,0,0,0,771,774,1,0,0,0,772, - 770,1,0,0,0,772,773,1,0,0,0,773,77,1,0,0,0,774,772,1,0,0,0,775,778, - 3,80,40,0,776,778,3,74,37,0,777,775,1,0,0,0,777,776,1,0,0,0,778, - 79,1,0,0,0,779,780,5,220,0,0,780,785,3,118,59,0,781,782,5,206,0, - 0,782,784,3,118,59,0,783,781,1,0,0,0,784,787,1,0,0,0,785,783,1,0, - 0,0,785,786,1,0,0,0,786,788,1,0,0,0,787,785,1,0,0,0,788,789,5,236, - 0,0,789,799,1,0,0,0,790,795,3,118,59,0,791,792,5,206,0,0,792,794, - 3,118,59,0,793,791,1,0,0,0,794,797,1,0,0,0,795,793,1,0,0,0,795,796, - 1,0,0,0,796,799,1,0,0,0,797,795,1,0,0,0,798,779,1,0,0,0,798,790, - 1,0,0,0,799,800,1,0,0,0,800,801,5,201,0,0,801,802,3,74,37,0,802, - 81,1,0,0,0,803,804,5,222,0,0,804,808,3,118,59,0,805,807,3,84,42, - 0,806,805,1,0,0,0,807,810,1,0,0,0,808,806,1,0,0,0,808,809,1,0,0, - 0,809,811,1,0,0,0,810,808,1,0,0,0,811,812,5,238,0,0,812,813,5,214, - 0,0,813,832,1,0,0,0,814,815,5,222,0,0,815,819,3,118,59,0,816,818, - 3,84,42,0,817,816,1,0,0,0,818,821,1,0,0,0,819,817,1,0,0,0,819,820, - 1,0,0,0,820,822,1,0,0,0,821,819,1,0,0,0,822,824,5,214,0,0,823,825, - 3,82,41,0,824,823,1,0,0,0,824,825,1,0,0,0,825,826,1,0,0,0,826,827, - 5,222,0,0,827,828,5,238,0,0,828,829,3,118,59,0,829,830,5,214,0,0, - 830,832,1,0,0,0,831,803,1,0,0,0,831,814,1,0,0,0,832,83,1,0,0,0,833, - 834,3,118,59,0,834,835,5,212,0,0,835,836,5,200,0,0,836,845,1,0,0, - 0,837,838,3,118,59,0,838,839,5,212,0,0,839,840,5,218,0,0,840,841, - 3,74,37,0,841,842,5,234,0,0,842,845,1,0,0,0,843,845,3,118,59,0,844, - 833,1,0,0,0,844,837,1,0,0,0,844,843,1,0,0,0,845,85,1,0,0,0,846,851, - 3,88,44,0,847,848,5,206,0,0,848,850,3,88,44,0,849,847,1,0,0,0,850, - 853,1,0,0,0,851,849,1,0,0,0,851,852,1,0,0,0,852,87,1,0,0,0,853,851, - 1,0,0,0,854,855,3,118,59,0,855,856,5,10,0,0,856,857,5,220,0,0,857, - 858,3,2,1,0,858,859,5,236,0,0,859,865,1,0,0,0,860,861,3,74,37,0, - 861,862,5,10,0,0,862,863,3,118,59,0,863,865,1,0,0,0,864,854,1,0, - 0,0,864,860,1,0,0,0,865,89,1,0,0,0,866,874,3,122,61,0,867,868,3, - 98,49,0,868,869,5,210,0,0,869,871,1,0,0,0,870,867,1,0,0,0,870,871, - 1,0,0,0,871,872,1,0,0,0,872,874,3,92,46,0,873,866,1,0,0,0,873,870, - 1,0,0,0,874,91,1,0,0,0,875,880,3,118,59,0,876,877,5,210,0,0,877, - 879,3,118,59,0,878,876,1,0,0,0,879,882,1,0,0,0,880,878,1,0,0,0,880, - 881,1,0,0,0,881,93,1,0,0,0,882,880,1,0,0,0,883,884,6,47,-1,0,884, - 893,3,98,49,0,885,893,3,96,48,0,886,887,5,220,0,0,887,888,3,2,1, - 0,888,889,5,236,0,0,889,893,1,0,0,0,890,893,3,82,41,0,891,893,3, - 122,61,0,892,883,1,0,0,0,892,885,1,0,0,0,892,886,1,0,0,0,892,890, - 1,0,0,0,892,891,1,0,0,0,893,902,1,0,0,0,894,898,10,3,0,0,895,899, - 3,116,58,0,896,897,5,10,0,0,897,899,3,118,59,0,898,895,1,0,0,0,898, - 896,1,0,0,0,899,901,1,0,0,0,900,894,1,0,0,0,901,904,1,0,0,0,902, - 900,1,0,0,0,902,903,1,0,0,0,903,95,1,0,0,0,904,902,1,0,0,0,905,906, - 3,118,59,0,906,908,5,220,0,0,907,909,3,100,50,0,908,907,1,0,0,0, - 908,909,1,0,0,0,909,910,1,0,0,0,910,911,5,236,0,0,911,97,1,0,0,0, - 912,913,3,102,51,0,913,914,5,210,0,0,914,916,1,0,0,0,915,912,1,0, - 0,0,915,916,1,0,0,0,916,917,1,0,0,0,917,918,3,118,59,0,918,99,1, - 0,0,0,919,924,3,74,37,0,920,921,5,206,0,0,921,923,3,74,37,0,922, - 920,1,0,0,0,923,926,1,0,0,0,924,922,1,0,0,0,924,925,1,0,0,0,925, - 101,1,0,0,0,926,924,1,0,0,0,927,928,3,118,59,0,928,103,1,0,0,0,929, - 938,5,196,0,0,930,931,5,210,0,0,931,938,7,11,0,0,932,933,5,198,0, - 0,933,935,5,210,0,0,934,936,7,11,0,0,935,934,1,0,0,0,935,936,1,0, - 0,0,936,938,1,0,0,0,937,929,1,0,0,0,937,930,1,0,0,0,937,932,1,0, - 0,0,938,105,1,0,0,0,939,941,7,12,0,0,940,939,1,0,0,0,940,941,1,0, - 0,0,941,948,1,0,0,0,942,949,3,104,52,0,943,949,5,197,0,0,944,949, - 5,198,0,0,945,949,5,199,0,0,946,949,5,82,0,0,947,949,5,113,0,0,948, - 942,1,0,0,0,948,943,1,0,0,0,948,944,1,0,0,0,948,945,1,0,0,0,948, - 946,1,0,0,0,948,947,1,0,0,0,949,107,1,0,0,0,950,954,3,106,53,0,951, - 954,5,200,0,0,952,954,5,116,0,0,953,950,1,0,0,0,953,951,1,0,0,0, - 953,952,1,0,0,0,954,109,1,0,0,0,955,956,7,13,0,0,956,111,1,0,0,0, - 957,958,7,14,0,0,958,113,1,0,0,0,959,960,7,15,0,0,960,115,1,0,0, - 0,961,964,5,195,0,0,962,964,3,114,57,0,963,961,1,0,0,0,963,962,1, - 0,0,0,964,117,1,0,0,0,965,969,5,195,0,0,966,969,3,110,55,0,967,969, - 3,112,56,0,968,965,1,0,0,0,968,966,1,0,0,0,968,967,1,0,0,0,969,119, - 1,0,0,0,970,971,5,200,0,0,971,972,5,212,0,0,972,973,3,106,53,0,973, - 121,1,0,0,0,974,975,5,218,0,0,975,976,3,118,59,0,976,977,5,234,0, - 0,977,123,1,0,0,0,120,127,137,146,149,153,156,160,163,166,169,172, - 176,180,183,186,189,193,196,205,211,232,249,266,272,278,289,291, - 302,305,311,319,325,327,331,336,339,342,346,350,353,355,358,362, - 366,369,371,373,378,389,395,402,407,411,415,421,423,430,438,441, - 444,463,477,493,505,517,525,529,536,542,551,555,586,603,615,625, - 628,632,635,648,665,669,675,682,694,698,701,710,724,751,760,762, - 764,772,777,785,795,798,808,819,824,831,844,851,864,870,873,880, - 892,898,902,908,915,924,935,937,940,948,953,963,968 + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,745, + 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,754,8,37,5,37,756,8, + 37,10,37,12,37,759,9,37,1,38,1,38,1,38,5,38,764,8,38,10,38,12,38, + 767,9,38,1,39,1,39,3,39,771,8,39,1,40,1,40,1,40,1,40,5,40,777,8, + 40,10,40,12,40,780,9,40,1,40,1,40,1,40,1,40,1,40,5,40,787,8,40,10, + 40,12,40,790,9,40,3,40,792,8,40,1,40,1,40,1,40,1,41,1,41,1,41,5, + 41,800,8,41,10,41,12,41,803,9,41,1,41,1,41,1,41,1,41,1,41,1,41,5, + 41,811,8,41,10,41,12,41,814,9,41,1,41,1,41,3,41,818,8,41,1,41,1, + 41,1,41,1,41,1,41,3,41,825,8,41,1,42,1,42,1,42,1,42,1,42,1,42,1, + 42,1,42,1,42,1,42,1,42,3,42,838,8,42,1,43,1,43,1,43,5,43,843,8,43, + 10,43,12,43,846,9,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44, + 1,44,3,44,858,8,44,1,45,1,45,1,45,1,45,3,45,864,8,45,1,45,3,45,867, + 8,45,1,46,1,46,1,46,5,46,872,8,46,10,46,12,46,875,9,46,1,47,1,47, + 1,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,886,8,47,1,47,1,47,1,47, + 1,47,3,47,892,8,47,5,47,894,8,47,10,47,12,47,897,9,47,1,48,1,48, + 1,48,3,48,902,8,48,1,48,1,48,1,49,1,49,1,49,3,49,909,8,49,1,49,1, + 49,1,50,1,50,1,50,5,50,916,8,50,10,50,12,50,919,9,50,1,51,1,51,1, + 52,1,52,1,52,1,52,1,52,1,52,3,52,929,8,52,3,52,931,8,52,1,53,3,53, + 934,8,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,942,8,53,1,54,1,54,1, + 54,3,54,947,8,54,1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,3,58,957, + 8,58,1,59,1,59,1,59,3,59,962,8,59,1,60,1,60,1,60,1,60,1,61,1,61, + 1,61,1,61,1,61,0,3,36,74,94,62,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,0,16,2,0,32,32,141,141,2,0,84,84,96, + 96,3,0,4,4,8,8,12,12,4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140, + 2,0,4,4,8,8,2,0,11,11,42,43,2,0,62,62,93,93,2,0,133,133,143,143, + 3,0,17,17,95,95,170,170,2,0,79,79,98,98,1,0,197,198,2,0,208,208, + 228,228,8,0,37,37,76,76,108,108,110,110,132,132,145,145,185,185, + 190,190,13,0,2,24,26,36,38,75,77,81,83,107,109,109,111,112,114,115, + 117,130,133,144,146,184,186,189,191,192,4,0,36,36,62,62,77,77,91, + 91,1099,0,127,1,0,0,0,2,131,1,0,0,0,4,146,1,0,0,0,6,149,1,0,0,0, + 8,198,1,0,0,0,10,201,1,0,0,0,12,207,1,0,0,0,14,211,1,0,0,0,16,217, + 1,0,0,0,18,235,1,0,0,0,20,238,1,0,0,0,22,241,1,0,0,0,24,251,1,0, + 0,0,26,254,1,0,0,0,28,258,1,0,0,0,30,291,1,0,0,0,32,293,1,0,0,0, + 34,296,1,0,0,0,36,311,1,0,0,0,38,373,1,0,0,0,40,378,1,0,0,0,42,389, + 1,0,0,0,44,391,1,0,0,0,46,397,1,0,0,0,48,405,1,0,0,0,50,423,1,0, + 0,0,52,425,1,0,0,0,54,433,1,0,0,0,56,438,1,0,0,0,58,446,1,0,0,0, + 60,450,1,0,0,0,62,454,1,0,0,0,64,463,1,0,0,0,66,477,1,0,0,0,68,479, + 1,0,0,0,70,529,1,0,0,0,72,531,1,0,0,0,74,662,1,0,0,0,76,760,1,0, + 0,0,78,770,1,0,0,0,80,791,1,0,0,0,82,824,1,0,0,0,84,837,1,0,0,0, + 86,839,1,0,0,0,88,857,1,0,0,0,90,866,1,0,0,0,92,868,1,0,0,0,94,885, + 1,0,0,0,96,898,1,0,0,0,98,908,1,0,0,0,100,912,1,0,0,0,102,920,1, + 0,0,0,104,930,1,0,0,0,106,933,1,0,0,0,108,946,1,0,0,0,110,948,1, + 0,0,0,112,950,1,0,0,0,114,952,1,0,0,0,116,956,1,0,0,0,118,961,1, + 0,0,0,120,963,1,0,0,0,122,967,1,0,0,0,124,128,3,2,1,0,125,128,3, + 6,3,0,126,128,3,82,41,0,127,124,1,0,0,0,127,125,1,0,0,0,127,126, + 1,0,0,0,128,129,1,0,0,0,129,130,5,0,0,1,130,1,1,0,0,0,131,137,3, + 4,2,0,132,133,5,176,0,0,133,134,5,4,0,0,134,136,3,4,2,0,135,132, + 1,0,0,0,136,139,1,0,0,0,137,135,1,0,0,0,137,138,1,0,0,0,138,3,1, + 0,0,0,139,137,1,0,0,0,140,147,3,6,3,0,141,142,5,220,0,0,142,143, + 3,2,1,0,143,144,5,236,0,0,144,147,1,0,0,0,145,147,3,122,61,0,146, + 140,1,0,0,0,146,141,1,0,0,0,146,145,1,0,0,0,147,5,1,0,0,0,148,150, + 3,8,4,0,149,148,1,0,0,0,149,150,1,0,0,0,150,151,1,0,0,0,151,153, + 5,146,0,0,152,154,5,49,0,0,153,152,1,0,0,0,153,154,1,0,0,0,154,156, + 1,0,0,0,155,157,3,10,5,0,156,155,1,0,0,0,156,157,1,0,0,0,157,158, + 1,0,0,0,158,160,3,72,36,0,159,161,3,12,6,0,160,159,1,0,0,0,160,161, + 1,0,0,0,161,163,1,0,0,0,162,164,3,14,7,0,163,162,1,0,0,0,163,164, + 1,0,0,0,164,166,1,0,0,0,165,167,3,18,9,0,166,165,1,0,0,0,166,167, + 1,0,0,0,167,169,1,0,0,0,168,170,3,20,10,0,169,168,1,0,0,0,169,170, + 1,0,0,0,170,172,1,0,0,0,171,173,3,22,11,0,172,171,1,0,0,0,172,173, + 1,0,0,0,173,176,1,0,0,0,174,175,5,189,0,0,175,177,7,0,0,0,176,174, + 1,0,0,0,176,177,1,0,0,0,177,180,1,0,0,0,178,179,5,189,0,0,179,181, + 5,169,0,0,180,178,1,0,0,0,180,181,1,0,0,0,181,183,1,0,0,0,182,184, + 3,24,12,0,183,182,1,0,0,0,183,184,1,0,0,0,184,186,1,0,0,0,185,187, + 3,16,8,0,186,185,1,0,0,0,186,187,1,0,0,0,187,189,1,0,0,0,188,190, + 3,26,13,0,189,188,1,0,0,0,189,190,1,0,0,0,190,193,1,0,0,0,191,194, + 3,30,15,0,192,194,3,32,16,0,193,191,1,0,0,0,193,192,1,0,0,0,193, + 194,1,0,0,0,194,196,1,0,0,0,195,197,3,34,17,0,196,195,1,0,0,0,196, + 197,1,0,0,0,197,7,1,0,0,0,198,199,5,189,0,0,199,200,3,86,43,0,200, + 9,1,0,0,0,201,202,5,168,0,0,202,205,5,198,0,0,203,204,5,189,0,0, + 204,206,5,164,0,0,205,203,1,0,0,0,205,206,1,0,0,0,206,11,1,0,0,0, + 207,208,5,68,0,0,208,209,3,36,18,0,209,13,1,0,0,0,210,212,7,1,0, + 0,211,210,1,0,0,0,211,212,1,0,0,0,212,213,1,0,0,0,213,214,5,9,0, + 0,214,215,5,90,0,0,215,216,3,72,36,0,216,15,1,0,0,0,217,218,5,188, + 0,0,218,219,3,118,59,0,219,220,5,10,0,0,220,221,5,220,0,0,221,222, + 3,56,28,0,222,232,5,236,0,0,223,224,5,206,0,0,224,225,3,118,59,0, + 225,226,5,10,0,0,226,227,5,220,0,0,227,228,3,56,28,0,228,229,5,236, + 0,0,229,231,1,0,0,0,230,223,1,0,0,0,231,234,1,0,0,0,232,230,1,0, + 0,0,232,233,1,0,0,0,233,17,1,0,0,0,234,232,1,0,0,0,235,236,5,129, + 0,0,236,237,3,74,37,0,237,19,1,0,0,0,238,239,5,187,0,0,239,240,3, + 74,37,0,240,21,1,0,0,0,241,242,5,73,0,0,242,249,5,18,0,0,243,244, + 7,0,0,0,244,245,5,220,0,0,245,246,3,72,36,0,246,247,5,236,0,0,247, + 250,1,0,0,0,248,250,3,72,36,0,249,243,1,0,0,0,249,248,1,0,0,0,250, + 23,1,0,0,0,251,252,5,74,0,0,252,253,3,74,37,0,253,25,1,0,0,0,254, + 255,5,122,0,0,255,256,5,18,0,0,256,257,3,46,23,0,257,27,1,0,0,0, + 258,259,5,122,0,0,259,260,5,18,0,0,260,261,3,72,36,0,261,29,1,0, + 0,0,262,263,5,99,0,0,263,266,3,74,37,0,264,265,5,206,0,0,265,267, + 3,74,37,0,266,264,1,0,0,0,266,267,1,0,0,0,267,272,1,0,0,0,268,269, + 5,189,0,0,269,273,5,164,0,0,270,271,5,18,0,0,271,273,3,72,36,0,272, + 268,1,0,0,0,272,270,1,0,0,0,272,273,1,0,0,0,273,292,1,0,0,0,274, + 275,5,99,0,0,275,278,3,74,37,0,276,277,5,189,0,0,277,279,5,164,0, + 0,278,276,1,0,0,0,278,279,1,0,0,0,279,280,1,0,0,0,280,281,5,118, + 0,0,281,282,3,74,37,0,282,292,1,0,0,0,283,284,5,99,0,0,284,285,3, + 74,37,0,285,286,5,118,0,0,286,289,3,74,37,0,287,288,5,18,0,0,288, + 290,3,72,36,0,289,287,1,0,0,0,289,290,1,0,0,0,290,292,1,0,0,0,291, + 262,1,0,0,0,291,274,1,0,0,0,291,283,1,0,0,0,292,31,1,0,0,0,293,294, + 5,118,0,0,294,295,3,74,37,0,295,33,1,0,0,0,296,297,5,150,0,0,297, + 298,3,52,26,0,298,35,1,0,0,0,299,300,6,18,-1,0,300,302,3,94,47,0, + 301,303,5,61,0,0,302,301,1,0,0,0,302,303,1,0,0,0,303,305,1,0,0,0, + 304,306,3,44,22,0,305,304,1,0,0,0,305,306,1,0,0,0,306,312,1,0,0, + 0,307,308,5,220,0,0,308,309,3,36,18,0,309,310,5,236,0,0,310,312, + 1,0,0,0,311,299,1,0,0,0,311,307,1,0,0,0,312,327,1,0,0,0,313,314, + 10,3,0,0,314,315,3,40,20,0,315,316,3,36,18,4,316,326,1,0,0,0,317, + 319,10,4,0,0,318,320,3,38,19,0,319,318,1,0,0,0,319,320,1,0,0,0,320, + 321,1,0,0,0,321,322,5,90,0,0,322,323,3,36,18,0,323,324,3,42,21,0, + 324,326,1,0,0,0,325,313,1,0,0,0,325,317,1,0,0,0,326,329,1,0,0,0, + 327,325,1,0,0,0,327,328,1,0,0,0,328,37,1,0,0,0,329,327,1,0,0,0,330, + 332,7,2,0,0,331,330,1,0,0,0,331,332,1,0,0,0,332,333,1,0,0,0,333, + 340,5,84,0,0,334,336,5,84,0,0,335,337,7,2,0,0,336,335,1,0,0,0,336, + 337,1,0,0,0,337,340,1,0,0,0,338,340,7,2,0,0,339,331,1,0,0,0,339, + 334,1,0,0,0,339,338,1,0,0,0,340,374,1,0,0,0,341,343,7,3,0,0,342, + 341,1,0,0,0,342,343,1,0,0,0,343,344,1,0,0,0,344,346,7,4,0,0,345, + 347,5,123,0,0,346,345,1,0,0,0,346,347,1,0,0,0,347,356,1,0,0,0,348, + 350,7,4,0,0,349,351,5,123,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351, + 353,1,0,0,0,352,354,7,3,0,0,353,352,1,0,0,0,353,354,1,0,0,0,354, + 356,1,0,0,0,355,342,1,0,0,0,355,348,1,0,0,0,356,374,1,0,0,0,357, + 359,7,5,0,0,358,357,1,0,0,0,358,359,1,0,0,0,359,360,1,0,0,0,360, + 362,5,69,0,0,361,363,5,123,0,0,362,361,1,0,0,0,362,363,1,0,0,0,363, + 372,1,0,0,0,364,366,5,69,0,0,365,367,5,123,0,0,366,365,1,0,0,0,366, + 367,1,0,0,0,367,369,1,0,0,0,368,370,7,5,0,0,369,368,1,0,0,0,369, + 370,1,0,0,0,370,372,1,0,0,0,371,358,1,0,0,0,371,364,1,0,0,0,372, + 374,1,0,0,0,373,339,1,0,0,0,373,355,1,0,0,0,373,371,1,0,0,0,374, + 39,1,0,0,0,375,376,5,31,0,0,376,379,5,90,0,0,377,379,5,206,0,0,378, + 375,1,0,0,0,378,377,1,0,0,0,379,41,1,0,0,0,380,381,5,119,0,0,381, + 390,3,72,36,0,382,383,5,179,0,0,383,384,5,220,0,0,384,385,3,72,36, + 0,385,386,5,236,0,0,386,390,1,0,0,0,387,388,5,179,0,0,388,390,3, + 72,36,0,389,380,1,0,0,0,389,382,1,0,0,0,389,387,1,0,0,0,390,43,1, + 0,0,0,391,392,5,144,0,0,392,395,3,50,25,0,393,394,5,118,0,0,394, + 396,3,50,25,0,395,393,1,0,0,0,395,396,1,0,0,0,396,45,1,0,0,0,397, + 402,3,48,24,0,398,399,5,206,0,0,399,401,3,48,24,0,400,398,1,0,0, + 0,401,404,1,0,0,0,402,400,1,0,0,0,402,403,1,0,0,0,403,47,1,0,0,0, + 404,402,1,0,0,0,405,407,3,74,37,0,406,408,7,6,0,0,407,406,1,0,0, + 0,407,408,1,0,0,0,408,411,1,0,0,0,409,410,5,117,0,0,410,412,7,7, + 0,0,411,409,1,0,0,0,411,412,1,0,0,0,412,415,1,0,0,0,413,414,5,26, + 0,0,414,416,5,200,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,49,1,0, + 0,0,417,424,3,122,61,0,418,421,3,106,53,0,419,420,5,238,0,0,420, + 422,3,106,53,0,421,419,1,0,0,0,421,422,1,0,0,0,422,424,1,0,0,0,423, + 417,1,0,0,0,423,418,1,0,0,0,424,51,1,0,0,0,425,430,3,54,27,0,426, + 427,5,206,0,0,427,429,3,54,27,0,428,426,1,0,0,0,429,432,1,0,0,0, + 430,428,1,0,0,0,430,431,1,0,0,0,431,53,1,0,0,0,432,430,1,0,0,0,433, + 434,3,118,59,0,434,435,5,212,0,0,435,436,3,108,54,0,436,55,1,0,0, + 0,437,439,3,58,29,0,438,437,1,0,0,0,438,439,1,0,0,0,439,441,1,0, + 0,0,440,442,3,60,30,0,441,440,1,0,0,0,441,442,1,0,0,0,442,444,1, + 0,0,0,443,445,3,62,31,0,444,443,1,0,0,0,444,445,1,0,0,0,445,57,1, + 0,0,0,446,447,5,126,0,0,447,448,5,18,0,0,448,449,3,72,36,0,449,59, + 1,0,0,0,450,451,5,122,0,0,451,452,5,18,0,0,452,453,3,46,23,0,453, + 61,1,0,0,0,454,455,7,8,0,0,455,456,3,64,32,0,456,63,1,0,0,0,457, + 464,3,66,33,0,458,459,5,16,0,0,459,460,3,66,33,0,460,461,5,6,0,0, + 461,462,3,66,33,0,462,464,1,0,0,0,463,457,1,0,0,0,463,458,1,0,0, + 0,464,65,1,0,0,0,465,466,5,33,0,0,466,478,5,142,0,0,467,468,5,175, + 0,0,468,478,5,128,0,0,469,470,5,175,0,0,470,478,5,64,0,0,471,472, + 3,106,53,0,472,473,5,128,0,0,473,478,1,0,0,0,474,475,3,106,53,0, + 475,476,5,64,0,0,476,478,1,0,0,0,477,465,1,0,0,0,477,467,1,0,0,0, + 477,469,1,0,0,0,477,471,1,0,0,0,477,474,1,0,0,0,478,67,1,0,0,0,479, + 480,3,74,37,0,480,481,5,0,0,1,481,69,1,0,0,0,482,530,3,118,59,0, + 483,484,3,118,59,0,484,485,5,220,0,0,485,486,3,118,59,0,486,493, + 3,70,35,0,487,488,5,206,0,0,488,489,3,118,59,0,489,490,3,70,35,0, + 490,492,1,0,0,0,491,487,1,0,0,0,492,495,1,0,0,0,493,491,1,0,0,0, + 493,494,1,0,0,0,494,496,1,0,0,0,495,493,1,0,0,0,496,497,5,236,0, + 0,497,530,1,0,0,0,498,499,3,118,59,0,499,500,5,220,0,0,500,505,3, + 120,60,0,501,502,5,206,0,0,502,504,3,120,60,0,503,501,1,0,0,0,504, + 507,1,0,0,0,505,503,1,0,0,0,505,506,1,0,0,0,506,508,1,0,0,0,507, + 505,1,0,0,0,508,509,5,236,0,0,509,530,1,0,0,0,510,511,3,118,59,0, + 511,512,5,220,0,0,512,517,3,70,35,0,513,514,5,206,0,0,514,516,3, + 70,35,0,515,513,1,0,0,0,516,519,1,0,0,0,517,515,1,0,0,0,517,518, + 1,0,0,0,518,520,1,0,0,0,519,517,1,0,0,0,520,521,5,236,0,0,521,530, + 1,0,0,0,522,523,3,118,59,0,523,525,5,220,0,0,524,526,3,72,36,0,525, + 524,1,0,0,0,525,526,1,0,0,0,526,527,1,0,0,0,527,528,5,236,0,0,528, + 530,1,0,0,0,529,482,1,0,0,0,529,483,1,0,0,0,529,498,1,0,0,0,529, + 510,1,0,0,0,529,522,1,0,0,0,530,71,1,0,0,0,531,536,3,74,37,0,532, + 533,5,206,0,0,533,535,3,74,37,0,534,532,1,0,0,0,535,538,1,0,0,0, + 536,534,1,0,0,0,536,537,1,0,0,0,537,73,1,0,0,0,538,536,1,0,0,0,539, + 540,6,37,-1,0,540,542,5,19,0,0,541,543,3,74,37,0,542,541,1,0,0,0, + 542,543,1,0,0,0,543,549,1,0,0,0,544,545,5,186,0,0,545,546,3,74,37, + 0,546,547,5,163,0,0,547,548,3,74,37,0,548,550,1,0,0,0,549,544,1, + 0,0,0,550,551,1,0,0,0,551,549,1,0,0,0,551,552,1,0,0,0,552,555,1, + 0,0,0,553,554,5,52,0,0,554,556,3,74,37,0,555,553,1,0,0,0,555,556, + 1,0,0,0,556,557,1,0,0,0,557,558,5,53,0,0,558,663,1,0,0,0,559,560, + 5,20,0,0,560,561,5,220,0,0,561,562,3,74,37,0,562,563,5,10,0,0,563, + 564,3,70,35,0,564,565,5,236,0,0,565,663,1,0,0,0,566,567,5,36,0,0, + 567,663,5,200,0,0,568,569,5,86,0,0,569,570,3,74,37,0,570,571,3,110, + 55,0,571,663,1,0,0,0,572,573,5,155,0,0,573,574,5,220,0,0,574,575, + 3,74,37,0,575,576,5,68,0,0,576,579,3,74,37,0,577,578,5,65,0,0,578, + 580,3,74,37,0,579,577,1,0,0,0,579,580,1,0,0,0,580,581,1,0,0,0,581, + 582,5,236,0,0,582,663,1,0,0,0,583,584,5,166,0,0,584,663,5,200,0, + 0,585,586,5,171,0,0,586,587,5,220,0,0,587,588,7,9,0,0,588,589,5, + 200,0,0,589,590,5,68,0,0,590,591,3,74,37,0,591,592,5,236,0,0,592, + 663,1,0,0,0,593,594,3,118,59,0,594,596,5,220,0,0,595,597,3,72,36, + 0,596,595,1,0,0,0,596,597,1,0,0,0,597,598,1,0,0,0,598,599,5,236, + 0,0,599,600,1,0,0,0,600,601,5,125,0,0,601,602,5,220,0,0,602,603, + 3,56,28,0,603,604,5,236,0,0,604,663,1,0,0,0,605,606,3,118,59,0,606, + 608,5,220,0,0,607,609,3,72,36,0,608,607,1,0,0,0,608,609,1,0,0,0, + 609,610,1,0,0,0,610,611,5,236,0,0,611,612,1,0,0,0,612,613,5,125, + 0,0,613,614,3,118,59,0,614,663,1,0,0,0,615,621,3,118,59,0,616,618, + 5,220,0,0,617,619,3,72,36,0,618,617,1,0,0,0,618,619,1,0,0,0,619, + 620,1,0,0,0,620,622,5,236,0,0,621,616,1,0,0,0,621,622,1,0,0,0,622, + 623,1,0,0,0,623,625,5,220,0,0,624,626,5,49,0,0,625,624,1,0,0,0,625, + 626,1,0,0,0,626,628,1,0,0,0,627,629,3,76,38,0,628,627,1,0,0,0,628, + 629,1,0,0,0,629,630,1,0,0,0,630,631,5,236,0,0,631,663,1,0,0,0,632, + 663,3,82,41,0,633,663,3,108,54,0,634,635,5,208,0,0,635,663,3,74, + 37,18,636,637,5,115,0,0,637,663,3,74,37,12,638,639,3,98,49,0,639, + 640,5,210,0,0,640,642,1,0,0,0,641,638,1,0,0,0,641,642,1,0,0,0,642, + 643,1,0,0,0,643,663,5,202,0,0,644,645,5,220,0,0,645,646,3,2,1,0, + 646,647,5,236,0,0,647,663,1,0,0,0,648,649,5,220,0,0,649,650,3,74, + 37,0,650,651,5,236,0,0,651,663,1,0,0,0,652,653,5,220,0,0,653,654, + 3,72,36,0,654,655,5,236,0,0,655,663,1,0,0,0,656,658,5,219,0,0,657, + 659,3,72,36,0,658,657,1,0,0,0,658,659,1,0,0,0,659,660,1,0,0,0,660, + 663,5,235,0,0,661,663,3,90,45,0,662,539,1,0,0,0,662,559,1,0,0,0, + 662,566,1,0,0,0,662,568,1,0,0,0,662,572,1,0,0,0,662,583,1,0,0,0, + 662,585,1,0,0,0,662,593,1,0,0,0,662,605,1,0,0,0,662,615,1,0,0,0, + 662,632,1,0,0,0,662,633,1,0,0,0,662,634,1,0,0,0,662,636,1,0,0,0, + 662,641,1,0,0,0,662,644,1,0,0,0,662,648,1,0,0,0,662,652,1,0,0,0, + 662,656,1,0,0,0,662,661,1,0,0,0,663,757,1,0,0,0,664,668,10,17,0, + 0,665,669,5,202,0,0,666,669,5,238,0,0,667,669,5,227,0,0,668,665, + 1,0,0,0,668,666,1,0,0,0,668,667,1,0,0,0,669,670,1,0,0,0,670,756, + 3,74,37,18,671,675,10,16,0,0,672,676,5,228,0,0,673,676,5,208,0,0, + 674,676,5,207,0,0,675,672,1,0,0,0,675,673,1,0,0,0,675,674,1,0,0, + 0,676,677,1,0,0,0,677,756,3,74,37,17,678,703,10,15,0,0,679,704,5, + 211,0,0,680,704,5,212,0,0,681,704,5,223,0,0,682,704,5,221,0,0,683, + 704,5,222,0,0,684,704,5,213,0,0,685,704,5,214,0,0,686,688,5,115, + 0,0,687,686,1,0,0,0,687,688,1,0,0,0,688,689,1,0,0,0,689,691,5,80, + 0,0,690,692,5,25,0,0,691,690,1,0,0,0,691,692,1,0,0,0,692,704,1,0, + 0,0,693,695,5,115,0,0,694,693,1,0,0,0,694,695,1,0,0,0,695,696,1, + 0,0,0,696,704,7,10,0,0,697,704,5,232,0,0,698,704,5,233,0,0,699,704, + 5,225,0,0,700,704,5,216,0,0,701,704,5,217,0,0,702,704,5,224,0,0, + 703,679,1,0,0,0,703,680,1,0,0,0,703,681,1,0,0,0,703,682,1,0,0,0, + 703,683,1,0,0,0,703,684,1,0,0,0,703,685,1,0,0,0,703,687,1,0,0,0, + 703,694,1,0,0,0,703,697,1,0,0,0,703,698,1,0,0,0,703,699,1,0,0,0, + 703,700,1,0,0,0,703,701,1,0,0,0,703,702,1,0,0,0,704,705,1,0,0,0, + 705,756,3,74,37,16,706,707,10,13,0,0,707,708,5,226,0,0,708,756,3, + 74,37,14,709,710,10,11,0,0,710,711,5,6,0,0,711,756,3,74,37,12,712, + 713,10,10,0,0,713,714,5,121,0,0,714,756,3,74,37,11,715,717,10,9, + 0,0,716,718,5,115,0,0,717,716,1,0,0,0,717,718,1,0,0,0,718,719,1, + 0,0,0,719,720,5,16,0,0,720,721,3,74,37,0,721,722,5,6,0,0,722,723, + 3,74,37,10,723,756,1,0,0,0,724,725,10,8,0,0,725,726,5,229,0,0,726, + 727,3,74,37,0,727,728,5,205,0,0,728,729,3,74,37,8,729,756,1,0,0, + 0,730,731,10,21,0,0,731,732,5,219,0,0,732,733,3,74,37,0,733,734, + 5,235,0,0,734,756,1,0,0,0,735,736,10,20,0,0,736,737,5,210,0,0,737, + 756,5,198,0,0,738,739,10,19,0,0,739,740,5,210,0,0,740,756,3,118, + 59,0,741,742,10,14,0,0,742,744,5,88,0,0,743,745,5,115,0,0,744,743, + 1,0,0,0,744,745,1,0,0,0,745,746,1,0,0,0,746,756,5,116,0,0,747,753, + 10,7,0,0,748,754,3,116,58,0,749,750,5,10,0,0,750,754,3,118,59,0, + 751,752,5,10,0,0,752,754,5,200,0,0,753,748,1,0,0,0,753,749,1,0,0, + 0,753,751,1,0,0,0,754,756,1,0,0,0,755,664,1,0,0,0,755,671,1,0,0, + 0,755,678,1,0,0,0,755,706,1,0,0,0,755,709,1,0,0,0,755,712,1,0,0, + 0,755,715,1,0,0,0,755,724,1,0,0,0,755,730,1,0,0,0,755,735,1,0,0, + 0,755,738,1,0,0,0,755,741,1,0,0,0,755,747,1,0,0,0,756,759,1,0,0, + 0,757,755,1,0,0,0,757,758,1,0,0,0,758,75,1,0,0,0,759,757,1,0,0,0, + 760,765,3,78,39,0,761,762,5,206,0,0,762,764,3,78,39,0,763,761,1, + 0,0,0,764,767,1,0,0,0,765,763,1,0,0,0,765,766,1,0,0,0,766,77,1,0, + 0,0,767,765,1,0,0,0,768,771,3,80,40,0,769,771,3,74,37,0,770,768, + 1,0,0,0,770,769,1,0,0,0,771,79,1,0,0,0,772,773,5,220,0,0,773,778, + 3,118,59,0,774,775,5,206,0,0,775,777,3,118,59,0,776,774,1,0,0,0, + 777,780,1,0,0,0,778,776,1,0,0,0,778,779,1,0,0,0,779,781,1,0,0,0, + 780,778,1,0,0,0,781,782,5,236,0,0,782,792,1,0,0,0,783,788,3,118, + 59,0,784,785,5,206,0,0,785,787,3,118,59,0,786,784,1,0,0,0,787,790, + 1,0,0,0,788,786,1,0,0,0,788,789,1,0,0,0,789,792,1,0,0,0,790,788, + 1,0,0,0,791,772,1,0,0,0,791,783,1,0,0,0,792,793,1,0,0,0,793,794, + 5,201,0,0,794,795,3,74,37,0,795,81,1,0,0,0,796,797,5,222,0,0,797, + 801,3,118,59,0,798,800,3,84,42,0,799,798,1,0,0,0,800,803,1,0,0,0, + 801,799,1,0,0,0,801,802,1,0,0,0,802,804,1,0,0,0,803,801,1,0,0,0, + 804,805,5,238,0,0,805,806,5,214,0,0,806,825,1,0,0,0,807,808,5,222, + 0,0,808,812,3,118,59,0,809,811,3,84,42,0,810,809,1,0,0,0,811,814, + 1,0,0,0,812,810,1,0,0,0,812,813,1,0,0,0,813,815,1,0,0,0,814,812, + 1,0,0,0,815,817,5,214,0,0,816,818,3,82,41,0,817,816,1,0,0,0,817, + 818,1,0,0,0,818,819,1,0,0,0,819,820,5,222,0,0,820,821,5,238,0,0, + 821,822,3,118,59,0,822,823,5,214,0,0,823,825,1,0,0,0,824,796,1,0, + 0,0,824,807,1,0,0,0,825,83,1,0,0,0,826,827,3,118,59,0,827,828,5, + 212,0,0,828,829,5,200,0,0,829,838,1,0,0,0,830,831,3,118,59,0,831, + 832,5,212,0,0,832,833,5,218,0,0,833,834,3,74,37,0,834,835,5,234, + 0,0,835,838,1,0,0,0,836,838,3,118,59,0,837,826,1,0,0,0,837,830,1, + 0,0,0,837,836,1,0,0,0,838,85,1,0,0,0,839,844,3,88,44,0,840,841,5, + 206,0,0,841,843,3,88,44,0,842,840,1,0,0,0,843,846,1,0,0,0,844,842, + 1,0,0,0,844,845,1,0,0,0,845,87,1,0,0,0,846,844,1,0,0,0,847,848,3, + 118,59,0,848,849,5,10,0,0,849,850,5,220,0,0,850,851,3,2,1,0,851, + 852,5,236,0,0,852,858,1,0,0,0,853,854,3,74,37,0,854,855,5,10,0,0, + 855,856,3,118,59,0,856,858,1,0,0,0,857,847,1,0,0,0,857,853,1,0,0, + 0,858,89,1,0,0,0,859,867,3,122,61,0,860,861,3,98,49,0,861,862,5, + 210,0,0,862,864,1,0,0,0,863,860,1,0,0,0,863,864,1,0,0,0,864,865, + 1,0,0,0,865,867,3,92,46,0,866,859,1,0,0,0,866,863,1,0,0,0,867,91, + 1,0,0,0,868,873,3,118,59,0,869,870,5,210,0,0,870,872,3,118,59,0, + 871,869,1,0,0,0,872,875,1,0,0,0,873,871,1,0,0,0,873,874,1,0,0,0, + 874,93,1,0,0,0,875,873,1,0,0,0,876,877,6,47,-1,0,877,886,3,98,49, + 0,878,886,3,96,48,0,879,880,5,220,0,0,880,881,3,2,1,0,881,882,5, + 236,0,0,882,886,1,0,0,0,883,886,3,82,41,0,884,886,3,122,61,0,885, + 876,1,0,0,0,885,878,1,0,0,0,885,879,1,0,0,0,885,883,1,0,0,0,885, + 884,1,0,0,0,886,895,1,0,0,0,887,891,10,3,0,0,888,892,3,116,58,0, + 889,890,5,10,0,0,890,892,3,118,59,0,891,888,1,0,0,0,891,889,1,0, + 0,0,892,894,1,0,0,0,893,887,1,0,0,0,894,897,1,0,0,0,895,893,1,0, + 0,0,895,896,1,0,0,0,896,95,1,0,0,0,897,895,1,0,0,0,898,899,3,118, + 59,0,899,901,5,220,0,0,900,902,3,100,50,0,901,900,1,0,0,0,901,902, + 1,0,0,0,902,903,1,0,0,0,903,904,5,236,0,0,904,97,1,0,0,0,905,906, + 3,102,51,0,906,907,5,210,0,0,907,909,1,0,0,0,908,905,1,0,0,0,908, + 909,1,0,0,0,909,910,1,0,0,0,910,911,3,118,59,0,911,99,1,0,0,0,912, + 917,3,74,37,0,913,914,5,206,0,0,914,916,3,74,37,0,915,913,1,0,0, + 0,916,919,1,0,0,0,917,915,1,0,0,0,917,918,1,0,0,0,918,101,1,0,0, + 0,919,917,1,0,0,0,920,921,3,118,59,0,921,103,1,0,0,0,922,931,5,196, + 0,0,923,924,5,210,0,0,924,931,7,11,0,0,925,926,5,198,0,0,926,928, + 5,210,0,0,927,929,7,11,0,0,928,927,1,0,0,0,928,929,1,0,0,0,929,931, + 1,0,0,0,930,922,1,0,0,0,930,923,1,0,0,0,930,925,1,0,0,0,931,105, + 1,0,0,0,932,934,7,12,0,0,933,932,1,0,0,0,933,934,1,0,0,0,934,941, + 1,0,0,0,935,942,3,104,52,0,936,942,5,197,0,0,937,942,5,198,0,0,938, + 942,5,199,0,0,939,942,5,82,0,0,940,942,5,113,0,0,941,935,1,0,0,0, + 941,936,1,0,0,0,941,937,1,0,0,0,941,938,1,0,0,0,941,939,1,0,0,0, + 941,940,1,0,0,0,942,107,1,0,0,0,943,947,3,106,53,0,944,947,5,200, + 0,0,945,947,5,116,0,0,946,943,1,0,0,0,946,944,1,0,0,0,946,945,1, + 0,0,0,947,109,1,0,0,0,948,949,7,13,0,0,949,111,1,0,0,0,950,951,7, + 14,0,0,951,113,1,0,0,0,952,953,7,15,0,0,953,115,1,0,0,0,954,957, + 5,195,0,0,955,957,3,114,57,0,956,954,1,0,0,0,956,955,1,0,0,0,957, + 117,1,0,0,0,958,962,5,195,0,0,959,962,3,110,55,0,960,962,3,112,56, + 0,961,958,1,0,0,0,961,959,1,0,0,0,961,960,1,0,0,0,962,119,1,0,0, + 0,963,964,5,200,0,0,964,965,5,212,0,0,965,966,3,106,53,0,966,121, + 1,0,0,0,967,968,5,218,0,0,968,969,3,118,59,0,969,970,5,234,0,0,970, + 123,1,0,0,0,120,127,137,146,149,153,156,160,163,166,169,172,176, + 180,183,186,189,193,196,205,211,232,249,266,272,278,289,291,302, + 305,311,319,325,327,331,336,339,342,346,350,353,355,358,362,366, + 369,371,373,378,389,395,402,407,411,415,421,423,430,438,441,444, + 463,477,493,505,517,525,529,536,542,551,555,579,596,608,618,621, + 625,628,641,658,662,668,675,687,691,694,703,717,744,753,755,757, + 765,770,778,788,791,801,812,817,824,837,844,857,863,866,873,885, + 891,895,901,908,917,928,930,933,941,946,956,961 ] class HogQLParser ( Parser ): @@ -4150,34 +4148,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class ColumnExprExtractContext(ColumnExprContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext - super().__init__(parser) - self.copyFrom(ctx) - - def EXTRACT(self): - return self.getToken(HogQLParser.EXTRACT, 0) - def LPAREN(self): - return self.getToken(HogQLParser.LPAREN, 0) - def interval(self): - return self.getTypedRuleContext(HogQLParser.IntervalContext,0) - - def FROM(self): - return self.getToken(HogQLParser.FROM, 0) - def columnExpr(self): - return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) - - def RPAREN(self): - return self.getToken(HogQLParser.RPAREN, 0) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitColumnExprExtract" ): - return visitor.visitColumnExprExtract(self) - else: - return visitor.visitChildren(self) - - class ColumnExprNegateContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -4970,7 +4940,7 @@ def columnExpr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 669 + self.state = 662 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,80,self._ctx) if la_ == 1: @@ -5049,317 +5019,299 @@ def columnExpr(self, _p:int=0): pass elif la_ == 4: - localctx = HogQLParser.ColumnExprExtractContext(self, localctx) + localctx = HogQLParser.ColumnExprIntervalContext(self, localctx) self._ctx = localctx _prevctx = localctx self.state = 568 - self.match(HogQLParser.EXTRACT) + self.match(HogQLParser.INTERVAL) self.state = 569 - self.match(HogQLParser.LPAREN) + self.columnExpr(0) self.state = 570 self.interval() - self.state = 571 - self.match(HogQLParser.FROM) - self.state = 572 - self.columnExpr(0) - self.state = 573 - self.match(HogQLParser.RPAREN) pass elif la_ == 5: - localctx = HogQLParser.ColumnExprIntervalContext(self, localctx) - self._ctx = localctx - _prevctx = localctx - self.state = 575 - self.match(HogQLParser.INTERVAL) - self.state = 576 - self.columnExpr(0) - self.state = 577 - self.interval() - pass - - elif la_ == 6: localctx = HogQLParser.ColumnExprSubstringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 579 + self.state = 572 self.match(HogQLParser.SUBSTRING) - self.state = 580 + self.state = 573 self.match(HogQLParser.LPAREN) - self.state = 581 + self.state = 574 self.columnExpr(0) - self.state = 582 + self.state = 575 self.match(HogQLParser.FROM) - self.state = 583 + self.state = 576 self.columnExpr(0) - self.state = 586 + self.state = 579 self._errHandler.sync(self) _la = self._input.LA(1) if _la==65: - self.state = 584 + self.state = 577 self.match(HogQLParser.FOR) - self.state = 585 + self.state = 578 self.columnExpr(0) - self.state = 588 + self.state = 581 self.match(HogQLParser.RPAREN) pass - elif la_ == 7: + elif la_ == 6: localctx = HogQLParser.ColumnExprTimestampContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 590 + self.state = 583 self.match(HogQLParser.TIMESTAMP) - self.state = 591 + self.state = 584 self.match(HogQLParser.STRING_LITERAL) pass - elif la_ == 8: + elif la_ == 7: localctx = HogQLParser.ColumnExprTrimContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 592 + self.state = 585 self.match(HogQLParser.TRIM) - self.state = 593 + self.state = 586 self.match(HogQLParser.LPAREN) - self.state = 594 + self.state = 587 _la = self._input.LA(1) if not(_la==17 or _la==95 or _la==170): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 595 + self.state = 588 self.match(HogQLParser.STRING_LITERAL) - self.state = 596 + self.state = 589 self.match(HogQLParser.FROM) - self.state = 597 + self.state = 590 self.columnExpr(0) - self.state = 598 + self.state = 591 self.match(HogQLParser.RPAREN) pass - elif la_ == 9: + elif la_ == 8: localctx = HogQLParser.ColumnExprWinFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 600 + self.state = 593 self.identifier() - self.state = 601 + self.state = 594 self.match(HogQLParser.LPAREN) - self.state = 603 + self.state = 596 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): - self.state = 602 + self.state = 595 self.columnExprList() - self.state = 605 + self.state = 598 self.match(HogQLParser.RPAREN) - self.state = 607 + self.state = 600 self.match(HogQLParser.OVER) - self.state = 608 + self.state = 601 self.match(HogQLParser.LPAREN) - self.state = 609 + self.state = 602 self.windowExpr() - self.state = 610 + self.state = 603 self.match(HogQLParser.RPAREN) pass - elif la_ == 10: + elif la_ == 9: localctx = HogQLParser.ColumnExprWinFunctionTargetContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 612 + self.state = 605 self.identifier() - self.state = 613 + self.state = 606 self.match(HogQLParser.LPAREN) - self.state = 615 + self.state = 608 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): - self.state = 614 + self.state = 607 self.columnExprList() - self.state = 617 + self.state = 610 self.match(HogQLParser.RPAREN) - self.state = 619 + self.state = 612 self.match(HogQLParser.OVER) - self.state = 620 + self.state = 613 self.identifier() pass - elif la_ == 11: + elif la_ == 10: localctx = HogQLParser.ColumnExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 622 + self.state = 615 self.identifier() - self.state = 628 + self.state = 621 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,75,self._ctx) if la_ == 1: - self.state = 623 + self.state = 616 self.match(HogQLParser.LPAREN) - self.state = 625 + self.state = 618 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): - self.state = 624 + self.state = 617 self.columnExprList() - self.state = 627 + self.state = 620 self.match(HogQLParser.RPAREN) - self.state = 630 + self.state = 623 self.match(HogQLParser.LPAREN) - self.state = 632 + self.state = 625 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,76,self._ctx) if la_ == 1: - self.state = 631 + self.state = 624 self.match(HogQLParser.DISTINCT) - self.state = 635 + self.state = 628 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): - self.state = 634 + self.state = 627 self.columnArgList() - self.state = 637 + self.state = 630 self.match(HogQLParser.RPAREN) pass - elif la_ == 12: + elif la_ == 11: localctx = HogQLParser.ColumnExprTagElementContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 639 + self.state = 632 self.hogqlxTagElement() pass - elif la_ == 13: + elif la_ == 12: localctx = HogQLParser.ColumnExprLiteralContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 640 + self.state = 633 self.literal() pass - elif la_ == 14: + elif la_ == 13: localctx = HogQLParser.ColumnExprNegateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 641 + self.state = 634 self.match(HogQLParser.DASH) - self.state = 642 + self.state = 635 self.columnExpr(18) pass - elif la_ == 15: + elif la_ == 14: localctx = HogQLParser.ColumnExprNotContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 643 + self.state = 636 self.match(HogQLParser.NOT) - self.state = 644 + self.state = 637 self.columnExpr(12) pass - elif la_ == 16: + elif la_ == 15: localctx = HogQLParser.ColumnExprAsteriskContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 648 + self.state = 641 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==195: - self.state = 645 + self.state = 638 self.tableIdentifier() - self.state = 646 + self.state = 639 self.match(HogQLParser.DOT) - self.state = 650 + self.state = 643 self.match(HogQLParser.ASTERISK) pass - elif la_ == 17: + elif la_ == 16: localctx = HogQLParser.ColumnExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 651 + self.state = 644 self.match(HogQLParser.LPAREN) - self.state = 652 + self.state = 645 self.selectUnionStmt() - self.state = 653 + self.state = 646 self.match(HogQLParser.RPAREN) pass - elif la_ == 18: + elif la_ == 17: localctx = HogQLParser.ColumnExprParensContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 655 + self.state = 648 self.match(HogQLParser.LPAREN) - self.state = 656 + self.state = 649 self.columnExpr(0) - self.state = 657 + self.state = 650 self.match(HogQLParser.RPAREN) pass - elif la_ == 19: + elif la_ == 18: localctx = HogQLParser.ColumnExprTupleContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 659 + self.state = 652 self.match(HogQLParser.LPAREN) - self.state = 660 + self.state = 653 self.columnExprList() - self.state = 661 + self.state = 654 self.match(HogQLParser.RPAREN) pass - elif la_ == 20: + elif la_ == 19: localctx = HogQLParser.ColumnExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 663 + self.state = 656 self.match(HogQLParser.LBRACKET) - self.state = 665 + self.state = 658 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): - self.state = 664 + self.state = 657 self.columnExprList() - self.state = 667 + self.state = 660 self.match(HogQLParser.RBRACKET) pass - elif la_ == 21: + elif la_ == 20: localctx = HogQLParser.ColumnExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 668 + self.state = 661 self.columnIdentifier() pass self._ctx.stop = self._input.LT(-1) - self.state = 764 + self.state = 757 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,91,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -5367,36 +5319,36 @@ def columnExpr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 762 + self.state = 755 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,90,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnExprPrecedence1Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 671 + self.state = 664 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 675 + self.state = 668 self._errHandler.sync(self) token = self._input.LA(1) if token in [202]: - self.state = 672 + self.state = 665 localctx.operator = self.match(HogQLParser.ASTERISK) pass elif token in [238]: - self.state = 673 + self.state = 666 localctx.operator = self.match(HogQLParser.SLASH) pass elif token in [227]: - self.state = 674 + self.state = 667 localctx.operator = self.match(HogQLParser.PERCENT) pass else: raise NoViableAltException(self) - self.state = 677 + self.state = 670 localctx.right = self.columnExpr(18) pass @@ -5404,29 +5356,29 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprPrecedence2Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 678 + self.state = 671 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 682 + self.state = 675 self._errHandler.sync(self) token = self._input.LA(1) if token in [228]: - self.state = 679 + self.state = 672 localctx.operator = self.match(HogQLParser.PLUS) pass elif token in [208]: - self.state = 680 + self.state = 673 localctx.operator = self.match(HogQLParser.DASH) pass elif token in [207]: - self.state = 681 + self.state = 674 localctx.operator = self.match(HogQLParser.CONCAT) pass else: raise NoViableAltException(self) - self.state = 684 + self.state = 677 localctx.right = self.columnExpr(17) pass @@ -5434,79 +5386,79 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprPrecedence3Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 685 + self.state = 678 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 710 + self.state = 703 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,86,self._ctx) if la_ == 1: - self.state = 686 + self.state = 679 localctx.operator = self.match(HogQLParser.EQ_DOUBLE) pass elif la_ == 2: - self.state = 687 + self.state = 680 localctx.operator = self.match(HogQLParser.EQ_SINGLE) pass elif la_ == 3: - self.state = 688 + self.state = 681 localctx.operator = self.match(HogQLParser.NOT_EQ) pass elif la_ == 4: - self.state = 689 + self.state = 682 localctx.operator = self.match(HogQLParser.LT_EQ) pass elif la_ == 5: - self.state = 690 + self.state = 683 localctx.operator = self.match(HogQLParser.LT) pass elif la_ == 6: - self.state = 691 + self.state = 684 localctx.operator = self.match(HogQLParser.GT_EQ) pass elif la_ == 7: - self.state = 692 + self.state = 685 localctx.operator = self.match(HogQLParser.GT) pass elif la_ == 8: - self.state = 694 + self.state = 687 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 693 + self.state = 686 localctx.operator = self.match(HogQLParser.NOT) - self.state = 696 + self.state = 689 self.match(HogQLParser.IN) - self.state = 698 + self.state = 691 self._errHandler.sync(self) _la = self._input.LA(1) if _la==25: - self.state = 697 + self.state = 690 self.match(HogQLParser.COHORT) pass elif la_ == 9: - self.state = 701 + self.state = 694 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 700 + self.state = 693 localctx.operator = self.match(HogQLParser.NOT) - self.state = 703 + self.state = 696 _la = self._input.LA(1) if not(_la==79 or _la==98): self._errHandler.recoverInline(self) @@ -5516,209 +5468,209 @@ def columnExpr(self, _p:int=0): pass elif la_ == 10: - self.state = 704 + self.state = 697 localctx.operator = self.match(HogQLParser.REGEX_SINGLE) pass elif la_ == 11: - self.state = 705 + self.state = 698 localctx.operator = self.match(HogQLParser.REGEX_DOUBLE) pass elif la_ == 12: - self.state = 706 + self.state = 699 localctx.operator = self.match(HogQLParser.NOT_REGEX) pass elif la_ == 13: - self.state = 707 + self.state = 700 localctx.operator = self.match(HogQLParser.IREGEX_SINGLE) pass elif la_ == 14: - self.state = 708 + self.state = 701 localctx.operator = self.match(HogQLParser.IREGEX_DOUBLE) pass elif la_ == 15: - self.state = 709 + self.state = 702 localctx.operator = self.match(HogQLParser.NOT_IREGEX) pass - self.state = 712 + self.state = 705 localctx.right = self.columnExpr(16) pass elif la_ == 4: localctx = HogQLParser.ColumnExprNullishContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 713 + self.state = 706 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 714 + self.state = 707 self.match(HogQLParser.NULLISH) - self.state = 715 + self.state = 708 self.columnExpr(14) pass elif la_ == 5: localctx = HogQLParser.ColumnExprAndContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 716 + self.state = 709 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 717 + self.state = 710 self.match(HogQLParser.AND) - self.state = 718 + self.state = 711 self.columnExpr(12) pass elif la_ == 6: localctx = HogQLParser.ColumnExprOrContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 719 + self.state = 712 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 720 + self.state = 713 self.match(HogQLParser.OR) - self.state = 721 + self.state = 714 self.columnExpr(11) pass elif la_ == 7: localctx = HogQLParser.ColumnExprBetweenContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 722 + self.state = 715 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 724 + self.state = 717 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 723 + self.state = 716 self.match(HogQLParser.NOT) - self.state = 726 + self.state = 719 self.match(HogQLParser.BETWEEN) - self.state = 727 + self.state = 720 self.columnExpr(0) - self.state = 728 + self.state = 721 self.match(HogQLParser.AND) - self.state = 729 + self.state = 722 self.columnExpr(10) pass elif la_ == 8: localctx = HogQLParser.ColumnExprTernaryOpContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 731 + self.state = 724 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 732 + self.state = 725 self.match(HogQLParser.QUERY) - self.state = 733 + self.state = 726 self.columnExpr(0) - self.state = 734 + self.state = 727 self.match(HogQLParser.COLON) - self.state = 735 + self.state = 728 self.columnExpr(8) pass elif la_ == 9: localctx = HogQLParser.ColumnExprArrayAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 737 + self.state = 730 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 738 + self.state = 731 self.match(HogQLParser.LBRACKET) - self.state = 739 + self.state = 732 self.columnExpr(0) - self.state = 740 + self.state = 733 self.match(HogQLParser.RBRACKET) pass elif la_ == 10: localctx = HogQLParser.ColumnExprTupleAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 742 + self.state = 735 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 743 + self.state = 736 self.match(HogQLParser.DOT) - self.state = 744 + self.state = 737 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 11: localctx = HogQLParser.ColumnExprPropertyAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 745 + self.state = 738 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 746 + self.state = 739 self.match(HogQLParser.DOT) - self.state = 747 + self.state = 740 self.identifier() pass elif la_ == 12: localctx = HogQLParser.ColumnExprIsNullContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 748 + self.state = 741 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 749 + self.state = 742 self.match(HogQLParser.IS) - self.state = 751 + self.state = 744 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 750 + self.state = 743 self.match(HogQLParser.NOT) - self.state = 753 + self.state = 746 self.match(HogQLParser.NULL_SQL) pass elif la_ == 13: localctx = HogQLParser.ColumnExprAliasContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 754 + self.state = 747 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 760 + self.state = 753 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,89,self._ctx) if la_ == 1: - self.state = 755 + self.state = 748 self.alias() pass elif la_ == 2: - self.state = 756 + self.state = 749 self.match(HogQLParser.AS) - self.state = 757 + self.state = 750 self.identifier() pass elif la_ == 3: - self.state = 758 + self.state = 751 self.match(HogQLParser.AS) - self.state = 759 + self.state = 752 self.match(HogQLParser.STRING_LITERAL) pass @@ -5726,7 +5678,7 @@ def columnExpr(self, _p:int=0): pass - self.state = 766 + self.state = 759 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,91,self._ctx) @@ -5778,17 +5730,17 @@ def columnArgList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 767 + self.state = 760 self.columnArgExpr() - self.state = 772 + self.state = 765 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 768 + self.state = 761 self.match(HogQLParser.COMMA) - self.state = 769 + self.state = 762 self.columnArgExpr() - self.state = 774 + self.state = 767 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5833,18 +5785,18 @@ def columnArgExpr(self): localctx = HogQLParser.ColumnArgExprContext(self, self._ctx, self.state) self.enterRule(localctx, 78, self.RULE_columnArgExpr) try: - self.state = 777 + self.state = 770 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,93,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 775 + self.state = 768 self.columnLambdaExpr() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 776 + self.state = 769 self.columnExpr(0) pass @@ -5910,41 +5862,41 @@ def columnLambdaExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 798 + self.state = 791 self._errHandler.sync(self) token = self._input.LA(1) if token in [220]: - self.state = 779 + self.state = 772 self.match(HogQLParser.LPAREN) - self.state = 780 + self.state = 773 self.identifier() - self.state = 785 + self.state = 778 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 781 + self.state = 774 self.match(HogQLParser.COMMA) - self.state = 782 + self.state = 775 self.identifier() - self.state = 787 + self.state = 780 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 788 + self.state = 781 self.match(HogQLParser.RPAREN) pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 195]: - self.state = 790 + self.state = 783 self.identifier() - self.state = 795 + self.state = 788 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 791 + self.state = 784 self.match(HogQLParser.COMMA) - self.state = 792 + self.state = 785 self.identifier() - self.state = 797 + self.state = 790 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5952,9 +5904,9 @@ def columnLambdaExpr(self): else: raise NoViableAltException(self) - self.state = 800 + self.state = 793 self.match(HogQLParser.ARROW) - self.state = 801 + self.state = 794 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -6059,66 +6011,66 @@ def hogqlxTagElement(self): self.enterRule(localctx, 82, self.RULE_hogqlxTagElement) self._la = 0 # Token type try: - self.state = 831 + self.state = 824 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,100,self._ctx) if la_ == 1: localctx = HogQLParser.HogqlxTagElementClosedContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 803 + self.state = 796 self.match(HogQLParser.LT) - self.state = 804 + self.state = 797 self.identifier() - self.state = 808 + self.state = 801 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==195: - self.state = 805 + self.state = 798 self.hogqlxTagAttribute() - self.state = 810 + self.state = 803 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 811 + self.state = 804 self.match(HogQLParser.SLASH) - self.state = 812 + self.state = 805 self.match(HogQLParser.GT) pass elif la_ == 2: localctx = HogQLParser.HogqlxTagElementNestedContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 814 + self.state = 807 self.match(HogQLParser.LT) - self.state = 815 + self.state = 808 self.identifier() - self.state = 819 + self.state = 812 self._errHandler.sync(self) _la = self._input.LA(1) while (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==195: - self.state = 816 + self.state = 809 self.hogqlxTagAttribute() - self.state = 821 + self.state = 814 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 822 + self.state = 815 self.match(HogQLParser.GT) - self.state = 824 + self.state = 817 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,99,self._ctx) if la_ == 1: - self.state = 823 + self.state = 816 self.hogqlxTagElement() - self.state = 826 + self.state = 819 self.match(HogQLParser.LT) - self.state = 827 + self.state = 820 self.match(HogQLParser.SLASH) - self.state = 828 + self.state = 821 self.identifier() - self.state = 829 + self.state = 822 self.match(HogQLParser.GT) pass @@ -6176,36 +6128,36 @@ def hogqlxTagAttribute(self): localctx = HogQLParser.HogqlxTagAttributeContext(self, self._ctx, self.state) self.enterRule(localctx, 84, self.RULE_hogqlxTagAttribute) try: - self.state = 844 + self.state = 837 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,101,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 833 + self.state = 826 self.identifier() - self.state = 834 + self.state = 827 self.match(HogQLParser.EQ_SINGLE) - self.state = 835 + self.state = 828 self.match(HogQLParser.STRING_LITERAL) pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 837 + self.state = 830 self.identifier() - self.state = 838 + self.state = 831 self.match(HogQLParser.EQ_SINGLE) - self.state = 839 + self.state = 832 self.match(HogQLParser.LBRACE) - self.state = 840 + self.state = 833 self.columnExpr(0) - self.state = 841 + self.state = 834 self.match(HogQLParser.RBRACE) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 843 + self.state = 836 self.identifier() pass @@ -6258,17 +6210,17 @@ def withExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 846 + self.state = 839 self.withExpr() - self.state = 851 + self.state = 844 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 847 + self.state = 840 self.match(HogQLParser.COMMA) - self.state = 848 + self.state = 841 self.withExpr() - self.state = 853 + self.state = 846 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6352,32 +6304,32 @@ def withExpr(self): localctx = HogQLParser.WithExprContext(self, self._ctx, self.state) self.enterRule(localctx, 88, self.RULE_withExpr) try: - self.state = 864 + self.state = 857 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,103,self._ctx) if la_ == 1: localctx = HogQLParser.WithExprSubqueryContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 854 + self.state = 847 self.identifier() - self.state = 855 + self.state = 848 self.match(HogQLParser.AS) - self.state = 856 + self.state = 849 self.match(HogQLParser.LPAREN) - self.state = 857 + self.state = 850 self.selectUnionStmt() - self.state = 858 + self.state = 851 self.match(HogQLParser.RPAREN) pass elif la_ == 2: localctx = HogQLParser.WithExprColumnContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 860 + self.state = 853 self.columnExpr(0) - self.state = 861 + self.state = 854 self.match(HogQLParser.AS) - self.state = 862 + self.state = 855 self.identifier() pass @@ -6430,27 +6382,27 @@ def columnIdentifier(self): localctx = HogQLParser.ColumnIdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 90, self.RULE_columnIdentifier) try: - self.state = 873 + self.state = 866 self._errHandler.sync(self) token = self._input.LA(1) if token in [218]: self.enterOuterAlt(localctx, 1) - self.state = 866 + self.state = 859 self.placeholder() pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 195]: self.enterOuterAlt(localctx, 2) - self.state = 870 + self.state = 863 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,104,self._ctx) if la_ == 1: - self.state = 867 + self.state = 860 self.tableIdentifier() - self.state = 868 + self.state = 861 self.match(HogQLParser.DOT) - self.state = 872 + self.state = 865 self.nestedIdentifier() pass else: @@ -6503,18 +6455,18 @@ def nestedIdentifier(self): self.enterRule(localctx, 92, self.RULE_nestedIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 875 + self.state = 868 self.identifier() - self.state = 880 + self.state = 873 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,106,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 876 + self.state = 869 self.match(HogQLParser.DOT) - self.state = 877 + self.state = 870 self.identifier() - self.state = 882 + self.state = 875 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,106,self._ctx) @@ -6667,7 +6619,7 @@ def tableExpr(self, _p:int=0): self.enterRecursionRule(localctx, 94, self.RULE_tableExpr, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 892 + self.state = 885 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,107,self._ctx) if la_ == 1: @@ -6675,7 +6627,7 @@ def tableExpr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 884 + self.state = 877 self.tableIdentifier() pass @@ -6683,7 +6635,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 885 + self.state = 878 self.tableFunctionExpr() pass @@ -6691,11 +6643,11 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 886 + self.state = 879 self.match(HogQLParser.LPAREN) - self.state = 887 + self.state = 880 self.selectUnionStmt() - self.state = 888 + self.state = 881 self.match(HogQLParser.RPAREN) pass @@ -6703,7 +6655,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprTagContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 890 + self.state = 883 self.hogqlxTagElement() pass @@ -6711,13 +6663,13 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprPlaceholderContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 891 + self.state = 884 self.placeholder() pass self._ctx.stop = self._input.LT(-1) - self.state = 902 + self.state = 895 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,109,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -6727,27 +6679,27 @@ def tableExpr(self, _p:int=0): _prevctx = localctx localctx = HogQLParser.TableExprAliasContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) - self.state = 894 + self.state = 887 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 898 + self.state = 891 self._errHandler.sync(self) token = self._input.LA(1) if token in [36, 62, 77, 91, 195]: - self.state = 895 + self.state = 888 self.alias() pass elif token in [10]: - self.state = 896 + self.state = 889 self.match(HogQLParser.AS) - self.state = 897 + self.state = 890 self.identifier() pass else: raise NoViableAltException(self) - self.state = 904 + self.state = 897 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,109,self._ctx) @@ -6800,19 +6752,19 @@ def tableFunctionExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 905 + self.state = 898 self.identifier() - self.state = 906 + self.state = 899 self.match(HogQLParser.LPAREN) - self.state = 908 + self.state = 901 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): - self.state = 907 + self.state = 900 self.tableArgList() - self.state = 910 + self.state = 903 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -6859,17 +6811,17 @@ def tableIdentifier(self): self.enterRule(localctx, 98, self.RULE_tableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 915 + self.state = 908 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,111,self._ctx) if la_ == 1: - self.state = 912 + self.state = 905 self.databaseIdentifier() - self.state = 913 + self.state = 906 self.match(HogQLParser.DOT) - self.state = 917 + self.state = 910 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6919,17 +6871,17 @@ def tableArgList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 919 + self.state = 912 self.columnExpr(0) - self.state = 924 + self.state = 917 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 920 + self.state = 913 self.match(HogQLParser.COMMA) - self.state = 921 + self.state = 914 self.columnExpr(0) - self.state = 926 + self.state = 919 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6971,7 +6923,7 @@ def databaseIdentifier(self): self.enterRule(localctx, 102, self.RULE_databaseIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 927 + self.state = 920 self.identifier() except RecognitionException as re: localctx.exception = re @@ -7022,19 +6974,19 @@ def floatingLiteral(self): self.enterRule(localctx, 104, self.RULE_floatingLiteral) self._la = 0 # Token type try: - self.state = 937 + self.state = 930 self._errHandler.sync(self) token = self._input.LA(1) if token in [196]: self.enterOuterAlt(localctx, 1) - self.state = 929 + self.state = 922 self.match(HogQLParser.FLOATING_LITERAL) pass elif token in [210]: self.enterOuterAlt(localctx, 2) - self.state = 930 + self.state = 923 self.match(HogQLParser.DOT) - self.state = 931 + self.state = 924 _la = self._input.LA(1) if not(_la==197 or _la==198): self._errHandler.recoverInline(self) @@ -7044,15 +6996,15 @@ def floatingLiteral(self): pass elif token in [198]: self.enterOuterAlt(localctx, 3) - self.state = 932 + self.state = 925 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 933 + self.state = 926 self.match(HogQLParser.DOT) - self.state = 935 + self.state = 928 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,113,self._ctx) if la_ == 1: - self.state = 934 + self.state = 927 _la = self._input.LA(1) if not(_la==197 or _la==198): self._errHandler.recoverInline(self) @@ -7125,11 +7077,11 @@ def numberLiteral(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 940 + self.state = 933 self._errHandler.sync(self) _la = self._input.LA(1) if _la==208 or _la==228: - self.state = 939 + self.state = 932 _la = self._input.LA(1) if not(_la==208 or _la==228): self._errHandler.recoverInline(self) @@ -7138,36 +7090,36 @@ def numberLiteral(self): self.consume() - self.state = 948 + self.state = 941 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,116,self._ctx) if la_ == 1: - self.state = 942 + self.state = 935 self.floatingLiteral() pass elif la_ == 2: - self.state = 943 + self.state = 936 self.match(HogQLParser.OCTAL_LITERAL) pass elif la_ == 3: - self.state = 944 + self.state = 937 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 4: - self.state = 945 + self.state = 938 self.match(HogQLParser.HEXADECIMAL_LITERAL) pass elif la_ == 5: - self.state = 946 + self.state = 939 self.match(HogQLParser.INF) pass elif la_ == 6: - self.state = 947 + self.state = 940 self.match(HogQLParser.NAN_SQL) pass @@ -7215,22 +7167,22 @@ def literal(self): localctx = HogQLParser.LiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 108, self.RULE_literal) try: - self.state = 953 + self.state = 946 self._errHandler.sync(self) token = self._input.LA(1) if token in [82, 113, 196, 197, 198, 199, 208, 210, 228]: self.enterOuterAlt(localctx, 1) - self.state = 950 + self.state = 943 self.numberLiteral() pass elif token in [200]: self.enterOuterAlt(localctx, 2) - self.state = 951 + self.state = 944 self.match(HogQLParser.STRING_LITERAL) pass elif token in [116]: self.enterOuterAlt(localctx, 3) - self.state = 952 + self.state = 945 self.match(HogQLParser.NULL_SQL) pass else: @@ -7295,7 +7247,7 @@ def interval(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 955 + self.state = 948 _la = self._input.LA(1) if not(_la==37 or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 72057615512764417) != 0) or ((((_la - 145)) & ~0x3f) == 0 and ((1 << (_la - 145)) & 36283883716609) != 0)): self._errHandler.recoverInline(self) @@ -7871,7 +7823,7 @@ def keyword(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 957 + self.state = 950 _la = self._input.LA(1) if not(((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & -34368126977) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & -1288627627820033) != 0) or ((((_la - 130)) & ~0x3f) == 0 and ((1 << (_la - 130)) & 8034421735228932089) != 0)): self._errHandler.recoverInline(self) @@ -7925,7 +7877,7 @@ def keywordForAlias(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 959 + self.state = 952 _la = self._input.LA(1) if not(((((_la - 36)) & ~0x3f) == 0 and ((1 << (_la - 36)) & 36030996109328385) != 0)): self._errHandler.recoverInline(self) @@ -7972,17 +7924,17 @@ def alias(self): localctx = HogQLParser.AliasContext(self, self._ctx, self.state) self.enterRule(localctx, 116, self.RULE_alias) try: - self.state = 963 + self.state = 956 self._errHandler.sync(self) token = self._input.LA(1) if token in [195]: self.enterOuterAlt(localctx, 1) - self.state = 961 + self.state = 954 self.match(HogQLParser.IDENTIFIER) pass elif token in [36, 62, 77, 91]: self.enterOuterAlt(localctx, 2) - self.state = 962 + self.state = 955 self.keywordForAlias() pass else: @@ -8032,22 +7984,22 @@ def identifier(self): localctx = HogQLParser.IdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 118, self.RULE_identifier) try: - self.state = 968 + self.state = 961 self._errHandler.sync(self) token = self._input.LA(1) if token in [195]: self.enterOuterAlt(localctx, 1) - self.state = 965 + self.state = 958 self.match(HogQLParser.IDENTIFIER) pass elif token in [37, 76, 108, 110, 132, 145, 185, 190]: self.enterOuterAlt(localctx, 2) - self.state = 966 + self.state = 959 self.interval() pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 186, 187, 188, 189, 191, 192]: self.enterOuterAlt(localctx, 3) - self.state = 967 + self.state = 960 self.keyword() pass else: @@ -8097,11 +8049,11 @@ def enumValue(self): self.enterRule(localctx, 120, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 970 + self.state = 963 self.match(HogQLParser.STRING_LITERAL) - self.state = 971 + self.state = 964 self.match(HogQLParser.EQ_SINGLE) - self.state = 972 + self.state = 965 self.numberLiteral() except RecognitionException as re: localctx.exception = re @@ -8147,11 +8099,11 @@ def placeholder(self): self.enterRule(localctx, 122, self.RULE_placeholder) try: self.enterOuterAlt(localctx, 1) - self.state = 974 + self.state = 967 self.match(HogQLParser.LBRACE) - self.state = 975 + self.state = 968 self.identifier() - self.state = 976 + self.state = 969 self.match(HogQLParser.RBRACE) except RecognitionException as re: localctx.exception = re diff --git a/posthog/hogql/grammar/HogQLParserVisitor.py b/posthog/hogql/grammar/HogQLParserVisitor.py index 389da7e99385c..66a36b5bdb4e9 100644 --- a/posthog/hogql/grammar/HogQLParserVisitor.py +++ b/posthog/hogql/grammar/HogQLParserVisitor.py @@ -254,11 +254,6 @@ def visitColumnExprAlias(self, ctx:HogQLParser.ColumnExprAliasContext): return self.visitChildren(ctx) - # Visit a parse tree produced by HogQLParser#ColumnExprExtract. - def visitColumnExprExtract(self, ctx:HogQLParser.ColumnExprExtractContext): - return self.visitChildren(ctx) - - # Visit a parse tree produced by HogQLParser#ColumnExprNegate. def visitColumnExprNegate(self, ctx:HogQLParser.ColumnExprNegateContext): return self.visitChildren(ctx) diff --git a/posthog/hogql/parser.py b/posthog/hogql/parser.py index 399f6953698cd..07fa55228d671 100644 --- a/posthog/hogql/parser.py +++ b/posthog/hogql/parser.py @@ -499,9 +499,6 @@ def visitColumnExprAlias(self, ctx: HogQLParser.ColumnExprAliasContext): return ast.Alias(expr=expr, alias=alias) - def visitColumnExprExtract(self, ctx: HogQLParser.ColumnExprExtractContext): - raise NotImplementedException(f"Unsupported node: ColumnExprExtract") - def visitColumnExprNegate(self, ctx: HogQLParser.ColumnExprNegateContext): return ast.ArithmeticOperation( op=ast.ArithmeticOperationOp.Sub, diff --git a/posthog/hogql/test/_test_parser.py b/posthog/hogql/test/_test_parser.py index 5a4c45b533647..61c90d031ffc3 100644 --- a/posthog/hogql/test/_test_parser.py +++ b/posthog/hogql/test/_test_parser.py @@ -1594,4 +1594,17 @@ def test_visit_hogqlx_tag_source(self): ], ) + def test_select_extract_as_function(self): + node = self._select("select extract('string', 'other string') from events") + + assert node == ast.SelectQuery( + select=[ + ast.Call( + name="extract", + args=[ast.Constant(value="string"), ast.Constant(value="other string")], + ) + ], + select_from=ast.JoinExpr(table=ast.Field(chain=["events"])), + ) + return TestParser From 112e3138b46401acca843c414fb85d7be553a30c Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Tue, 26 Mar 2024 15:43:36 +0100 Subject: [PATCH 2/3] bump --- hogql_parser/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hogql_parser/setup.py b/hogql_parser/setup.py index 6a95b379acd90..25b732863871c 100644 --- a/hogql_parser/setup.py +++ b/hogql_parser/setup.py @@ -32,7 +32,7 @@ setup( name="hogql_parser", - version="1.0.3", + version="1.0.4", url="https://github.com/PostHog/posthog/tree/master/hogql_parser", author="PostHog Inc.", author_email="hey@posthog.com", From b647947b451e2cb5bc554c68bd2c8465e9640eb6 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 27 Mar 2024 15:01:30 +0000 Subject: [PATCH 3/3] Use new hogql-parser version --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index 800abfa76f036..e108c9bc6e8c2 100644 --- a/requirements.in +++ b/requirements.in @@ -101,5 +101,5 @@ phonenumberslite==8.13.6 openai==1.10.0 tiktoken==0.6.0 nh3==0.2.14 -hogql-parser==1.0.3 +hogql-parser==1.0.4 urllib3[secure,socks]==1.26.18 diff --git a/requirements.txt b/requirements.txt index a08984a29ff22..9d40bf3f4bc26 100644 --- a/requirements.txt +++ b/requirements.txt @@ -291,7 +291,7 @@ h11==0.13.0 # wsproto hexbytes==1.0.0 # via dlt -hogql-parser==1.0.3 +hogql-parser==1.0.4 # via -r requirements.in httpcore==1.0.2 # via httpx