From 269df0e6c43d52e8037e9c022682fb72191e6887 Mon Sep 17 00:00:00 2001 From: JoshuaG <104036091+joshuaghezzi@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:24:29 +1000 Subject: [PATCH] Allow optional semicolon termination on block method declarations (#24) --- antlr/ProtobufParser.g4 | 2 +- .../antlr/ProtobufParser.interp | 2 +- proto_schema_parser/antlr/ProtobufParser.py | 237 +++++++++--------- tests/test_parser.py | 15 ++ 4 files changed, 140 insertions(+), 116 deletions(-) diff --git a/antlr/ProtobufParser.g4 b/antlr/ProtobufParser.g4 index e30adfd..4282740 100644 --- a/antlr/ProtobufParser.g4 +++ b/antlr/ProtobufParser.g4 @@ -237,7 +237,7 @@ serviceElement: optionDecl | emptyDecl; methodDecl: RPC methodName inputType RETURNS outputType SEMICOLON | - RPC methodName inputType RETURNS outputType L_BRACE methodElement* R_BRACE; + RPC methodName inputType RETURNS outputType L_BRACE methodElement* R_BRACE SEMICOLON?; methodName : identifier; diff --git a/proto_schema_parser/antlr/ProtobufParser.interp b/proto_schema_parser/antlr/ProtobufParser.interp index 220477f..e02aa7c 100644 --- a/proto_schema_parser/antlr/ProtobufParser.interp +++ b/proto_schema_parser/antlr/ProtobufParser.interp @@ -237,4 +237,4 @@ sometimesIdent atn: -[4, 1, 66, 852, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 1, 0, 3, 0, 196, 8, 0, 1, 0, 5, 0, 199, 8, 0, 10, 0, 12, 0, 202, 9, 0, 1, 0, 3, 0, 205, 8, 0, 1, 0, 5, 0, 208, 8, 0, 10, 0, 12, 0, 211, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 224, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 4, 5, 236, 8, 5, 11, 5, 12, 5, 237, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 3, 9, 250, 8, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 3, 11, 258, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 5, 12, 265, 8, 12, 10, 12, 12, 12, 268, 9, 12, 1, 13, 1, 13, 1, 13, 3, 13, 273, 8, 13, 1, 13, 3, 13, 276, 8, 13, 1, 14, 1, 14, 1, 14, 3, 14, 281, 8, 14, 1, 14, 3, 14, 284, 8, 14, 1, 15, 1, 15, 1, 15, 3, 15, 289, 8, 15, 1, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 3, 16, 297, 8, 16, 1, 16, 3, 16, 300, 8, 16, 1, 17, 1, 17, 1, 17, 3, 17, 305, 8, 17, 1, 17, 3, 17, 308, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 322, 8, 18, 1, 19, 1, 19, 3, 19, 326, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 337, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 351, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 365, 8, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 380, 8, 25, 10, 25, 12, 25, 383, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 396, 8, 27, 1, 27, 1, 27, 5, 27, 400, 8, 27, 10, 27, 12, 27, 403, 9, 27, 1, 28, 1, 28, 3, 28, 407, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 414, 8, 29, 1, 30, 3, 30, 417, 8, 30, 1, 30, 1, 30, 1, 31, 3, 31, 422, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 430, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 438, 8, 34, 5, 34, 440, 8, 34, 10, 34, 12, 34, 443, 9, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 452, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 459, 8, 36, 1, 37, 1, 37, 3, 37, 463, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 474, 8, 40, 1, 41, 1, 41, 3, 41, 478, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 485, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 491, 8, 43, 10, 43, 12, 43, 494, 9, 43, 3, 43, 496, 8, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 502, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 508, 8, 45, 10, 45, 12, 45, 511, 9, 45, 3, 45, 513, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 521, 8, 46, 10, 46, 12, 46, 524, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 542, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 550, 8, 49, 1, 49, 1, 49, 3, 49, 554, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 562, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 577, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 3, 57, 591, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 598, 8, 57, 1, 57, 1, 57, 5, 57, 602, 8, 57, 10, 57, 12, 57, 605, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 613, 8, 58, 10, 58, 12, 58, 616, 9, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 626, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 633, 8, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 642, 8, 62, 1, 62, 1, 62, 5, 62, 646, 8, 62, 10, 62, 12, 62, 649, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 3, 63, 656, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 5, 64, 663, 8, 64, 10, 64, 12, 64, 666, 9, 64, 1, 65, 1, 65, 1, 65, 3, 65, 671, 8, 65, 1, 66, 1, 66, 1, 67, 1, 67, 3, 67, 677, 8, 67, 1, 68, 1, 68, 1, 68, 3, 68, 682, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 5, 69, 689, 8, 69, 10, 69, 12, 69, 692, 9, 69, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 698, 8, 70, 10, 70, 12, 70, 701, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 712, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 718, 8, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 75, 3, 75, 725, 8, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 3, 76, 732, 8, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 5, 77, 739, 8, 77, 10, 77, 12, 77, 742, 9, 77, 1, 78, 1, 78, 1, 78, 3, 78, 747, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 3, 80, 753, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 759, 8, 81, 10, 81, 12, 81, 762, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 770, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 778, 8, 84, 1, 84, 1, 84, 3, 84, 782, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 788, 8, 85, 10, 85, 12, 85, 791, 9, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 801, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 817, 8, 88, 10, 88, 12, 88, 820, 9, 88, 1, 88, 1, 88, 3, 88, 824, 8, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 835, 8, 92, 1, 93, 1, 93, 3, 93, 839, 8, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 3, 94, 846, 8, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 0, 0, 97, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 0, 7, 1, 0, 2, 3, 1, 0, 7, 8, 1, 0, 51, 52, 1, 0, 13, 15, 2, 0, 16, 17, 21, 30, 7, 0, 5, 9, 11, 12, 16, 30, 33, 33, 35, 36, 41, 42, 44, 45, 6, 0, 10, 10, 13, 15, 31, 32, 34, 34, 37, 40, 43, 43, 904, 0, 195, 1, 0, 0, 0, 2, 223, 1, 0, 0, 0, 4, 225, 1, 0, 0, 0, 6, 227, 1, 0, 0, 0, 8, 232, 1, 0, 0, 0, 10, 235, 1, 0, 0, 0, 12, 239, 1, 0, 0, 0, 14, 241, 1, 0, 0, 0, 16, 245, 1, 0, 0, 0, 18, 247, 1, 0, 0, 0, 20, 254, 1, 0, 0, 0, 22, 257, 1, 0, 0, 0, 24, 261, 1, 0, 0, 0, 26, 275, 1, 0, 0, 0, 28, 283, 1, 0, 0, 0, 30, 291, 1, 0, 0, 0, 32, 299, 1, 0, 0, 0, 34, 307, 1, 0, 0, 0, 36, 321, 1, 0, 0, 0, 38, 325, 1, 0, 0, 0, 40, 336, 1, 0, 0, 0, 42, 350, 1, 0, 0, 0, 44, 364, 1, 0, 0, 0, 46, 366, 1, 0, 0, 0, 48, 369, 1, 0, 0, 0, 50, 375, 1, 0, 0, 0, 52, 386, 1, 0, 0, 0, 54, 395, 1, 0, 0, 0, 56, 406, 1, 0, 0, 0, 58, 413, 1, 0, 0, 0, 60, 416, 1, 0, 0, 0, 62, 421, 1, 0, 0, 0, 64, 429, 1, 0, 0, 0, 66, 431, 1, 0, 0, 0, 68, 441, 1, 0, 0, 0, 70, 451, 1, 0, 0, 0, 72, 458, 1, 0, 0, 0, 74, 462, 1, 0, 0, 0, 76, 464, 1, 0, 0, 0, 78, 466, 1, 0, 0, 0, 80, 473, 1, 0, 0, 0, 82, 477, 1, 0, 0, 0, 84, 484, 1, 0, 0, 0, 86, 486, 1, 0, 0, 0, 88, 501, 1, 0, 0, 0, 90, 503, 1, 0, 0, 0, 92, 516, 1, 0, 0, 0, 94, 527, 1, 0, 0, 0, 96, 541, 1, 0, 0, 0, 98, 553, 1, 0, 0, 0, 100, 555, 1, 0, 0, 0, 102, 565, 1, 0, 0, 0, 104, 567, 1, 0, 0, 0, 106, 569, 1, 0, 0, 0, 108, 571, 1, 0, 0, 0, 110, 580, 1, 0, 0, 0, 112, 587, 1, 0, 0, 0, 114, 590, 1, 0, 0, 0, 116, 608, 1, 0, 0, 0, 118, 619, 1, 0, 0, 0, 120, 625, 1, 0, 0, 0, 122, 627, 1, 0, 0, 0, 124, 636, 1, 0, 0, 0, 126, 652, 1, 0, 0, 0, 128, 659, 1, 0, 0, 0, 130, 667, 1, 0, 0, 0, 132, 672, 1, 0, 0, 0, 134, 676, 1, 0, 0, 0, 136, 678, 1, 0, 0, 0, 138, 685, 1, 0, 0, 0, 140, 693, 1, 0, 0, 0, 142, 704, 1, 0, 0, 0, 144, 711, 1, 0, 0, 0, 146, 713, 1, 0, 0, 0, 148, 721, 1, 0, 0, 0, 150, 724, 1, 0, 0, 0, 152, 728, 1, 0, 0, 0, 154, 735, 1, 0, 0, 0, 156, 743, 1, 0, 0, 0, 158, 748, 1, 0, 0, 0, 160, 752, 1, 0, 0, 0, 162, 754, 1, 0, 0, 0, 164, 765, 1, 0, 0, 0, 166, 769, 1, 0, 0, 0, 168, 781, 1, 0, 0, 0, 170, 783, 1, 0, 0, 0, 172, 794, 1, 0, 0, 0, 174, 800, 1, 0, 0, 0, 176, 823, 1, 0, 0, 0, 178, 825, 1, 0, 0, 0, 180, 827, 1, 0, 0, 0, 182, 829, 1, 0, 0, 0, 184, 834, 1, 0, 0, 0, 186, 836, 1, 0, 0, 0, 188, 845, 1, 0, 0, 0, 190, 847, 1, 0, 0, 0, 192, 849, 1, 0, 0, 0, 194, 196, 5, 4, 0, 0, 195, 194, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 200, 1, 0, 0, 0, 197, 199, 3, 4, 2, 0, 198, 197, 1, 0, 0, 0, 199, 202, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 203, 205, 3, 6, 3, 0, 204, 203, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 209, 1, 0, 0, 0, 206, 208, 3, 2, 1, 0, 207, 206, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 0, 0, 1, 213, 1, 1, 0, 0, 0, 214, 224, 3, 18, 9, 0, 215, 224, 3, 14, 7, 0, 216, 224, 3, 48, 24, 0, 217, 224, 3, 92, 46, 0, 218, 224, 3, 140, 70, 0, 219, 224, 3, 162, 81, 0, 220, 224, 3, 170, 85, 0, 221, 224, 3, 12, 6, 0, 222, 224, 3, 4, 2, 0, 223, 214, 1, 0, 0, 0, 223, 215, 1, 0, 0, 0, 223, 216, 1, 0, 0, 0, 223, 217, 1, 0, 0, 0, 223, 218, 1, 0, 0, 0, 223, 219, 1, 0, 0, 0, 223, 220, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, 3, 1, 0, 0, 0, 225, 226, 7, 0, 0, 0, 226, 5, 1, 0, 0, 0, 227, 228, 5, 5, 0, 0, 228, 229, 5, 56, 0, 0, 229, 230, 3, 8, 4, 0, 230, 231, 5, 51, 0, 0, 231, 7, 1, 0, 0, 0, 232, 233, 3, 10, 5, 0, 233, 9, 1, 0, 0, 0, 234, 236, 5, 50, 0, 0, 235, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 11, 1, 0, 0, 0, 239, 240, 5, 51, 0, 0, 240, 13, 1, 0, 0, 0, 241, 242, 5, 9, 0, 0, 242, 243, 3, 16, 8, 0, 243, 244, 5, 51, 0, 0, 244, 15, 1, 0, 0, 0, 245, 246, 3, 24, 12, 0, 246, 17, 1, 0, 0, 0, 247, 249, 5, 6, 0, 0, 248, 250, 7, 1, 0, 0, 249, 248, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 252, 3, 20, 10, 0, 252, 253, 5, 51, 0, 0, 253, 19, 1, 0, 0, 0, 254, 255, 3, 10, 5, 0, 255, 21, 1, 0, 0, 0, 256, 258, 5, 53, 0, 0, 257, 256, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 260, 3, 24, 12, 0, 260, 23, 1, 0, 0, 0, 261, 266, 3, 188, 94, 0, 262, 263, 5, 53, 0, 0, 263, 265, 3, 188, 94, 0, 264, 262, 1, 0, 0, 0, 265, 268, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 25, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 272, 3, 36, 18, 0, 270, 271, 5, 53, 0, 0, 271, 273, 3, 24, 12, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 276, 1, 0, 0, 0, 274, 276, 3, 46, 23, 0, 275, 269, 1, 0, 0, 0, 275, 274, 1, 0, 0, 0, 276, 27, 1, 0, 0, 0, 277, 280, 3, 38, 19, 0, 278, 279, 5, 53, 0, 0, 279, 281, 3, 24, 12, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 284, 1, 0, 0, 0, 282, 284, 3, 46, 23, 0, 283, 277, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 284, 29, 1, 0, 0, 0, 285, 288, 3, 40, 20, 0, 286, 287, 5, 53, 0, 0, 287, 289, 3, 24, 12, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 292, 3, 46, 23, 0, 291, 285, 1, 0, 0, 0, 291, 290, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 296, 3, 42, 21, 0, 294, 295, 5, 53, 0, 0, 295, 297, 3, 24, 12, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 300, 3, 46, 23, 0, 299, 293, 1, 0, 0, 0, 299, 298, 1, 0, 0, 0, 300, 33, 1, 0, 0, 0, 301, 304, 3, 44, 22, 0, 302, 303, 5, 53, 0, 0, 303, 305, 3, 24, 12, 0, 304, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 308, 1, 0, 0, 0, 306, 308, 3, 46, 23, 0, 307, 301, 1, 0, 0, 0, 307, 306, 1, 0, 0, 0, 308, 35, 1, 0, 0, 0, 309, 322, 3, 190, 95, 0, 310, 322, 5, 39, 0, 0, 311, 322, 5, 38, 0, 0, 312, 322, 5, 32, 0, 0, 313, 322, 5, 37, 0, 0, 314, 322, 5, 34, 0, 0, 315, 322, 5, 40, 0, 0, 316, 322, 5, 10, 0, 0, 317, 322, 5, 14, 0, 0, 318, 322, 5, 15, 0, 0, 319, 322, 5, 13, 0, 0, 320, 322, 5, 43, 0, 0, 321, 309, 1, 0, 0, 0, 321, 310, 1, 0, 0, 0, 321, 311, 1, 0, 0, 0, 321, 312, 1, 0, 0, 0, 321, 313, 1, 0, 0, 0, 321, 314, 1, 0, 0, 0, 321, 315, 1, 0, 0, 0, 321, 316, 1, 0, 0, 0, 321, 317, 1, 0, 0, 0, 321, 318, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 320, 1, 0, 0, 0, 322, 37, 1, 0, 0, 0, 323, 326, 3, 190, 95, 0, 324, 326, 5, 43, 0, 0, 325, 323, 1, 0, 0, 0, 325, 324, 1, 0, 0, 0, 326, 39, 1, 0, 0, 0, 327, 337, 3, 190, 95, 0, 328, 337, 5, 39, 0, 0, 329, 337, 5, 38, 0, 0, 330, 337, 5, 32, 0, 0, 331, 337, 5, 37, 0, 0, 332, 337, 5, 34, 0, 0, 333, 337, 5, 40, 0, 0, 334, 337, 5, 10, 0, 0, 335, 337, 5, 43, 0, 0, 336, 327, 1, 0, 0, 0, 336, 328, 1, 0, 0, 0, 336, 329, 1, 0, 0, 0, 336, 330, 1, 0, 0, 0, 336, 331, 1, 0, 0, 0, 336, 332, 1, 0, 0, 0, 336, 333, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 335, 1, 0, 0, 0, 337, 41, 1, 0, 0, 0, 338, 351, 3, 190, 95, 0, 339, 351, 5, 39, 0, 0, 340, 351, 5, 38, 0, 0, 341, 351, 5, 32, 0, 0, 342, 351, 5, 37, 0, 0, 343, 351, 5, 34, 0, 0, 344, 351, 5, 40, 0, 0, 345, 351, 5, 10, 0, 0, 346, 351, 5, 14, 0, 0, 347, 351, 5, 15, 0, 0, 348, 351, 5, 13, 0, 0, 349, 351, 5, 31, 0, 0, 350, 338, 1, 0, 0, 0, 350, 339, 1, 0, 0, 0, 350, 340, 1, 0, 0, 0, 350, 341, 1, 0, 0, 0, 350, 342, 1, 0, 0, 0, 350, 343, 1, 0, 0, 0, 350, 344, 1, 0, 0, 0, 350, 345, 1, 0, 0, 0, 350, 346, 1, 0, 0, 0, 350, 347, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 350, 349, 1, 0, 0, 0, 351, 43, 1, 0, 0, 0, 352, 365, 3, 190, 95, 0, 353, 365, 5, 39, 0, 0, 354, 365, 5, 38, 0, 0, 355, 365, 5, 32, 0, 0, 356, 365, 5, 37, 0, 0, 357, 365, 5, 34, 0, 0, 358, 365, 5, 40, 0, 0, 359, 365, 5, 10, 0, 0, 360, 365, 5, 14, 0, 0, 361, 365, 5, 15, 0, 0, 362, 365, 5, 13, 0, 0, 363, 365, 5, 31, 0, 0, 364, 352, 1, 0, 0, 0, 364, 353, 1, 0, 0, 0, 364, 354, 1, 0, 0, 0, 364, 355, 1, 0, 0, 0, 364, 356, 1, 0, 0, 0, 364, 357, 1, 0, 0, 0, 364, 358, 1, 0, 0, 0, 364, 359, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 364, 361, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 363, 1, 0, 0, 0, 365, 45, 1, 0, 0, 0, 366, 367, 5, 53, 0, 0, 367, 368, 3, 24, 12, 0, 368, 47, 1, 0, 0, 0, 369, 370, 5, 10, 0, 0, 370, 371, 3, 54, 27, 0, 371, 372, 5, 56, 0, 0, 372, 373, 3, 56, 28, 0, 373, 374, 5, 51, 0, 0, 374, 49, 1, 0, 0, 0, 375, 376, 5, 63, 0, 0, 376, 381, 3, 52, 26, 0, 377, 378, 5, 52, 0, 0, 378, 380, 3, 52, 26, 0, 379, 377, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 385, 5, 64, 0, 0, 385, 51, 1, 0, 0, 0, 386, 387, 3, 54, 27, 0, 387, 388, 5, 56, 0, 0, 388, 389, 3, 56, 28, 0, 389, 53, 1, 0, 0, 0, 390, 396, 3, 188, 94, 0, 391, 392, 5, 59, 0, 0, 392, 393, 3, 22, 11, 0, 393, 394, 5, 60, 0, 0, 394, 396, 1, 0, 0, 0, 395, 390, 1, 0, 0, 0, 395, 391, 1, 0, 0, 0, 396, 401, 1, 0, 0, 0, 397, 398, 5, 53, 0, 0, 398, 400, 3, 54, 27, 0, 399, 397, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 55, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 407, 3, 58, 29, 0, 405, 407, 3, 66, 33, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 57, 1, 0, 0, 0, 408, 414, 3, 10, 5, 0, 409, 414, 3, 60, 30, 0, 410, 414, 3, 62, 31, 0, 411, 414, 3, 64, 32, 0, 412, 414, 3, 188, 94, 0, 413, 408, 1, 0, 0, 0, 413, 409, 1, 0, 0, 0, 413, 410, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 413, 412, 1, 0, 0, 0, 414, 59, 1, 0, 0, 0, 415, 417, 5, 57, 0, 0, 416, 415, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 5, 46, 0, 0, 419, 61, 1, 0, 0, 0, 420, 422, 5, 57, 0, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 5, 47, 0, 0, 424, 63, 1, 0, 0, 0, 425, 426, 5, 57, 0, 0, 426, 430, 5, 11, 0, 0, 427, 428, 5, 57, 0, 0, 428, 430, 5, 12, 0, 0, 429, 425, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 430, 65, 1, 0, 0, 0, 431, 432, 5, 61, 0, 0, 432, 433, 3, 68, 34, 0, 433, 434, 5, 62, 0, 0, 434, 67, 1, 0, 0, 0, 435, 437, 3, 70, 35, 0, 436, 438, 7, 2, 0, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 440, 1, 0, 0, 0, 439, 435, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 69, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 3, 72, 36, 0, 445, 446, 5, 55, 0, 0, 446, 447, 3, 80, 40, 0, 447, 452, 1, 0, 0, 0, 448, 449, 3, 72, 36, 0, 449, 450, 3, 82, 41, 0, 450, 452, 1, 0, 0, 0, 451, 444, 1, 0, 0, 0, 451, 448, 1, 0, 0, 0, 452, 71, 1, 0, 0, 0, 453, 459, 3, 104, 52, 0, 454, 455, 5, 63, 0, 0, 455, 456, 3, 74, 37, 0, 456, 457, 5, 64, 0, 0, 457, 459, 1, 0, 0, 0, 458, 453, 1, 0, 0, 0, 458, 454, 1, 0, 0, 0, 459, 73, 1, 0, 0, 0, 460, 463, 3, 76, 38, 0, 461, 463, 3, 78, 39, 0, 462, 460, 1, 0, 0, 0, 462, 461, 1, 0, 0, 0, 463, 75, 1, 0, 0, 0, 464, 465, 3, 24, 12, 0, 465, 77, 1, 0, 0, 0, 466, 467, 3, 24, 12, 0, 467, 468, 5, 54, 0, 0, 468, 469, 3, 24, 12, 0, 469, 79, 1, 0, 0, 0, 470, 474, 3, 58, 29, 0, 471, 474, 3, 84, 42, 0, 472, 474, 3, 86, 43, 0, 473, 470, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 473, 472, 1, 0, 0, 0, 474, 81, 1, 0, 0, 0, 475, 478, 3, 84, 42, 0, 476, 478, 3, 90, 45, 0, 477, 475, 1, 0, 0, 0, 477, 476, 1, 0, 0, 0, 478, 83, 1, 0, 0, 0, 479, 485, 3, 66, 33, 0, 480, 481, 5, 65, 0, 0, 481, 482, 3, 68, 34, 0, 482, 483, 5, 66, 0, 0, 483, 485, 1, 0, 0, 0, 484, 479, 1, 0, 0, 0, 484, 480, 1, 0, 0, 0, 485, 85, 1, 0, 0, 0, 486, 495, 5, 63, 0, 0, 487, 492, 3, 88, 44, 0, 488, 489, 5, 52, 0, 0, 489, 491, 3, 88, 44, 0, 490, 488, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 496, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 487, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 498, 5, 64, 0, 0, 498, 87, 1, 0, 0, 0, 499, 502, 3, 58, 29, 0, 500, 502, 3, 84, 42, 0, 501, 499, 1, 0, 0, 0, 501, 500, 1, 0, 0, 0, 502, 89, 1, 0, 0, 0, 503, 512, 5, 63, 0, 0, 504, 509, 3, 84, 42, 0, 505, 506, 5, 52, 0, 0, 506, 508, 3, 84, 42, 0, 507, 505, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 504, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 5, 64, 0, 0, 515, 91, 1, 0, 0, 0, 516, 517, 5, 39, 0, 0, 517, 518, 3, 94, 47, 0, 518, 522, 5, 61, 0, 0, 519, 521, 3, 96, 48, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 62, 0, 0, 526, 93, 1, 0, 0, 0, 527, 528, 3, 188, 94, 0, 528, 95, 1, 0, 0, 0, 529, 542, 3, 98, 49, 0, 530, 542, 3, 114, 57, 0, 531, 542, 3, 116, 58, 0, 532, 542, 3, 48, 24, 0, 533, 542, 3, 126, 63, 0, 534, 542, 3, 136, 68, 0, 535, 542, 3, 92, 46, 0, 536, 542, 3, 140, 70, 0, 537, 542, 3, 162, 81, 0, 538, 542, 3, 108, 54, 0, 539, 542, 3, 12, 6, 0, 540, 542, 3, 4, 2, 0, 541, 529, 1, 0, 0, 0, 541, 530, 1, 0, 0, 0, 541, 531, 1, 0, 0, 0, 541, 532, 1, 0, 0, 0, 541, 533, 1, 0, 0, 0, 541, 534, 1, 0, 0, 0, 541, 535, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 541, 537, 1, 0, 0, 0, 541, 538, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 540, 1, 0, 0, 0, 542, 97, 1, 0, 0, 0, 543, 554, 3, 100, 50, 0, 544, 545, 3, 28, 14, 0, 545, 546, 3, 104, 52, 0, 546, 547, 5, 56, 0, 0, 547, 549, 3, 106, 53, 0, 548, 550, 3, 50, 25, 0, 549, 548, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 552, 5, 51, 0, 0, 552, 554, 1, 0, 0, 0, 553, 543, 1, 0, 0, 0, 553, 544, 1, 0, 0, 0, 554, 99, 1, 0, 0, 0, 555, 556, 3, 102, 51, 0, 556, 557, 3, 26, 13, 0, 557, 558, 3, 104, 52, 0, 558, 559, 5, 56, 0, 0, 559, 561, 3, 106, 53, 0, 560, 562, 3, 50, 25, 0, 561, 560, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 564, 5, 51, 0, 0, 564, 101, 1, 0, 0, 0, 565, 566, 7, 3, 0, 0, 566, 103, 1, 0, 0, 0, 567, 568, 3, 188, 94, 0, 568, 105, 1, 0, 0, 0, 569, 570, 5, 46, 0, 0, 570, 107, 1, 0, 0, 0, 571, 572, 3, 110, 55, 0, 572, 573, 3, 104, 52, 0, 573, 574, 5, 56, 0, 0, 574, 576, 3, 106, 53, 0, 575, 577, 3, 50, 25, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 5, 51, 0, 0, 579, 109, 1, 0, 0, 0, 580, 581, 5, 33, 0, 0, 581, 582, 5, 65, 0, 0, 582, 583, 3, 112, 56, 0, 583, 584, 5, 52, 0, 0, 584, 585, 3, 22, 11, 0, 585, 586, 5, 66, 0, 0, 586, 111, 1, 0, 0, 0, 587, 588, 7, 4, 0, 0, 588, 113, 1, 0, 0, 0, 589, 591, 3, 102, 51, 0, 590, 589, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 5, 31, 0, 0, 593, 594, 3, 104, 52, 0, 594, 595, 5, 56, 0, 0, 595, 597, 3, 106, 53, 0, 596, 598, 3, 50, 25, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 603, 5, 61, 0, 0, 600, 602, 3, 96, 48, 0, 601, 600, 1, 0, 0, 0, 602, 605, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 606, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 606, 607, 5, 62, 0, 0, 607, 115, 1, 0, 0, 0, 608, 609, 5, 32, 0, 0, 609, 610, 3, 118, 59, 0, 610, 614, 5, 61, 0, 0, 611, 613, 3, 120, 60, 0, 612, 611, 1, 0, 0, 0, 613, 616, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 617, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 617, 618, 5, 62, 0, 0, 618, 117, 1, 0, 0, 0, 619, 620, 3, 188, 94, 0, 620, 119, 1, 0, 0, 0, 621, 626, 3, 48, 24, 0, 622, 626, 3, 122, 61, 0, 623, 626, 3, 124, 62, 0, 624, 626, 3, 4, 2, 0, 625, 621, 1, 0, 0, 0, 625, 622, 1, 0, 0, 0, 625, 623, 1, 0, 0, 0, 625, 624, 1, 0, 0, 0, 626, 121, 1, 0, 0, 0, 627, 628, 3, 32, 16, 0, 628, 629, 3, 104, 52, 0, 629, 630, 5, 56, 0, 0, 630, 632, 3, 106, 53, 0, 631, 633, 3, 50, 25, 0, 632, 631, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 635, 5, 51, 0, 0, 635, 123, 1, 0, 0, 0, 636, 637, 5, 31, 0, 0, 637, 638, 3, 104, 52, 0, 638, 639, 5, 56, 0, 0, 639, 641, 3, 106, 53, 0, 640, 642, 3, 50, 25, 0, 641, 640, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 647, 5, 61, 0, 0, 644, 646, 3, 96, 48, 0, 645, 644, 1, 0, 0, 0, 646, 649, 1, 0, 0, 0, 647, 645, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 650, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 650, 651, 5, 62, 0, 0, 651, 125, 1, 0, 0, 0, 652, 653, 5, 34, 0, 0, 653, 655, 3, 128, 64, 0, 654, 656, 3, 50, 25, 0, 655, 654, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 5, 51, 0, 0, 658, 127, 1, 0, 0, 0, 659, 664, 3, 130, 65, 0, 660, 661, 5, 52, 0, 0, 661, 663, 3, 130, 65, 0, 662, 660, 1, 0, 0, 0, 663, 666, 1, 0, 0, 0, 664, 662, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 129, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 670, 3, 132, 66, 0, 668, 669, 5, 35, 0, 0, 669, 671, 3, 134, 67, 0, 670, 668, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 131, 1, 0, 0, 0, 672, 673, 3, 106, 53, 0, 673, 133, 1, 0, 0, 0, 674, 677, 3, 106, 53, 0, 675, 677, 5, 36, 0, 0, 676, 674, 1, 0, 0, 0, 676, 675, 1, 0, 0, 0, 677, 135, 1, 0, 0, 0, 678, 681, 5, 37, 0, 0, 679, 682, 3, 128, 64, 0, 680, 682, 3, 138, 69, 0, 681, 679, 1, 0, 0, 0, 681, 680, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 5, 51, 0, 0, 684, 137, 1, 0, 0, 0, 685, 690, 3, 10, 5, 0, 686, 687, 5, 52, 0, 0, 687, 689, 3, 10, 5, 0, 688, 686, 1, 0, 0, 0, 689, 692, 1, 0, 0, 0, 690, 688, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 139, 1, 0, 0, 0, 692, 690, 1, 0, 0, 0, 693, 694, 5, 38, 0, 0, 694, 695, 3, 142, 71, 0, 695, 699, 5, 61, 0, 0, 696, 698, 3, 144, 72, 0, 697, 696, 1, 0, 0, 0, 698, 701, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 702, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 702, 703, 5, 62, 0, 0, 703, 141, 1, 0, 0, 0, 704, 705, 3, 188, 94, 0, 705, 143, 1, 0, 0, 0, 706, 712, 3, 48, 24, 0, 707, 712, 3, 146, 73, 0, 708, 712, 3, 152, 76, 0, 709, 712, 3, 12, 6, 0, 710, 712, 3, 4, 2, 0, 711, 706, 1, 0, 0, 0, 711, 707, 1, 0, 0, 0, 711, 708, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 711, 710, 1, 0, 0, 0, 712, 145, 1, 0, 0, 0, 713, 714, 3, 148, 74, 0, 714, 715, 5, 56, 0, 0, 715, 717, 3, 150, 75, 0, 716, 718, 3, 50, 25, 0, 717, 716, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 51, 0, 0, 720, 147, 1, 0, 0, 0, 721, 722, 3, 188, 94, 0, 722, 149, 1, 0, 0, 0, 723, 725, 5, 57, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 5, 46, 0, 0, 727, 151, 1, 0, 0, 0, 728, 731, 5, 37, 0, 0, 729, 732, 3, 154, 77, 0, 730, 732, 3, 138, 69, 0, 731, 729, 1, 0, 0, 0, 731, 730, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 5, 51, 0, 0, 734, 153, 1, 0, 0, 0, 735, 740, 3, 156, 78, 0, 736, 737, 5, 52, 0, 0, 737, 739, 3, 156, 78, 0, 738, 736, 1, 0, 0, 0, 739, 742, 1, 0, 0, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 155, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 743, 746, 3, 158, 79, 0, 744, 745, 5, 35, 0, 0, 745, 747, 3, 160, 80, 0, 746, 744, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 157, 1, 0, 0, 0, 748, 749, 3, 150, 75, 0, 749, 159, 1, 0, 0, 0, 750, 753, 3, 150, 75, 0, 751, 753, 5, 36, 0, 0, 752, 750, 1, 0, 0, 0, 752, 751, 1, 0, 0, 0, 753, 161, 1, 0, 0, 0, 754, 755, 5, 40, 0, 0, 755, 756, 3, 164, 82, 0, 756, 760, 5, 61, 0, 0, 757, 759, 3, 166, 83, 0, 758, 757, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 763, 1, 0, 0, 0, 762, 760, 1, 0, 0, 0, 763, 764, 5, 62, 0, 0, 764, 163, 1, 0, 0, 0, 765, 766, 3, 22, 11, 0, 766, 165, 1, 0, 0, 0, 767, 770, 3, 168, 84, 0, 768, 770, 3, 114, 57, 0, 769, 767, 1, 0, 0, 0, 769, 768, 1, 0, 0, 0, 770, 167, 1, 0, 0, 0, 771, 782, 3, 100, 50, 0, 772, 773, 3, 30, 15, 0, 773, 774, 3, 104, 52, 0, 774, 775, 5, 56, 0, 0, 775, 777, 3, 106, 53, 0, 776, 778, 3, 50, 25, 0, 777, 776, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 780, 5, 51, 0, 0, 780, 782, 1, 0, 0, 0, 781, 771, 1, 0, 0, 0, 781, 772, 1, 0, 0, 0, 782, 169, 1, 0, 0, 0, 783, 784, 5, 41, 0, 0, 784, 785, 3, 172, 86, 0, 785, 789, 5, 61, 0, 0, 786, 788, 3, 174, 87, 0, 787, 786, 1, 0, 0, 0, 788, 791, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 793, 5, 62, 0, 0, 793, 171, 1, 0, 0, 0, 794, 795, 3, 188, 94, 0, 795, 173, 1, 0, 0, 0, 796, 801, 3, 48, 24, 0, 797, 801, 3, 4, 2, 0, 798, 801, 3, 176, 88, 0, 799, 801, 3, 12, 6, 0, 800, 796, 1, 0, 0, 0, 800, 797, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, 800, 799, 1, 0, 0, 0, 801, 175, 1, 0, 0, 0, 802, 803, 5, 42, 0, 0, 803, 804, 3, 178, 89, 0, 804, 805, 3, 180, 90, 0, 805, 806, 5, 44, 0, 0, 806, 807, 3, 182, 91, 0, 807, 808, 5, 51, 0, 0, 808, 824, 1, 0, 0, 0, 809, 810, 5, 42, 0, 0, 810, 811, 3, 178, 89, 0, 811, 812, 3, 180, 90, 0, 812, 813, 5, 44, 0, 0, 813, 814, 3, 182, 91, 0, 814, 818, 5, 61, 0, 0, 815, 817, 3, 184, 92, 0, 816, 815, 1, 0, 0, 0, 817, 820, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 821, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 821, 822, 5, 62, 0, 0, 822, 824, 1, 0, 0, 0, 823, 802, 1, 0, 0, 0, 823, 809, 1, 0, 0, 0, 824, 177, 1, 0, 0, 0, 825, 826, 3, 188, 94, 0, 826, 179, 1, 0, 0, 0, 827, 828, 3, 186, 93, 0, 828, 181, 1, 0, 0, 0, 829, 830, 3, 186, 93, 0, 830, 183, 1, 0, 0, 0, 831, 835, 3, 48, 24, 0, 832, 835, 3, 4, 2, 0, 833, 835, 3, 12, 6, 0, 834, 831, 1, 0, 0, 0, 834, 832, 1, 0, 0, 0, 834, 833, 1, 0, 0, 0, 835, 185, 1, 0, 0, 0, 836, 838, 5, 59, 0, 0, 837, 839, 5, 43, 0, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 3, 34, 17, 0, 841, 842, 5, 60, 0, 0, 842, 187, 1, 0, 0, 0, 843, 846, 3, 190, 95, 0, 844, 846, 3, 192, 96, 0, 845, 843, 1, 0, 0, 0, 845, 844, 1, 0, 0, 0, 846, 189, 1, 0, 0, 0, 847, 848, 7, 5, 0, 0, 848, 191, 1, 0, 0, 0, 849, 850, 7, 6, 0, 0, 850, 193, 1, 0, 0, 0, 84, 195, 200, 204, 209, 223, 237, 249, 257, 266, 272, 275, 280, 283, 288, 291, 296, 299, 304, 307, 321, 325, 336, 350, 364, 381, 395, 401, 406, 413, 416, 421, 429, 437, 441, 451, 458, 462, 473, 477, 484, 492, 495, 501, 509, 512, 522, 541, 549, 553, 561, 576, 590, 597, 603, 614, 625, 632, 641, 647, 655, 664, 670, 676, 681, 690, 699, 711, 717, 724, 731, 740, 746, 752, 760, 769, 777, 781, 789, 800, 818, 823, 834, 838, 845] \ No newline at end of file +[4, 1, 66, 854, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 1, 0, 3, 0, 196, 8, 0, 1, 0, 5, 0, 199, 8, 0, 10, 0, 12, 0, 202, 9, 0, 1, 0, 3, 0, 205, 8, 0, 1, 0, 5, 0, 208, 8, 0, 10, 0, 12, 0, 211, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 224, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 4, 5, 236, 8, 5, 11, 5, 12, 5, 237, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 3, 9, 250, 8, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 3, 11, 258, 8, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 5, 12, 265, 8, 12, 10, 12, 12, 12, 268, 9, 12, 1, 13, 1, 13, 1, 13, 3, 13, 273, 8, 13, 1, 13, 3, 13, 276, 8, 13, 1, 14, 1, 14, 1, 14, 3, 14, 281, 8, 14, 1, 14, 3, 14, 284, 8, 14, 1, 15, 1, 15, 1, 15, 3, 15, 289, 8, 15, 1, 15, 3, 15, 292, 8, 15, 1, 16, 1, 16, 1, 16, 3, 16, 297, 8, 16, 1, 16, 3, 16, 300, 8, 16, 1, 17, 1, 17, 1, 17, 3, 17, 305, 8, 17, 1, 17, 3, 17, 308, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 322, 8, 18, 1, 19, 1, 19, 3, 19, 326, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 337, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 351, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 365, 8, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 380, 8, 25, 10, 25, 12, 25, 383, 9, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 396, 8, 27, 1, 27, 1, 27, 5, 27, 400, 8, 27, 10, 27, 12, 27, 403, 9, 27, 1, 28, 1, 28, 3, 28, 407, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 414, 8, 29, 1, 30, 3, 30, 417, 8, 30, 1, 30, 1, 30, 1, 31, 3, 31, 422, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 430, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 438, 8, 34, 5, 34, 440, 8, 34, 10, 34, 12, 34, 443, 9, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 452, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 459, 8, 36, 1, 37, 1, 37, 3, 37, 463, 8, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 3, 40, 474, 8, 40, 1, 41, 1, 41, 3, 41, 478, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 485, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 5, 43, 491, 8, 43, 10, 43, 12, 43, 494, 9, 43, 3, 43, 496, 8, 43, 1, 43, 1, 43, 1, 44, 1, 44, 3, 44, 502, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 508, 8, 45, 10, 45, 12, 45, 511, 9, 45, 3, 45, 513, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 521, 8, 46, 10, 46, 12, 46, 524, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 542, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 550, 8, 49, 1, 49, 1, 49, 3, 49, 554, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 562, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 577, 8, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 3, 57, 591, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 598, 8, 57, 1, 57, 1, 57, 5, 57, 602, 8, 57, 10, 57, 12, 57, 605, 9, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 613, 8, 58, 10, 58, 12, 58, 616, 9, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 626, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 633, 8, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 642, 8, 62, 1, 62, 1, 62, 5, 62, 646, 8, 62, 10, 62, 12, 62, 649, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 3, 63, 656, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 5, 64, 663, 8, 64, 10, 64, 12, 64, 666, 9, 64, 1, 65, 1, 65, 1, 65, 3, 65, 671, 8, 65, 1, 66, 1, 66, 1, 67, 1, 67, 3, 67, 677, 8, 67, 1, 68, 1, 68, 1, 68, 3, 68, 682, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 5, 69, 689, 8, 69, 10, 69, 12, 69, 692, 9, 69, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 698, 8, 70, 10, 70, 12, 70, 701, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 3, 72, 712, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 718, 8, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 75, 3, 75, 725, 8, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 3, 76, 732, 8, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 5, 77, 739, 8, 77, 10, 77, 12, 77, 742, 9, 77, 1, 78, 1, 78, 1, 78, 3, 78, 747, 8, 78, 1, 79, 1, 79, 1, 80, 1, 80, 3, 80, 753, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 759, 8, 81, 10, 81, 12, 81, 762, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 770, 8, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 3, 84, 778, 8, 84, 1, 84, 1, 84, 3, 84, 782, 8, 84, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 788, 8, 85, 10, 85, 12, 85, 791, 9, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 801, 8, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 817, 8, 88, 10, 88, 12, 88, 820, 9, 88, 1, 88, 1, 88, 3, 88, 824, 8, 88, 3, 88, 826, 8, 88, 1, 89, 1, 89, 1, 90, 1, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 3, 92, 837, 8, 92, 1, 93, 1, 93, 3, 93, 841, 8, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 3, 94, 848, 8, 94, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 0, 0, 97, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 0, 7, 1, 0, 2, 3, 1, 0, 7, 8, 1, 0, 51, 52, 1, 0, 13, 15, 2, 0, 16, 17, 21, 30, 7, 0, 5, 9, 11, 12, 16, 30, 33, 33, 35, 36, 41, 42, 44, 45, 6, 0, 10, 10, 13, 15, 31, 32, 34, 34, 37, 40, 43, 43, 907, 0, 195, 1, 0, 0, 0, 2, 223, 1, 0, 0, 0, 4, 225, 1, 0, 0, 0, 6, 227, 1, 0, 0, 0, 8, 232, 1, 0, 0, 0, 10, 235, 1, 0, 0, 0, 12, 239, 1, 0, 0, 0, 14, 241, 1, 0, 0, 0, 16, 245, 1, 0, 0, 0, 18, 247, 1, 0, 0, 0, 20, 254, 1, 0, 0, 0, 22, 257, 1, 0, 0, 0, 24, 261, 1, 0, 0, 0, 26, 275, 1, 0, 0, 0, 28, 283, 1, 0, 0, 0, 30, 291, 1, 0, 0, 0, 32, 299, 1, 0, 0, 0, 34, 307, 1, 0, 0, 0, 36, 321, 1, 0, 0, 0, 38, 325, 1, 0, 0, 0, 40, 336, 1, 0, 0, 0, 42, 350, 1, 0, 0, 0, 44, 364, 1, 0, 0, 0, 46, 366, 1, 0, 0, 0, 48, 369, 1, 0, 0, 0, 50, 375, 1, 0, 0, 0, 52, 386, 1, 0, 0, 0, 54, 395, 1, 0, 0, 0, 56, 406, 1, 0, 0, 0, 58, 413, 1, 0, 0, 0, 60, 416, 1, 0, 0, 0, 62, 421, 1, 0, 0, 0, 64, 429, 1, 0, 0, 0, 66, 431, 1, 0, 0, 0, 68, 441, 1, 0, 0, 0, 70, 451, 1, 0, 0, 0, 72, 458, 1, 0, 0, 0, 74, 462, 1, 0, 0, 0, 76, 464, 1, 0, 0, 0, 78, 466, 1, 0, 0, 0, 80, 473, 1, 0, 0, 0, 82, 477, 1, 0, 0, 0, 84, 484, 1, 0, 0, 0, 86, 486, 1, 0, 0, 0, 88, 501, 1, 0, 0, 0, 90, 503, 1, 0, 0, 0, 92, 516, 1, 0, 0, 0, 94, 527, 1, 0, 0, 0, 96, 541, 1, 0, 0, 0, 98, 553, 1, 0, 0, 0, 100, 555, 1, 0, 0, 0, 102, 565, 1, 0, 0, 0, 104, 567, 1, 0, 0, 0, 106, 569, 1, 0, 0, 0, 108, 571, 1, 0, 0, 0, 110, 580, 1, 0, 0, 0, 112, 587, 1, 0, 0, 0, 114, 590, 1, 0, 0, 0, 116, 608, 1, 0, 0, 0, 118, 619, 1, 0, 0, 0, 120, 625, 1, 0, 0, 0, 122, 627, 1, 0, 0, 0, 124, 636, 1, 0, 0, 0, 126, 652, 1, 0, 0, 0, 128, 659, 1, 0, 0, 0, 130, 667, 1, 0, 0, 0, 132, 672, 1, 0, 0, 0, 134, 676, 1, 0, 0, 0, 136, 678, 1, 0, 0, 0, 138, 685, 1, 0, 0, 0, 140, 693, 1, 0, 0, 0, 142, 704, 1, 0, 0, 0, 144, 711, 1, 0, 0, 0, 146, 713, 1, 0, 0, 0, 148, 721, 1, 0, 0, 0, 150, 724, 1, 0, 0, 0, 152, 728, 1, 0, 0, 0, 154, 735, 1, 0, 0, 0, 156, 743, 1, 0, 0, 0, 158, 748, 1, 0, 0, 0, 160, 752, 1, 0, 0, 0, 162, 754, 1, 0, 0, 0, 164, 765, 1, 0, 0, 0, 166, 769, 1, 0, 0, 0, 168, 781, 1, 0, 0, 0, 170, 783, 1, 0, 0, 0, 172, 794, 1, 0, 0, 0, 174, 800, 1, 0, 0, 0, 176, 825, 1, 0, 0, 0, 178, 827, 1, 0, 0, 0, 180, 829, 1, 0, 0, 0, 182, 831, 1, 0, 0, 0, 184, 836, 1, 0, 0, 0, 186, 838, 1, 0, 0, 0, 188, 847, 1, 0, 0, 0, 190, 849, 1, 0, 0, 0, 192, 851, 1, 0, 0, 0, 194, 196, 5, 4, 0, 0, 195, 194, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 200, 1, 0, 0, 0, 197, 199, 3, 4, 2, 0, 198, 197, 1, 0, 0, 0, 199, 202, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 203, 205, 3, 6, 3, 0, 204, 203, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 209, 1, 0, 0, 0, 206, 208, 3, 2, 1, 0, 207, 206, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 209, 210, 1, 0, 0, 0, 210, 212, 1, 0, 0, 0, 211, 209, 1, 0, 0, 0, 212, 213, 5, 0, 0, 1, 213, 1, 1, 0, 0, 0, 214, 224, 3, 18, 9, 0, 215, 224, 3, 14, 7, 0, 216, 224, 3, 48, 24, 0, 217, 224, 3, 92, 46, 0, 218, 224, 3, 140, 70, 0, 219, 224, 3, 162, 81, 0, 220, 224, 3, 170, 85, 0, 221, 224, 3, 12, 6, 0, 222, 224, 3, 4, 2, 0, 223, 214, 1, 0, 0, 0, 223, 215, 1, 0, 0, 0, 223, 216, 1, 0, 0, 0, 223, 217, 1, 0, 0, 0, 223, 218, 1, 0, 0, 0, 223, 219, 1, 0, 0, 0, 223, 220, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, 3, 1, 0, 0, 0, 225, 226, 7, 0, 0, 0, 226, 5, 1, 0, 0, 0, 227, 228, 5, 5, 0, 0, 228, 229, 5, 56, 0, 0, 229, 230, 3, 8, 4, 0, 230, 231, 5, 51, 0, 0, 231, 7, 1, 0, 0, 0, 232, 233, 3, 10, 5, 0, 233, 9, 1, 0, 0, 0, 234, 236, 5, 50, 0, 0, 235, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 11, 1, 0, 0, 0, 239, 240, 5, 51, 0, 0, 240, 13, 1, 0, 0, 0, 241, 242, 5, 9, 0, 0, 242, 243, 3, 16, 8, 0, 243, 244, 5, 51, 0, 0, 244, 15, 1, 0, 0, 0, 245, 246, 3, 24, 12, 0, 246, 17, 1, 0, 0, 0, 247, 249, 5, 6, 0, 0, 248, 250, 7, 1, 0, 0, 249, 248, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 252, 3, 20, 10, 0, 252, 253, 5, 51, 0, 0, 253, 19, 1, 0, 0, 0, 254, 255, 3, 10, 5, 0, 255, 21, 1, 0, 0, 0, 256, 258, 5, 53, 0, 0, 257, 256, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 260, 3, 24, 12, 0, 260, 23, 1, 0, 0, 0, 261, 266, 3, 188, 94, 0, 262, 263, 5, 53, 0, 0, 263, 265, 3, 188, 94, 0, 264, 262, 1, 0, 0, 0, 265, 268, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 25, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 272, 3, 36, 18, 0, 270, 271, 5, 53, 0, 0, 271, 273, 3, 24, 12, 0, 272, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 276, 1, 0, 0, 0, 274, 276, 3, 46, 23, 0, 275, 269, 1, 0, 0, 0, 275, 274, 1, 0, 0, 0, 276, 27, 1, 0, 0, 0, 277, 280, 3, 38, 19, 0, 278, 279, 5, 53, 0, 0, 279, 281, 3, 24, 12, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 284, 1, 0, 0, 0, 282, 284, 3, 46, 23, 0, 283, 277, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 284, 29, 1, 0, 0, 0, 285, 288, 3, 40, 20, 0, 286, 287, 5, 53, 0, 0, 287, 289, 3, 24, 12, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 292, 3, 46, 23, 0, 291, 285, 1, 0, 0, 0, 291, 290, 1, 0, 0, 0, 292, 31, 1, 0, 0, 0, 293, 296, 3, 42, 21, 0, 294, 295, 5, 53, 0, 0, 295, 297, 3, 24, 12, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 300, 1, 0, 0, 0, 298, 300, 3, 46, 23, 0, 299, 293, 1, 0, 0, 0, 299, 298, 1, 0, 0, 0, 300, 33, 1, 0, 0, 0, 301, 304, 3, 44, 22, 0, 302, 303, 5, 53, 0, 0, 303, 305, 3, 24, 12, 0, 304, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 308, 1, 0, 0, 0, 306, 308, 3, 46, 23, 0, 307, 301, 1, 0, 0, 0, 307, 306, 1, 0, 0, 0, 308, 35, 1, 0, 0, 0, 309, 322, 3, 190, 95, 0, 310, 322, 5, 39, 0, 0, 311, 322, 5, 38, 0, 0, 312, 322, 5, 32, 0, 0, 313, 322, 5, 37, 0, 0, 314, 322, 5, 34, 0, 0, 315, 322, 5, 40, 0, 0, 316, 322, 5, 10, 0, 0, 317, 322, 5, 14, 0, 0, 318, 322, 5, 15, 0, 0, 319, 322, 5, 13, 0, 0, 320, 322, 5, 43, 0, 0, 321, 309, 1, 0, 0, 0, 321, 310, 1, 0, 0, 0, 321, 311, 1, 0, 0, 0, 321, 312, 1, 0, 0, 0, 321, 313, 1, 0, 0, 0, 321, 314, 1, 0, 0, 0, 321, 315, 1, 0, 0, 0, 321, 316, 1, 0, 0, 0, 321, 317, 1, 0, 0, 0, 321, 318, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 321, 320, 1, 0, 0, 0, 322, 37, 1, 0, 0, 0, 323, 326, 3, 190, 95, 0, 324, 326, 5, 43, 0, 0, 325, 323, 1, 0, 0, 0, 325, 324, 1, 0, 0, 0, 326, 39, 1, 0, 0, 0, 327, 337, 3, 190, 95, 0, 328, 337, 5, 39, 0, 0, 329, 337, 5, 38, 0, 0, 330, 337, 5, 32, 0, 0, 331, 337, 5, 37, 0, 0, 332, 337, 5, 34, 0, 0, 333, 337, 5, 40, 0, 0, 334, 337, 5, 10, 0, 0, 335, 337, 5, 43, 0, 0, 336, 327, 1, 0, 0, 0, 336, 328, 1, 0, 0, 0, 336, 329, 1, 0, 0, 0, 336, 330, 1, 0, 0, 0, 336, 331, 1, 0, 0, 0, 336, 332, 1, 0, 0, 0, 336, 333, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 335, 1, 0, 0, 0, 337, 41, 1, 0, 0, 0, 338, 351, 3, 190, 95, 0, 339, 351, 5, 39, 0, 0, 340, 351, 5, 38, 0, 0, 341, 351, 5, 32, 0, 0, 342, 351, 5, 37, 0, 0, 343, 351, 5, 34, 0, 0, 344, 351, 5, 40, 0, 0, 345, 351, 5, 10, 0, 0, 346, 351, 5, 14, 0, 0, 347, 351, 5, 15, 0, 0, 348, 351, 5, 13, 0, 0, 349, 351, 5, 31, 0, 0, 350, 338, 1, 0, 0, 0, 350, 339, 1, 0, 0, 0, 350, 340, 1, 0, 0, 0, 350, 341, 1, 0, 0, 0, 350, 342, 1, 0, 0, 0, 350, 343, 1, 0, 0, 0, 350, 344, 1, 0, 0, 0, 350, 345, 1, 0, 0, 0, 350, 346, 1, 0, 0, 0, 350, 347, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 350, 349, 1, 0, 0, 0, 351, 43, 1, 0, 0, 0, 352, 365, 3, 190, 95, 0, 353, 365, 5, 39, 0, 0, 354, 365, 5, 38, 0, 0, 355, 365, 5, 32, 0, 0, 356, 365, 5, 37, 0, 0, 357, 365, 5, 34, 0, 0, 358, 365, 5, 40, 0, 0, 359, 365, 5, 10, 0, 0, 360, 365, 5, 14, 0, 0, 361, 365, 5, 15, 0, 0, 362, 365, 5, 13, 0, 0, 363, 365, 5, 31, 0, 0, 364, 352, 1, 0, 0, 0, 364, 353, 1, 0, 0, 0, 364, 354, 1, 0, 0, 0, 364, 355, 1, 0, 0, 0, 364, 356, 1, 0, 0, 0, 364, 357, 1, 0, 0, 0, 364, 358, 1, 0, 0, 0, 364, 359, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 364, 361, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 363, 1, 0, 0, 0, 365, 45, 1, 0, 0, 0, 366, 367, 5, 53, 0, 0, 367, 368, 3, 24, 12, 0, 368, 47, 1, 0, 0, 0, 369, 370, 5, 10, 0, 0, 370, 371, 3, 54, 27, 0, 371, 372, 5, 56, 0, 0, 372, 373, 3, 56, 28, 0, 373, 374, 5, 51, 0, 0, 374, 49, 1, 0, 0, 0, 375, 376, 5, 63, 0, 0, 376, 381, 3, 52, 26, 0, 377, 378, 5, 52, 0, 0, 378, 380, 3, 52, 26, 0, 379, 377, 1, 0, 0, 0, 380, 383, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 381, 382, 1, 0, 0, 0, 382, 384, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 385, 5, 64, 0, 0, 385, 51, 1, 0, 0, 0, 386, 387, 3, 54, 27, 0, 387, 388, 5, 56, 0, 0, 388, 389, 3, 56, 28, 0, 389, 53, 1, 0, 0, 0, 390, 396, 3, 188, 94, 0, 391, 392, 5, 59, 0, 0, 392, 393, 3, 22, 11, 0, 393, 394, 5, 60, 0, 0, 394, 396, 1, 0, 0, 0, 395, 390, 1, 0, 0, 0, 395, 391, 1, 0, 0, 0, 396, 401, 1, 0, 0, 0, 397, 398, 5, 53, 0, 0, 398, 400, 3, 54, 27, 0, 399, 397, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 55, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 407, 3, 58, 29, 0, 405, 407, 3, 66, 33, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 57, 1, 0, 0, 0, 408, 414, 3, 10, 5, 0, 409, 414, 3, 60, 30, 0, 410, 414, 3, 62, 31, 0, 411, 414, 3, 64, 32, 0, 412, 414, 3, 188, 94, 0, 413, 408, 1, 0, 0, 0, 413, 409, 1, 0, 0, 0, 413, 410, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 413, 412, 1, 0, 0, 0, 414, 59, 1, 0, 0, 0, 415, 417, 5, 57, 0, 0, 416, 415, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 5, 46, 0, 0, 419, 61, 1, 0, 0, 0, 420, 422, 5, 57, 0, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 5, 47, 0, 0, 424, 63, 1, 0, 0, 0, 425, 426, 5, 57, 0, 0, 426, 430, 5, 11, 0, 0, 427, 428, 5, 57, 0, 0, 428, 430, 5, 12, 0, 0, 429, 425, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 430, 65, 1, 0, 0, 0, 431, 432, 5, 61, 0, 0, 432, 433, 3, 68, 34, 0, 433, 434, 5, 62, 0, 0, 434, 67, 1, 0, 0, 0, 435, 437, 3, 70, 35, 0, 436, 438, 7, 2, 0, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 440, 1, 0, 0, 0, 439, 435, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 69, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 3, 72, 36, 0, 445, 446, 5, 55, 0, 0, 446, 447, 3, 80, 40, 0, 447, 452, 1, 0, 0, 0, 448, 449, 3, 72, 36, 0, 449, 450, 3, 82, 41, 0, 450, 452, 1, 0, 0, 0, 451, 444, 1, 0, 0, 0, 451, 448, 1, 0, 0, 0, 452, 71, 1, 0, 0, 0, 453, 459, 3, 104, 52, 0, 454, 455, 5, 63, 0, 0, 455, 456, 3, 74, 37, 0, 456, 457, 5, 64, 0, 0, 457, 459, 1, 0, 0, 0, 458, 453, 1, 0, 0, 0, 458, 454, 1, 0, 0, 0, 459, 73, 1, 0, 0, 0, 460, 463, 3, 76, 38, 0, 461, 463, 3, 78, 39, 0, 462, 460, 1, 0, 0, 0, 462, 461, 1, 0, 0, 0, 463, 75, 1, 0, 0, 0, 464, 465, 3, 24, 12, 0, 465, 77, 1, 0, 0, 0, 466, 467, 3, 24, 12, 0, 467, 468, 5, 54, 0, 0, 468, 469, 3, 24, 12, 0, 469, 79, 1, 0, 0, 0, 470, 474, 3, 58, 29, 0, 471, 474, 3, 84, 42, 0, 472, 474, 3, 86, 43, 0, 473, 470, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 473, 472, 1, 0, 0, 0, 474, 81, 1, 0, 0, 0, 475, 478, 3, 84, 42, 0, 476, 478, 3, 90, 45, 0, 477, 475, 1, 0, 0, 0, 477, 476, 1, 0, 0, 0, 478, 83, 1, 0, 0, 0, 479, 485, 3, 66, 33, 0, 480, 481, 5, 65, 0, 0, 481, 482, 3, 68, 34, 0, 482, 483, 5, 66, 0, 0, 483, 485, 1, 0, 0, 0, 484, 479, 1, 0, 0, 0, 484, 480, 1, 0, 0, 0, 485, 85, 1, 0, 0, 0, 486, 495, 5, 63, 0, 0, 487, 492, 3, 88, 44, 0, 488, 489, 5, 52, 0, 0, 489, 491, 3, 88, 44, 0, 490, 488, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 496, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 487, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 498, 5, 64, 0, 0, 498, 87, 1, 0, 0, 0, 499, 502, 3, 58, 29, 0, 500, 502, 3, 84, 42, 0, 501, 499, 1, 0, 0, 0, 501, 500, 1, 0, 0, 0, 502, 89, 1, 0, 0, 0, 503, 512, 5, 63, 0, 0, 504, 509, 3, 84, 42, 0, 505, 506, 5, 52, 0, 0, 506, 508, 3, 84, 42, 0, 507, 505, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 513, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 504, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 5, 64, 0, 0, 515, 91, 1, 0, 0, 0, 516, 517, 5, 39, 0, 0, 517, 518, 3, 94, 47, 0, 518, 522, 5, 61, 0, 0, 519, 521, 3, 96, 48, 0, 520, 519, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 520, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 525, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 525, 526, 5, 62, 0, 0, 526, 93, 1, 0, 0, 0, 527, 528, 3, 188, 94, 0, 528, 95, 1, 0, 0, 0, 529, 542, 3, 98, 49, 0, 530, 542, 3, 114, 57, 0, 531, 542, 3, 116, 58, 0, 532, 542, 3, 48, 24, 0, 533, 542, 3, 126, 63, 0, 534, 542, 3, 136, 68, 0, 535, 542, 3, 92, 46, 0, 536, 542, 3, 140, 70, 0, 537, 542, 3, 162, 81, 0, 538, 542, 3, 108, 54, 0, 539, 542, 3, 12, 6, 0, 540, 542, 3, 4, 2, 0, 541, 529, 1, 0, 0, 0, 541, 530, 1, 0, 0, 0, 541, 531, 1, 0, 0, 0, 541, 532, 1, 0, 0, 0, 541, 533, 1, 0, 0, 0, 541, 534, 1, 0, 0, 0, 541, 535, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 541, 537, 1, 0, 0, 0, 541, 538, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 540, 1, 0, 0, 0, 542, 97, 1, 0, 0, 0, 543, 554, 3, 100, 50, 0, 544, 545, 3, 28, 14, 0, 545, 546, 3, 104, 52, 0, 546, 547, 5, 56, 0, 0, 547, 549, 3, 106, 53, 0, 548, 550, 3, 50, 25, 0, 549, 548, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 552, 5, 51, 0, 0, 552, 554, 1, 0, 0, 0, 553, 543, 1, 0, 0, 0, 553, 544, 1, 0, 0, 0, 554, 99, 1, 0, 0, 0, 555, 556, 3, 102, 51, 0, 556, 557, 3, 26, 13, 0, 557, 558, 3, 104, 52, 0, 558, 559, 5, 56, 0, 0, 559, 561, 3, 106, 53, 0, 560, 562, 3, 50, 25, 0, 561, 560, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 564, 5, 51, 0, 0, 564, 101, 1, 0, 0, 0, 565, 566, 7, 3, 0, 0, 566, 103, 1, 0, 0, 0, 567, 568, 3, 188, 94, 0, 568, 105, 1, 0, 0, 0, 569, 570, 5, 46, 0, 0, 570, 107, 1, 0, 0, 0, 571, 572, 3, 110, 55, 0, 572, 573, 3, 104, 52, 0, 573, 574, 5, 56, 0, 0, 574, 576, 3, 106, 53, 0, 575, 577, 3, 50, 25, 0, 576, 575, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 5, 51, 0, 0, 579, 109, 1, 0, 0, 0, 580, 581, 5, 33, 0, 0, 581, 582, 5, 65, 0, 0, 582, 583, 3, 112, 56, 0, 583, 584, 5, 52, 0, 0, 584, 585, 3, 22, 11, 0, 585, 586, 5, 66, 0, 0, 586, 111, 1, 0, 0, 0, 587, 588, 7, 4, 0, 0, 588, 113, 1, 0, 0, 0, 589, 591, 3, 102, 51, 0, 590, 589, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 5, 31, 0, 0, 593, 594, 3, 104, 52, 0, 594, 595, 5, 56, 0, 0, 595, 597, 3, 106, 53, 0, 596, 598, 3, 50, 25, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 603, 5, 61, 0, 0, 600, 602, 3, 96, 48, 0, 601, 600, 1, 0, 0, 0, 602, 605, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 606, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 606, 607, 5, 62, 0, 0, 607, 115, 1, 0, 0, 0, 608, 609, 5, 32, 0, 0, 609, 610, 3, 118, 59, 0, 610, 614, 5, 61, 0, 0, 611, 613, 3, 120, 60, 0, 612, 611, 1, 0, 0, 0, 613, 616, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 617, 1, 0, 0, 0, 616, 614, 1, 0, 0, 0, 617, 618, 5, 62, 0, 0, 618, 117, 1, 0, 0, 0, 619, 620, 3, 188, 94, 0, 620, 119, 1, 0, 0, 0, 621, 626, 3, 48, 24, 0, 622, 626, 3, 122, 61, 0, 623, 626, 3, 124, 62, 0, 624, 626, 3, 4, 2, 0, 625, 621, 1, 0, 0, 0, 625, 622, 1, 0, 0, 0, 625, 623, 1, 0, 0, 0, 625, 624, 1, 0, 0, 0, 626, 121, 1, 0, 0, 0, 627, 628, 3, 32, 16, 0, 628, 629, 3, 104, 52, 0, 629, 630, 5, 56, 0, 0, 630, 632, 3, 106, 53, 0, 631, 633, 3, 50, 25, 0, 632, 631, 1, 0, 0, 0, 632, 633, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 635, 5, 51, 0, 0, 635, 123, 1, 0, 0, 0, 636, 637, 5, 31, 0, 0, 637, 638, 3, 104, 52, 0, 638, 639, 5, 56, 0, 0, 639, 641, 3, 106, 53, 0, 640, 642, 3, 50, 25, 0, 641, 640, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 647, 5, 61, 0, 0, 644, 646, 3, 96, 48, 0, 645, 644, 1, 0, 0, 0, 646, 649, 1, 0, 0, 0, 647, 645, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 650, 1, 0, 0, 0, 649, 647, 1, 0, 0, 0, 650, 651, 5, 62, 0, 0, 651, 125, 1, 0, 0, 0, 652, 653, 5, 34, 0, 0, 653, 655, 3, 128, 64, 0, 654, 656, 3, 50, 25, 0, 655, 654, 1, 0, 0, 0, 655, 656, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 5, 51, 0, 0, 658, 127, 1, 0, 0, 0, 659, 664, 3, 130, 65, 0, 660, 661, 5, 52, 0, 0, 661, 663, 3, 130, 65, 0, 662, 660, 1, 0, 0, 0, 663, 666, 1, 0, 0, 0, 664, 662, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 129, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 670, 3, 132, 66, 0, 668, 669, 5, 35, 0, 0, 669, 671, 3, 134, 67, 0, 670, 668, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 131, 1, 0, 0, 0, 672, 673, 3, 106, 53, 0, 673, 133, 1, 0, 0, 0, 674, 677, 3, 106, 53, 0, 675, 677, 5, 36, 0, 0, 676, 674, 1, 0, 0, 0, 676, 675, 1, 0, 0, 0, 677, 135, 1, 0, 0, 0, 678, 681, 5, 37, 0, 0, 679, 682, 3, 128, 64, 0, 680, 682, 3, 138, 69, 0, 681, 679, 1, 0, 0, 0, 681, 680, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 5, 51, 0, 0, 684, 137, 1, 0, 0, 0, 685, 690, 3, 10, 5, 0, 686, 687, 5, 52, 0, 0, 687, 689, 3, 10, 5, 0, 688, 686, 1, 0, 0, 0, 689, 692, 1, 0, 0, 0, 690, 688, 1, 0, 0, 0, 690, 691, 1, 0, 0, 0, 691, 139, 1, 0, 0, 0, 692, 690, 1, 0, 0, 0, 693, 694, 5, 38, 0, 0, 694, 695, 3, 142, 71, 0, 695, 699, 5, 61, 0, 0, 696, 698, 3, 144, 72, 0, 697, 696, 1, 0, 0, 0, 698, 701, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, 702, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 702, 703, 5, 62, 0, 0, 703, 141, 1, 0, 0, 0, 704, 705, 3, 188, 94, 0, 705, 143, 1, 0, 0, 0, 706, 712, 3, 48, 24, 0, 707, 712, 3, 146, 73, 0, 708, 712, 3, 152, 76, 0, 709, 712, 3, 12, 6, 0, 710, 712, 3, 4, 2, 0, 711, 706, 1, 0, 0, 0, 711, 707, 1, 0, 0, 0, 711, 708, 1, 0, 0, 0, 711, 709, 1, 0, 0, 0, 711, 710, 1, 0, 0, 0, 712, 145, 1, 0, 0, 0, 713, 714, 3, 148, 74, 0, 714, 715, 5, 56, 0, 0, 715, 717, 3, 150, 75, 0, 716, 718, 3, 50, 25, 0, 717, 716, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 51, 0, 0, 720, 147, 1, 0, 0, 0, 721, 722, 3, 188, 94, 0, 722, 149, 1, 0, 0, 0, 723, 725, 5, 57, 0, 0, 724, 723, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 5, 46, 0, 0, 727, 151, 1, 0, 0, 0, 728, 731, 5, 37, 0, 0, 729, 732, 3, 154, 77, 0, 730, 732, 3, 138, 69, 0, 731, 729, 1, 0, 0, 0, 731, 730, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 5, 51, 0, 0, 734, 153, 1, 0, 0, 0, 735, 740, 3, 156, 78, 0, 736, 737, 5, 52, 0, 0, 737, 739, 3, 156, 78, 0, 738, 736, 1, 0, 0, 0, 739, 742, 1, 0, 0, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 155, 1, 0, 0, 0, 742, 740, 1, 0, 0, 0, 743, 746, 3, 158, 79, 0, 744, 745, 5, 35, 0, 0, 745, 747, 3, 160, 80, 0, 746, 744, 1, 0, 0, 0, 746, 747, 1, 0, 0, 0, 747, 157, 1, 0, 0, 0, 748, 749, 3, 150, 75, 0, 749, 159, 1, 0, 0, 0, 750, 753, 3, 150, 75, 0, 751, 753, 5, 36, 0, 0, 752, 750, 1, 0, 0, 0, 752, 751, 1, 0, 0, 0, 753, 161, 1, 0, 0, 0, 754, 755, 5, 40, 0, 0, 755, 756, 3, 164, 82, 0, 756, 760, 5, 61, 0, 0, 757, 759, 3, 166, 83, 0, 758, 757, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 763, 1, 0, 0, 0, 762, 760, 1, 0, 0, 0, 763, 764, 5, 62, 0, 0, 764, 163, 1, 0, 0, 0, 765, 766, 3, 22, 11, 0, 766, 165, 1, 0, 0, 0, 767, 770, 3, 168, 84, 0, 768, 770, 3, 114, 57, 0, 769, 767, 1, 0, 0, 0, 769, 768, 1, 0, 0, 0, 770, 167, 1, 0, 0, 0, 771, 782, 3, 100, 50, 0, 772, 773, 3, 30, 15, 0, 773, 774, 3, 104, 52, 0, 774, 775, 5, 56, 0, 0, 775, 777, 3, 106, 53, 0, 776, 778, 3, 50, 25, 0, 777, 776, 1, 0, 0, 0, 777, 778, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 780, 5, 51, 0, 0, 780, 782, 1, 0, 0, 0, 781, 771, 1, 0, 0, 0, 781, 772, 1, 0, 0, 0, 782, 169, 1, 0, 0, 0, 783, 784, 5, 41, 0, 0, 784, 785, 3, 172, 86, 0, 785, 789, 5, 61, 0, 0, 786, 788, 3, 174, 87, 0, 787, 786, 1, 0, 0, 0, 788, 791, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 793, 5, 62, 0, 0, 793, 171, 1, 0, 0, 0, 794, 795, 3, 188, 94, 0, 795, 173, 1, 0, 0, 0, 796, 801, 3, 48, 24, 0, 797, 801, 3, 4, 2, 0, 798, 801, 3, 176, 88, 0, 799, 801, 3, 12, 6, 0, 800, 796, 1, 0, 0, 0, 800, 797, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, 800, 799, 1, 0, 0, 0, 801, 175, 1, 0, 0, 0, 802, 803, 5, 42, 0, 0, 803, 804, 3, 178, 89, 0, 804, 805, 3, 180, 90, 0, 805, 806, 5, 44, 0, 0, 806, 807, 3, 182, 91, 0, 807, 808, 5, 51, 0, 0, 808, 826, 1, 0, 0, 0, 809, 810, 5, 42, 0, 0, 810, 811, 3, 178, 89, 0, 811, 812, 3, 180, 90, 0, 812, 813, 5, 44, 0, 0, 813, 814, 3, 182, 91, 0, 814, 818, 5, 61, 0, 0, 815, 817, 3, 184, 92, 0, 816, 815, 1, 0, 0, 0, 817, 820, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 821, 1, 0, 0, 0, 820, 818, 1, 0, 0, 0, 821, 823, 5, 62, 0, 0, 822, 824, 5, 51, 0, 0, 823, 822, 1, 0, 0, 0, 823, 824, 1, 0, 0, 0, 824, 826, 1, 0, 0, 0, 825, 802, 1, 0, 0, 0, 825, 809, 1, 0, 0, 0, 826, 177, 1, 0, 0, 0, 827, 828, 3, 188, 94, 0, 828, 179, 1, 0, 0, 0, 829, 830, 3, 186, 93, 0, 830, 181, 1, 0, 0, 0, 831, 832, 3, 186, 93, 0, 832, 183, 1, 0, 0, 0, 833, 837, 3, 48, 24, 0, 834, 837, 3, 4, 2, 0, 835, 837, 3, 12, 6, 0, 836, 833, 1, 0, 0, 0, 836, 834, 1, 0, 0, 0, 836, 835, 1, 0, 0, 0, 837, 185, 1, 0, 0, 0, 838, 840, 5, 59, 0, 0, 839, 841, 5, 43, 0, 0, 840, 839, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 843, 3, 34, 17, 0, 843, 844, 5, 60, 0, 0, 844, 187, 1, 0, 0, 0, 845, 848, 3, 190, 95, 0, 846, 848, 3, 192, 96, 0, 847, 845, 1, 0, 0, 0, 847, 846, 1, 0, 0, 0, 848, 189, 1, 0, 0, 0, 849, 850, 7, 5, 0, 0, 850, 191, 1, 0, 0, 0, 851, 852, 7, 6, 0, 0, 852, 193, 1, 0, 0, 0, 85, 195, 200, 204, 209, 223, 237, 249, 257, 266, 272, 275, 280, 283, 288, 291, 296, 299, 304, 307, 321, 325, 336, 350, 364, 381, 395, 401, 406, 413, 416, 421, 429, 437, 441, 451, 458, 462, 473, 477, 484, 492, 495, 501, 509, 512, 522, 541, 549, 553, 561, 576, 590, 597, 603, 614, 625, 632, 641, 647, 655, 664, 670, 676, 681, 690, 699, 711, 717, 724, 731, 740, 746, 752, 760, 769, 777, 781, 789, 800, 818, 823, 825, 836, 840, 847] \ No newline at end of file diff --git a/proto_schema_parser/antlr/ProtobufParser.py b/proto_schema_parser/antlr/ProtobufParser.py index e6a1651..4dbb644 100644 --- a/proto_schema_parser/antlr/ProtobufParser.py +++ b/proto_schema_parser/antlr/ProtobufParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,66,852,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, + 4,1,66,854,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, @@ -79,84 +79,84 @@ def serializedATN(): 85,1,85,5,85,788,8,85,10,85,12,85,791,9,85,1,85,1,85,1,86,1,86,1, 87,1,87,1,87,1,87,3,87,801,8,87,1,88,1,88,1,88,1,88,1,88,1,88,1, 88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,5,88,817,8,88,10,88,12,88, - 820,9,88,1,88,1,88,3,88,824,8,88,1,89,1,89,1,90,1,90,1,91,1,91,1, - 92,1,92,1,92,3,92,835,8,92,1,93,1,93,3,93,839,8,93,1,93,1,93,1,93, - 1,94,1,94,3,94,846,8,94,1,95,1,95,1,96,1,96,1,96,0,0,97,0,2,4,6, - 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50, - 52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94, - 96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128, - 130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160, - 162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192, - 0,7,1,0,2,3,1,0,7,8,1,0,51,52,1,0,13,15,2,0,16,17,21,30,7,0,5,9, - 11,12,16,30,33,33,35,36,41,42,44,45,6,0,10,10,13,15,31,32,34,34, - 37,40,43,43,904,0,195,1,0,0,0,2,223,1,0,0,0,4,225,1,0,0,0,6,227, - 1,0,0,0,8,232,1,0,0,0,10,235,1,0,0,0,12,239,1,0,0,0,14,241,1,0,0, - 0,16,245,1,0,0,0,18,247,1,0,0,0,20,254,1,0,0,0,22,257,1,0,0,0,24, - 261,1,0,0,0,26,275,1,0,0,0,28,283,1,0,0,0,30,291,1,0,0,0,32,299, - 1,0,0,0,34,307,1,0,0,0,36,321,1,0,0,0,38,325,1,0,0,0,40,336,1,0, - 0,0,42,350,1,0,0,0,44,364,1,0,0,0,46,366,1,0,0,0,48,369,1,0,0,0, - 50,375,1,0,0,0,52,386,1,0,0,0,54,395,1,0,0,0,56,406,1,0,0,0,58,413, - 1,0,0,0,60,416,1,0,0,0,62,421,1,0,0,0,64,429,1,0,0,0,66,431,1,0, - 0,0,68,441,1,0,0,0,70,451,1,0,0,0,72,458,1,0,0,0,74,462,1,0,0,0, - 76,464,1,0,0,0,78,466,1,0,0,0,80,473,1,0,0,0,82,477,1,0,0,0,84,484, - 1,0,0,0,86,486,1,0,0,0,88,501,1,0,0,0,90,503,1,0,0,0,92,516,1,0, - 0,0,94,527,1,0,0,0,96,541,1,0,0,0,98,553,1,0,0,0,100,555,1,0,0,0, - 102,565,1,0,0,0,104,567,1,0,0,0,106,569,1,0,0,0,108,571,1,0,0,0, - 110,580,1,0,0,0,112,587,1,0,0,0,114,590,1,0,0,0,116,608,1,0,0,0, - 118,619,1,0,0,0,120,625,1,0,0,0,122,627,1,0,0,0,124,636,1,0,0,0, - 126,652,1,0,0,0,128,659,1,0,0,0,130,667,1,0,0,0,132,672,1,0,0,0, - 134,676,1,0,0,0,136,678,1,0,0,0,138,685,1,0,0,0,140,693,1,0,0,0, - 142,704,1,0,0,0,144,711,1,0,0,0,146,713,1,0,0,0,148,721,1,0,0,0, - 150,724,1,0,0,0,152,728,1,0,0,0,154,735,1,0,0,0,156,743,1,0,0,0, - 158,748,1,0,0,0,160,752,1,0,0,0,162,754,1,0,0,0,164,765,1,0,0,0, - 166,769,1,0,0,0,168,781,1,0,0,0,170,783,1,0,0,0,172,794,1,0,0,0, - 174,800,1,0,0,0,176,823,1,0,0,0,178,825,1,0,0,0,180,827,1,0,0,0, - 182,829,1,0,0,0,184,834,1,0,0,0,186,836,1,0,0,0,188,845,1,0,0,0, - 190,847,1,0,0,0,192,849,1,0,0,0,194,196,5,4,0,0,195,194,1,0,0,0, - 195,196,1,0,0,0,196,200,1,0,0,0,197,199,3,4,2,0,198,197,1,0,0,0, - 199,202,1,0,0,0,200,198,1,0,0,0,200,201,1,0,0,0,201,204,1,0,0,0, - 202,200,1,0,0,0,203,205,3,6,3,0,204,203,1,0,0,0,204,205,1,0,0,0, - 205,209,1,0,0,0,206,208,3,2,1,0,207,206,1,0,0,0,208,211,1,0,0,0, - 209,207,1,0,0,0,209,210,1,0,0,0,210,212,1,0,0,0,211,209,1,0,0,0, - 212,213,5,0,0,1,213,1,1,0,0,0,214,224,3,18,9,0,215,224,3,14,7,0, - 216,224,3,48,24,0,217,224,3,92,46,0,218,224,3,140,70,0,219,224,3, - 162,81,0,220,224,3,170,85,0,221,224,3,12,6,0,222,224,3,4,2,0,223, - 214,1,0,0,0,223,215,1,0,0,0,223,216,1,0,0,0,223,217,1,0,0,0,223, - 218,1,0,0,0,223,219,1,0,0,0,223,220,1,0,0,0,223,221,1,0,0,0,223, - 222,1,0,0,0,224,3,1,0,0,0,225,226,7,0,0,0,226,5,1,0,0,0,227,228, - 5,5,0,0,228,229,5,56,0,0,229,230,3,8,4,0,230,231,5,51,0,0,231,7, - 1,0,0,0,232,233,3,10,5,0,233,9,1,0,0,0,234,236,5,50,0,0,235,234, - 1,0,0,0,236,237,1,0,0,0,237,235,1,0,0,0,237,238,1,0,0,0,238,11,1, - 0,0,0,239,240,5,51,0,0,240,13,1,0,0,0,241,242,5,9,0,0,242,243,3, - 16,8,0,243,244,5,51,0,0,244,15,1,0,0,0,245,246,3,24,12,0,246,17, - 1,0,0,0,247,249,5,6,0,0,248,250,7,1,0,0,249,248,1,0,0,0,249,250, - 1,0,0,0,250,251,1,0,0,0,251,252,3,20,10,0,252,253,5,51,0,0,253,19, - 1,0,0,0,254,255,3,10,5,0,255,21,1,0,0,0,256,258,5,53,0,0,257,256, - 1,0,0,0,257,258,1,0,0,0,258,259,1,0,0,0,259,260,3,24,12,0,260,23, - 1,0,0,0,261,266,3,188,94,0,262,263,5,53,0,0,263,265,3,188,94,0,264, - 262,1,0,0,0,265,268,1,0,0,0,266,264,1,0,0,0,266,267,1,0,0,0,267, - 25,1,0,0,0,268,266,1,0,0,0,269,272,3,36,18,0,270,271,5,53,0,0,271, - 273,3,24,12,0,272,270,1,0,0,0,272,273,1,0,0,0,273,276,1,0,0,0,274, - 276,3,46,23,0,275,269,1,0,0,0,275,274,1,0,0,0,276,27,1,0,0,0,277, - 280,3,38,19,0,278,279,5,53,0,0,279,281,3,24,12,0,280,278,1,0,0,0, - 280,281,1,0,0,0,281,284,1,0,0,0,282,284,3,46,23,0,283,277,1,0,0, - 0,283,282,1,0,0,0,284,29,1,0,0,0,285,288,3,40,20,0,286,287,5,53, - 0,0,287,289,3,24,12,0,288,286,1,0,0,0,288,289,1,0,0,0,289,292,1, - 0,0,0,290,292,3,46,23,0,291,285,1,0,0,0,291,290,1,0,0,0,292,31,1, - 0,0,0,293,296,3,42,21,0,294,295,5,53,0,0,295,297,3,24,12,0,296,294, - 1,0,0,0,296,297,1,0,0,0,297,300,1,0,0,0,298,300,3,46,23,0,299,293, - 1,0,0,0,299,298,1,0,0,0,300,33,1,0,0,0,301,304,3,44,22,0,302,303, - 5,53,0,0,303,305,3,24,12,0,304,302,1,0,0,0,304,305,1,0,0,0,305,308, - 1,0,0,0,306,308,3,46,23,0,307,301,1,0,0,0,307,306,1,0,0,0,308,35, - 1,0,0,0,309,322,3,190,95,0,310,322,5,39,0,0,311,322,5,38,0,0,312, - 322,5,32,0,0,313,322,5,37,0,0,314,322,5,34,0,0,315,322,5,40,0,0, - 316,322,5,10,0,0,317,322,5,14,0,0,318,322,5,15,0,0,319,322,5,13, - 0,0,320,322,5,43,0,0,321,309,1,0,0,0,321,310,1,0,0,0,321,311,1,0, - 0,0,321,312,1,0,0,0,321,313,1,0,0,0,321,314,1,0,0,0,321,315,1,0, - 0,0,321,316,1,0,0,0,321,317,1,0,0,0,321,318,1,0,0,0,321,319,1,0, - 0,0,321,320,1,0,0,0,322,37,1,0,0,0,323,326,3,190,95,0,324,326,5, - 43,0,0,325,323,1,0,0,0,325,324,1,0,0,0,326,39,1,0,0,0,327,337,3, - 190,95,0,328,337,5,39,0,0,329,337,5,38,0,0,330,337,5,32,0,0,331, + 820,9,88,1,88,1,88,3,88,824,8,88,3,88,826,8,88,1,89,1,89,1,90,1, + 90,1,91,1,91,1,92,1,92,1,92,3,92,837,8,92,1,93,1,93,3,93,841,8,93, + 1,93,1,93,1,93,1,94,1,94,3,94,848,8,94,1,95,1,95,1,96,1,96,1,96, + 0,0,97,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40, + 42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84, + 86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120, + 122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152, + 154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184, + 186,188,190,192,0,7,1,0,2,3,1,0,7,8,1,0,51,52,1,0,13,15,2,0,16,17, + 21,30,7,0,5,9,11,12,16,30,33,33,35,36,41,42,44,45,6,0,10,10,13,15, + 31,32,34,34,37,40,43,43,907,0,195,1,0,0,0,2,223,1,0,0,0,4,225,1, + 0,0,0,6,227,1,0,0,0,8,232,1,0,0,0,10,235,1,0,0,0,12,239,1,0,0,0, + 14,241,1,0,0,0,16,245,1,0,0,0,18,247,1,0,0,0,20,254,1,0,0,0,22,257, + 1,0,0,0,24,261,1,0,0,0,26,275,1,0,0,0,28,283,1,0,0,0,30,291,1,0, + 0,0,32,299,1,0,0,0,34,307,1,0,0,0,36,321,1,0,0,0,38,325,1,0,0,0, + 40,336,1,0,0,0,42,350,1,0,0,0,44,364,1,0,0,0,46,366,1,0,0,0,48,369, + 1,0,0,0,50,375,1,0,0,0,52,386,1,0,0,0,54,395,1,0,0,0,56,406,1,0, + 0,0,58,413,1,0,0,0,60,416,1,0,0,0,62,421,1,0,0,0,64,429,1,0,0,0, + 66,431,1,0,0,0,68,441,1,0,0,0,70,451,1,0,0,0,72,458,1,0,0,0,74,462, + 1,0,0,0,76,464,1,0,0,0,78,466,1,0,0,0,80,473,1,0,0,0,82,477,1,0, + 0,0,84,484,1,0,0,0,86,486,1,0,0,0,88,501,1,0,0,0,90,503,1,0,0,0, + 92,516,1,0,0,0,94,527,1,0,0,0,96,541,1,0,0,0,98,553,1,0,0,0,100, + 555,1,0,0,0,102,565,1,0,0,0,104,567,1,0,0,0,106,569,1,0,0,0,108, + 571,1,0,0,0,110,580,1,0,0,0,112,587,1,0,0,0,114,590,1,0,0,0,116, + 608,1,0,0,0,118,619,1,0,0,0,120,625,1,0,0,0,122,627,1,0,0,0,124, + 636,1,0,0,0,126,652,1,0,0,0,128,659,1,0,0,0,130,667,1,0,0,0,132, + 672,1,0,0,0,134,676,1,0,0,0,136,678,1,0,0,0,138,685,1,0,0,0,140, + 693,1,0,0,0,142,704,1,0,0,0,144,711,1,0,0,0,146,713,1,0,0,0,148, + 721,1,0,0,0,150,724,1,0,0,0,152,728,1,0,0,0,154,735,1,0,0,0,156, + 743,1,0,0,0,158,748,1,0,0,0,160,752,1,0,0,0,162,754,1,0,0,0,164, + 765,1,0,0,0,166,769,1,0,0,0,168,781,1,0,0,0,170,783,1,0,0,0,172, + 794,1,0,0,0,174,800,1,0,0,0,176,825,1,0,0,0,178,827,1,0,0,0,180, + 829,1,0,0,0,182,831,1,0,0,0,184,836,1,0,0,0,186,838,1,0,0,0,188, + 847,1,0,0,0,190,849,1,0,0,0,192,851,1,0,0,0,194,196,5,4,0,0,195, + 194,1,0,0,0,195,196,1,0,0,0,196,200,1,0,0,0,197,199,3,4,2,0,198, + 197,1,0,0,0,199,202,1,0,0,0,200,198,1,0,0,0,200,201,1,0,0,0,201, + 204,1,0,0,0,202,200,1,0,0,0,203,205,3,6,3,0,204,203,1,0,0,0,204, + 205,1,0,0,0,205,209,1,0,0,0,206,208,3,2,1,0,207,206,1,0,0,0,208, + 211,1,0,0,0,209,207,1,0,0,0,209,210,1,0,0,0,210,212,1,0,0,0,211, + 209,1,0,0,0,212,213,5,0,0,1,213,1,1,0,0,0,214,224,3,18,9,0,215,224, + 3,14,7,0,216,224,3,48,24,0,217,224,3,92,46,0,218,224,3,140,70,0, + 219,224,3,162,81,0,220,224,3,170,85,0,221,224,3,12,6,0,222,224,3, + 4,2,0,223,214,1,0,0,0,223,215,1,0,0,0,223,216,1,0,0,0,223,217,1, + 0,0,0,223,218,1,0,0,0,223,219,1,0,0,0,223,220,1,0,0,0,223,221,1, + 0,0,0,223,222,1,0,0,0,224,3,1,0,0,0,225,226,7,0,0,0,226,5,1,0,0, + 0,227,228,5,5,0,0,228,229,5,56,0,0,229,230,3,8,4,0,230,231,5,51, + 0,0,231,7,1,0,0,0,232,233,3,10,5,0,233,9,1,0,0,0,234,236,5,50,0, + 0,235,234,1,0,0,0,236,237,1,0,0,0,237,235,1,0,0,0,237,238,1,0,0, + 0,238,11,1,0,0,0,239,240,5,51,0,0,240,13,1,0,0,0,241,242,5,9,0,0, + 242,243,3,16,8,0,243,244,5,51,0,0,244,15,1,0,0,0,245,246,3,24,12, + 0,246,17,1,0,0,0,247,249,5,6,0,0,248,250,7,1,0,0,249,248,1,0,0,0, + 249,250,1,0,0,0,250,251,1,0,0,0,251,252,3,20,10,0,252,253,5,51,0, + 0,253,19,1,0,0,0,254,255,3,10,5,0,255,21,1,0,0,0,256,258,5,53,0, + 0,257,256,1,0,0,0,257,258,1,0,0,0,258,259,1,0,0,0,259,260,3,24,12, + 0,260,23,1,0,0,0,261,266,3,188,94,0,262,263,5,53,0,0,263,265,3,188, + 94,0,264,262,1,0,0,0,265,268,1,0,0,0,266,264,1,0,0,0,266,267,1,0, + 0,0,267,25,1,0,0,0,268,266,1,0,0,0,269,272,3,36,18,0,270,271,5,53, + 0,0,271,273,3,24,12,0,272,270,1,0,0,0,272,273,1,0,0,0,273,276,1, + 0,0,0,274,276,3,46,23,0,275,269,1,0,0,0,275,274,1,0,0,0,276,27,1, + 0,0,0,277,280,3,38,19,0,278,279,5,53,0,0,279,281,3,24,12,0,280,278, + 1,0,0,0,280,281,1,0,0,0,281,284,1,0,0,0,282,284,3,46,23,0,283,277, + 1,0,0,0,283,282,1,0,0,0,284,29,1,0,0,0,285,288,3,40,20,0,286,287, + 5,53,0,0,287,289,3,24,12,0,288,286,1,0,0,0,288,289,1,0,0,0,289,292, + 1,0,0,0,290,292,3,46,23,0,291,285,1,0,0,0,291,290,1,0,0,0,292,31, + 1,0,0,0,293,296,3,42,21,0,294,295,5,53,0,0,295,297,3,24,12,0,296, + 294,1,0,0,0,296,297,1,0,0,0,297,300,1,0,0,0,298,300,3,46,23,0,299, + 293,1,0,0,0,299,298,1,0,0,0,300,33,1,0,0,0,301,304,3,44,22,0,302, + 303,5,53,0,0,303,305,3,24,12,0,304,302,1,0,0,0,304,305,1,0,0,0,305, + 308,1,0,0,0,306,308,3,46,23,0,307,301,1,0,0,0,307,306,1,0,0,0,308, + 35,1,0,0,0,309,322,3,190,95,0,310,322,5,39,0,0,311,322,5,38,0,0, + 312,322,5,32,0,0,313,322,5,37,0,0,314,322,5,34,0,0,315,322,5,40, + 0,0,316,322,5,10,0,0,317,322,5,14,0,0,318,322,5,15,0,0,319,322,5, + 13,0,0,320,322,5,43,0,0,321,309,1,0,0,0,321,310,1,0,0,0,321,311, + 1,0,0,0,321,312,1,0,0,0,321,313,1,0,0,0,321,314,1,0,0,0,321,315, + 1,0,0,0,321,316,1,0,0,0,321,317,1,0,0,0,321,318,1,0,0,0,321,319, + 1,0,0,0,321,320,1,0,0,0,322,37,1,0,0,0,323,326,3,190,95,0,324,326, + 5,43,0,0,325,323,1,0,0,0,325,324,1,0,0,0,326,39,1,0,0,0,327,337, + 3,190,95,0,328,337,5,39,0,0,329,337,5,38,0,0,330,337,5,32,0,0,331, 337,5,37,0,0,332,337,5,34,0,0,333,337,5,40,0,0,334,337,5,10,0,0, 335,337,5,43,0,0,336,327,1,0,0,0,336,328,1,0,0,0,336,329,1,0,0,0, 336,330,1,0,0,0,336,331,1,0,0,0,336,332,1,0,0,0,336,333,1,0,0,0, @@ -307,25 +307,26 @@ def serializedATN(): 2,0,798,801,3,176,88,0,799,801,3,12,6,0,800,796,1,0,0,0,800,797, 1,0,0,0,800,798,1,0,0,0,800,799,1,0,0,0,801,175,1,0,0,0,802,803, 5,42,0,0,803,804,3,178,89,0,804,805,3,180,90,0,805,806,5,44,0,0, - 806,807,3,182,91,0,807,808,5,51,0,0,808,824,1,0,0,0,809,810,5,42, + 806,807,3,182,91,0,807,808,5,51,0,0,808,826,1,0,0,0,809,810,5,42, 0,0,810,811,3,178,89,0,811,812,3,180,90,0,812,813,5,44,0,0,813,814, 3,182,91,0,814,818,5,61,0,0,815,817,3,184,92,0,816,815,1,0,0,0,817, 820,1,0,0,0,818,816,1,0,0,0,818,819,1,0,0,0,819,821,1,0,0,0,820, - 818,1,0,0,0,821,822,5,62,0,0,822,824,1,0,0,0,823,802,1,0,0,0,823, - 809,1,0,0,0,824,177,1,0,0,0,825,826,3,188,94,0,826,179,1,0,0,0,827, - 828,3,186,93,0,828,181,1,0,0,0,829,830,3,186,93,0,830,183,1,0,0, - 0,831,835,3,48,24,0,832,835,3,4,2,0,833,835,3,12,6,0,834,831,1,0, - 0,0,834,832,1,0,0,0,834,833,1,0,0,0,835,185,1,0,0,0,836,838,5,59, - 0,0,837,839,5,43,0,0,838,837,1,0,0,0,838,839,1,0,0,0,839,840,1,0, - 0,0,840,841,3,34,17,0,841,842,5,60,0,0,842,187,1,0,0,0,843,846,3, - 190,95,0,844,846,3,192,96,0,845,843,1,0,0,0,845,844,1,0,0,0,846, - 189,1,0,0,0,847,848,7,5,0,0,848,191,1,0,0,0,849,850,7,6,0,0,850, - 193,1,0,0,0,84,195,200,204,209,223,237,249,257,266,272,275,280,283, - 288,291,296,299,304,307,321,325,336,350,364,381,395,401,406,413, - 416,421,429,437,441,451,458,462,473,477,484,492,495,501,509,512, - 522,541,549,553,561,576,590,597,603,614,625,632,641,647,655,664, - 670,676,681,690,699,711,717,724,731,740,746,752,760,769,777,781, - 789,800,818,823,834,838,845 + 818,1,0,0,0,821,823,5,62,0,0,822,824,5,51,0,0,823,822,1,0,0,0,823, + 824,1,0,0,0,824,826,1,0,0,0,825,802,1,0,0,0,825,809,1,0,0,0,826, + 177,1,0,0,0,827,828,3,188,94,0,828,179,1,0,0,0,829,830,3,186,93, + 0,830,181,1,0,0,0,831,832,3,186,93,0,832,183,1,0,0,0,833,837,3,48, + 24,0,834,837,3,4,2,0,835,837,3,12,6,0,836,833,1,0,0,0,836,834,1, + 0,0,0,836,835,1,0,0,0,837,185,1,0,0,0,838,840,5,59,0,0,839,841,5, + 43,0,0,840,839,1,0,0,0,840,841,1,0,0,0,841,842,1,0,0,0,842,843,3, + 34,17,0,843,844,5,60,0,0,844,187,1,0,0,0,845,848,3,190,95,0,846, + 848,3,192,96,0,847,845,1,0,0,0,847,846,1,0,0,0,848,189,1,0,0,0,849, + 850,7,5,0,0,850,191,1,0,0,0,851,852,7,6,0,0,852,193,1,0,0,0,85,195, + 200,204,209,223,237,249,257,266,272,275,280,283,288,291,296,299, + 304,307,321,325,336,350,364,381,395,401,406,413,416,421,429,437, + 441,451,458,462,473,477,484,492,495,501,509,512,522,541,549,553, + 561,576,590,597,603,614,625,632,641,647,655,664,670,676,681,690, + 699,711,717,724,731,740,746,752,760,769,777,781,789,800,818,823, + 825,836,840,847 ] class ProtobufParser ( Parser ): @@ -7261,9 +7262,9 @@ def methodDecl(self): self.enterRule(localctx, 176, self.RULE_methodDecl) self._la = 0 # Token type try: - self.state = 823 + self.state = 825 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,80,self._ctx) + la_ = self._interp.adaptivePredict(self._input,81,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) self.state = 802 @@ -7306,6 +7307,14 @@ def methodDecl(self): self.state = 821 self.match(ProtobufParser.R_BRACE) + self.state = 823 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,80,self._ctx) + if la_ == 1: + self.state = 822 + self.match(ProtobufParser.SEMICOLON) + + pass @@ -7355,7 +7364,7 @@ def methodName(self): self.enterRule(localctx, 178, self.RULE_methodName) try: self.enterOuterAlt(localctx, 1) - self.state = 825 + self.state = 827 self.identifier() except RecognitionException as re: localctx.exception = re @@ -7403,7 +7412,7 @@ def inputType(self): self.enterRule(localctx, 180, self.RULE_inputType) try: self.enterOuterAlt(localctx, 1) - self.state = 827 + self.state = 829 self.messageType() except RecognitionException as re: localctx.exception = re @@ -7451,7 +7460,7 @@ def outputType(self): self.enterRule(localctx, 182, self.RULE_outputType) try: self.enterOuterAlt(localctx, 1) - self.state = 829 + self.state = 831 self.messageType() except RecognitionException as re: localctx.exception = re @@ -7506,22 +7515,22 @@ def methodElement(self): localctx = ProtobufParser.MethodElementContext(self, self._ctx, self.state) self.enterRule(localctx, 184, self.RULE_methodElement) try: - self.state = 834 + self.state = 836 self._errHandler.sync(self) token = self._input.LA(1) if token in [10]: self.enterOuterAlt(localctx, 1) - self.state = 831 + self.state = 833 self.optionDecl() pass elif token in [2, 3]: self.enterOuterAlt(localctx, 2) - self.state = 832 + self.state = 834 self.commentDecl() pass elif token in [51]: self.enterOuterAlt(localctx, 3) - self.state = 833 + self.state = 835 self.emptyDecl() pass else: @@ -7583,19 +7592,19 @@ def messageType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 836 - self.match(ProtobufParser.L_PAREN) self.state = 838 + self.match(ProtobufParser.L_PAREN) + self.state = 840 self._errHandler.sync(self) _la = self._input.LA(1) if _la==43: - self.state = 837 + self.state = 839 self.match(ProtobufParser.STREAM) - self.state = 840 + self.state = 842 self.methodDeclTypeName() - self.state = 841 + self.state = 843 self.match(ProtobufParser.R_PAREN) except RecognitionException as re: localctx.exception = re @@ -7646,17 +7655,17 @@ def identifier(self): localctx = ProtobufParser.IdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 188, self.RULE_identifier) try: - self.state = 845 + self.state = 847 self._errHandler.sync(self) token = self._input.LA(1) if token in [5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 35, 36, 41, 42, 44, 45]: self.enterOuterAlt(localctx, 1) - self.state = 843 + self.state = 845 self.alwaysIdent() pass elif token in [10, 13, 14, 15, 31, 32, 34, 37, 38, 39, 40, 43]: self.enterOuterAlt(localctx, 2) - self.state = 844 + self.state = 846 self.sometimesIdent() pass else: @@ -7792,7 +7801,7 @@ def alwaysIdent(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 847 + self.state = 849 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 59487444474848) != 0)): self._errHandler.recoverInline(self) @@ -7878,7 +7887,7 @@ def sometimesIdent(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 849 + self.state = 851 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 10881299702784) != 0)): self._errHandler.recoverInline(self) diff --git a/tests/test_parser.py b/tests/test_parser.py index 589bd75..175d6f2 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -748,6 +748,10 @@ def test_parse_service(): option (my_method_option).foo = 567; option (my_method_option).bar = "Some string"; } + rpc MyMethod_Semicolon(RequestType) returns(ResponseType) { + option (my_method_option).foo = 567; + option (my_method_option).bar = "Some string"; + }; } service ExampleEmptyService {} @@ -788,6 +792,17 @@ def test_parse_service(): ), ], ), + ast.Method( + name="MyMethod_Semicolon", + input_type=ast.MessageType(type="RequestType"), + output_type=ast.MessageType(type="ResponseType"), + elements=[ + ast.Option(name="(my_method_option).foo", value="567"), + ast.Option( + name="(my_method_option).bar", value="Some string" + ), + ], + ), ], ), ast.Service(