// Copyright (c) 2020 Proton Technologies AG
//
// This file is part of ProtonMail Bridge.
//
// ProtonMail Bridge is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ProtonMail Bridge is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with ProtonMail Bridge. If not, see .
// Code generated from RFC5322Parser.g4 by ANTLR 4.8. DO NOT EDIT.
package parser // RFC5322Parser
import (
"fmt"
"reflect"
"strconv"
"github.com/antlr/antlr4/runtime/Go/antlr"
)
// Suppress unused import errors
var _ = fmt.Printf
var _ = reflect.Copy
var _ = strconv.Itoa
var parserATN = []uint16{
3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 72, 1014,
4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7,
4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13,
9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9,
18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23,
4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4,
29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34,
9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9,
39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44,
4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4,
50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55,
9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9,
60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65,
4, 66, 9, 66, 4, 67, 9, 67, 3, 2, 3, 2, 5, 2, 137, 10, 2, 3, 3, 3, 3, 3,
3, 5, 3, 142, 10, 3, 3, 4, 7, 4, 145, 10, 4, 12, 4, 14, 4, 148, 11, 4,
3, 4, 5, 4, 151, 10, 4, 3, 4, 6, 4, 154, 10, 4, 13, 4, 14, 4, 155, 3, 4,
5, 4, 159, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5,
3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5,
3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5,
5, 5, 194, 10, 5, 3, 6, 3, 6, 3, 6, 5, 6, 199, 10, 6, 3, 7, 3, 7, 5, 7,
203, 10, 7, 3, 7, 7, 7, 206, 10, 7, 12, 7, 14, 7, 209, 11, 7, 3, 7, 5,
7, 212, 10, 7, 3, 7, 3, 7, 3, 8, 5, 8, 217, 10, 8, 3, 8, 6, 8, 220, 10,
8, 13, 8, 14, 8, 221, 3, 8, 5, 8, 225, 10, 8, 3, 8, 5, 8, 228, 10, 8, 3,
9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3,
9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 252, 10,
9, 3, 10, 6, 10, 255, 10, 10, 13, 10, 14, 10, 256, 3, 11, 6, 11, 260, 10,
11, 13, 11, 14, 11, 261, 3, 11, 3, 11, 6, 11, 266, 10, 11, 13, 11, 14,
11, 267, 7, 11, 270, 10, 11, 12, 11, 14, 11, 273, 11, 11, 3, 11, 5, 11,
276, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3,
12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12,
3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3,
12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 312, 10, 12, 3, 13, 3, 13, 5, 13,
316, 10, 13, 3, 14, 5, 14, 319, 10, 14, 3, 14, 7, 14, 322, 10, 14, 12,
14, 14, 14, 325, 11, 14, 3, 15, 3, 15, 3, 15, 5, 15, 330, 10, 15, 3, 15,
3, 15, 3, 16, 5, 16, 335, 10, 16, 3, 16, 3, 16, 5, 16, 339, 10, 16, 3,
16, 5, 16, 342, 10, 16, 3, 16, 3, 16, 5, 16, 346, 10, 16, 3, 16, 5, 16,
349, 10, 16, 3, 16, 3, 16, 5, 16, 353, 10, 16, 3, 16, 5, 16, 356, 10, 16,
3, 17, 3, 17, 3, 17, 5, 17, 361, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3,
17, 3, 17, 3, 17, 3, 17, 5, 17, 371, 10, 17, 3, 17, 5, 17, 374, 10, 17,
3, 17, 5, 17, 377, 10, 17, 3, 17, 3, 17, 3, 18, 5, 18, 382, 10, 18, 3,
18, 3, 18, 5, 18, 386, 10, 18, 3, 18, 3, 18, 5, 18, 390, 10, 18, 5, 18,
392, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3,
19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19,
3, 19, 3, 19, 5, 19, 415, 10, 19, 3, 20, 5, 20, 418, 10, 20, 3, 20, 3,
20, 5, 20, 422, 10, 20, 3, 20, 3, 20, 5, 20, 426, 10, 20, 3, 20, 3, 20,
5, 20, 430, 10, 20, 3, 20, 5, 20, 433, 10, 20, 5, 20, 435, 10, 20, 3, 21,
3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3,
21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21,
3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3,
21, 3, 21, 3, 21, 3, 21, 5, 21, 473, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22,
3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 483, 10, 22, 3, 22, 3, 22, 3, 22, 5,
22, 488, 10, 22, 5, 22, 490, 10, 22, 3, 23, 5, 23, 493, 10, 23, 3, 23,
3, 23, 5, 23, 497, 10, 23, 3, 23, 5, 23, 500, 10, 23, 3, 23, 3, 23, 5,
23, 504, 10, 23, 5, 23, 506, 10, 23, 3, 24, 3, 24, 3, 24, 5, 24, 511, 10,
24, 3, 24, 3, 24, 3, 24, 5, 24, 516, 10, 24, 5, 24, 518, 10, 24, 3, 25,
3, 25, 3, 25, 5, 25, 523, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 528, 10,
25, 5, 25, 530, 10, 25, 3, 26, 5, 26, 533, 10, 26, 3, 26, 3, 26, 3, 26,
3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 544, 10, 27, 3, 28, 3,
28, 5, 28, 548, 10, 28, 3, 29, 3, 29, 5, 29, 552, 10, 29, 3, 30, 5, 30,
555, 10, 30, 3, 30, 3, 30, 3, 31, 5, 31, 560, 10, 31, 3, 31, 3, 31, 5,
31, 564, 10, 31, 3, 31, 3, 31, 5, 31, 568, 10, 31, 3, 31, 5, 31, 571, 10,
31, 3, 32, 3, 32, 3, 32, 5, 32, 576, 10, 32, 3, 32, 3, 32, 5, 32, 580,
10, 32, 3, 33, 6, 33, 583, 10, 33, 13, 33, 14, 33, 584, 3, 33, 3, 33, 3,
33, 3, 33, 7, 33, 591, 10, 33, 12, 33, 14, 33, 594, 11, 33, 5, 33, 596,
10, 33, 3, 34, 3, 34, 3, 34, 7, 34, 601, 10, 34, 12, 34, 14, 34, 604, 11,
34, 3, 34, 5, 34, 607, 10, 34, 3, 35, 3, 35, 3, 35, 7, 35, 612, 10, 35,
12, 35, 14, 35, 615, 11, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35,
622, 10, 35, 3, 36, 3, 36, 3, 36, 5, 36, 627, 10, 36, 3, 37, 3, 37, 3,
37, 3, 37, 3, 37, 5, 37, 634, 10, 37, 3, 38, 5, 38, 637, 10, 38, 3, 38,
3, 38, 5, 38, 641, 10, 38, 3, 38, 5, 38, 644, 10, 38, 3, 38, 3, 38, 5,
38, 648, 10, 38, 3, 38, 5, 38, 651, 10, 38, 3, 39, 6, 39, 654, 10, 39,
13, 39, 14, 39, 655, 3, 40, 5, 40, 659, 10, 40, 3, 40, 3, 40, 5, 40, 663,
10, 40, 3, 40, 5, 40, 666, 10, 40, 3, 40, 3, 40, 5, 40, 670, 10, 40, 3,
40, 5, 40, 673, 10, 40, 3, 40, 3, 40, 5, 40, 677, 10, 40, 5, 40, 679, 10,
40, 3, 41, 3, 41, 5, 41, 683, 10, 41, 3, 41, 7, 41, 686, 10, 41, 12, 41,
14, 41, 689, 11, 41, 3, 41, 5, 41, 692, 10, 41, 3, 41, 3, 41, 3, 42, 3,
42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42,
3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3,
42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42,
728, 10, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3,
46, 3, 46, 3, 46, 5, 46, 741, 10, 46, 3, 47, 6, 47, 744, 10, 47, 13, 47,
14, 47, 745, 3, 47, 3, 47, 6, 47, 750, 10, 47, 13, 47, 14, 47, 751, 3,
48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48,
3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3,
48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48,
5, 48, 786, 10, 48, 3, 49, 5, 49, 789, 10, 49, 3, 49, 3, 49, 3, 49, 3,
49, 3, 49, 5, 49, 796, 10, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 7, 51,
803, 10, 51, 12, 51, 14, 51, 806, 11, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5,
51, 812, 10, 51, 3, 51, 3, 51, 5, 51, 816, 10, 51, 7, 51, 818, 10, 51,
12, 51, 14, 51, 821, 11, 51, 3, 52, 5, 52, 824, 10, 52, 3, 52, 7, 52, 827,
10, 52, 12, 52, 14, 52, 830, 11, 52, 3, 52, 3, 52, 3, 52, 3, 52, 5, 52,
836, 10, 52, 7, 52, 838, 10, 52, 12, 52, 14, 52, 841, 11, 52, 3, 53, 5,
53, 844, 10, 53, 3, 53, 7, 53, 847, 10, 53, 12, 53, 14, 53, 850, 11, 53,
3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 856, 10, 53, 7, 53, 858, 10, 53, 12,
53, 14, 53, 861, 11, 53, 3, 54, 5, 54, 864, 10, 54, 3, 54, 6, 54, 867,
10, 54, 13, 54, 14, 54, 868, 3, 54, 5, 54, 872, 10, 54, 3, 55, 3, 55, 3,
55, 7, 55, 877, 10, 55, 12, 55, 14, 55, 880, 11, 55, 3, 56, 3, 56, 3, 56,
7, 56, 885, 10, 56, 12, 56, 14, 56, 888, 11, 56, 3, 57, 3, 57, 3, 57, 3,
57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 3, 59,
3, 60, 6, 60, 905, 10, 60, 13, 60, 14, 60, 906, 3, 61, 3, 61, 3, 61, 3,
61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61,
3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 5, 61, 928, 10, 61, 3, 62, 6, 62, 931,
10, 62, 13, 62, 14, 62, 932, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63,
3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3,
63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63,
3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 968, 10, 63, 3, 64, 3,
64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66,
3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3,
66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66,
3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 1010, 10, 66, 3,
67, 3, 67, 3, 67, 2, 2, 68, 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, 2, 6, 4, 2, 22, 22, 24, 24, 6, 2, 4, 4, 7, 8, 10, 10, 45,
45, 4, 2, 5, 5, 11, 11, 3, 2, 47, 72, 2, 1306, 2, 136, 3, 2, 2, 2, 4, 141,
3, 2, 2, 2, 6, 158, 3, 2, 2, 2, 8, 193, 3, 2, 2, 2, 10, 198, 3, 2, 2, 2,
12, 200, 3, 2, 2, 2, 14, 227, 3, 2, 2, 2, 16, 251, 3, 2, 2, 2, 18, 254,
3, 2, 2, 2, 20, 259, 3, 2, 2, 2, 22, 311, 3, 2, 2, 2, 24, 315, 3, 2, 2,
2, 26, 323, 3, 2, 2, 2, 28, 326, 3, 2, 2, 2, 30, 355, 3, 2, 2, 2, 32, 360,
3, 2, 2, 2, 34, 391, 3, 2, 2, 2, 36, 414, 3, 2, 2, 2, 38, 434, 3, 2, 2,
2, 40, 472, 3, 2, 2, 2, 42, 489, 3, 2, 2, 2, 44, 505, 3, 2, 2, 2, 46, 517,
3, 2, 2, 2, 48, 529, 3, 2, 2, 2, 50, 532, 3, 2, 2, 2, 52, 543, 3, 2, 2,
2, 54, 547, 3, 2, 2, 2, 56, 551, 3, 2, 2, 2, 58, 554, 3, 2, 2, 2, 60, 570,
3, 2, 2, 2, 62, 572, 3, 2, 2, 2, 64, 595, 3, 2, 2, 2, 66, 606, 3, 2, 2,
2, 68, 621, 3, 2, 2, 2, 70, 626, 3, 2, 2, 2, 72, 628, 3, 2, 2, 2, 74, 650,
3, 2, 2, 2, 76, 653, 3, 2, 2, 2, 78, 678, 3, 2, 2, 2, 80, 680, 3, 2, 2,
2, 82, 727, 3, 2, 2, 2, 84, 729, 3, 2, 2, 2, 86, 731, 3, 2, 2, 2, 88, 733,
3, 2, 2, 2, 90, 735, 3, 2, 2, 2, 92, 743, 3, 2, 2, 2, 94, 785, 3, 2, 2,
2, 96, 788, 3, 2, 2, 2, 98, 797, 3, 2, 2, 2, 100, 804, 3, 2, 2, 2, 102,
828, 3, 2, 2, 2, 104, 848, 3, 2, 2, 2, 106, 866, 3, 2, 2, 2, 108, 873,
3, 2, 2, 2, 110, 881, 3, 2, 2, 2, 112, 889, 3, 2, 2, 2, 114, 899, 3, 2,
2, 2, 116, 901, 3, 2, 2, 2, 118, 904, 3, 2, 2, 2, 120, 927, 3, 2, 2, 2,
122, 930, 3, 2, 2, 2, 124, 967, 3, 2, 2, 2, 126, 969, 3, 2, 2, 2, 128,
972, 3, 2, 2, 2, 130, 1009, 3, 2, 2, 2, 132, 1011, 3, 2, 2, 2, 134, 137,
5, 130, 66, 2, 135, 137, 5, 128, 65, 2, 136, 134, 3, 2, 2, 2, 136, 135,
3, 2, 2, 2, 137, 3, 3, 2, 2, 2, 138, 139, 7, 36, 2, 2, 139, 142, 5, 2,
2, 2, 140, 142, 5, 90, 46, 2, 141, 138, 3, 2, 2, 2, 141, 140, 3, 2, 2,
2, 142, 5, 3, 2, 2, 2, 143, 145, 5, 128, 65, 2, 144, 143, 3, 2, 2, 2, 145,
148, 3, 2, 2, 2, 146, 144, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 149,
3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 149, 151, 5, 126, 64, 2, 150, 146, 3,
2, 2, 2, 150, 151, 3, 2, 2, 2, 151, 153, 3, 2, 2, 2, 152, 154, 5, 128,
65, 2, 153, 152, 3, 2, 2, 2, 154, 155, 3, 2, 2, 2, 155, 153, 3, 2, 2, 2,
155, 156, 3, 2, 2, 2, 156, 159, 3, 2, 2, 2, 157, 159, 5, 92, 47, 2, 158,
150, 3, 2, 2, 2, 158, 157, 3, 2, 2, 2, 159, 7, 3, 2, 2, 2, 160, 194, 5,
132, 67, 2, 161, 194, 7, 12, 2, 2, 162, 194, 7, 13, 2, 2, 163, 194, 7,
14, 2, 2, 164, 194, 7, 15, 2, 2, 165, 194, 7, 16, 2, 2, 166, 194, 7, 17,
2, 2, 167, 194, 7, 18, 2, 2, 168, 194, 7, 21, 2, 2, 169, 194, 7, 22, 2,
2, 170, 194, 7, 23, 2, 2, 171, 194, 7, 24, 2, 2, 172, 194, 7, 25, 2, 2,
173, 194, 7, 26, 2, 2, 174, 194, 7, 27, 2, 2, 175, 194, 7, 28, 2, 2, 176,
194, 7, 29, 2, 2, 177, 194, 7, 30, 2, 2, 178, 194, 7, 31, 2, 2, 179, 194,
7, 32, 2, 2, 180, 194, 7, 33, 2, 2, 181, 194, 7, 34, 2, 2, 182, 194, 7,
35, 2, 2, 183, 194, 7, 37, 2, 2, 184, 194, 7, 38, 2, 2, 185, 194, 7, 39,
2, 2, 186, 194, 7, 40, 2, 2, 187, 194, 7, 41, 2, 2, 188, 194, 7, 42, 2,
2, 189, 194, 7, 43, 2, 2, 190, 194, 7, 44, 2, 2, 191, 194, 5, 86, 44, 2,
192, 194, 7, 46, 2, 2, 193, 160, 3, 2, 2, 2, 193, 161, 3, 2, 2, 2, 193,
162, 3, 2, 2, 2, 193, 163, 3, 2, 2, 2, 193, 164, 3, 2, 2, 2, 193, 165,
3, 2, 2, 2, 193, 166, 3, 2, 2, 2, 193, 167, 3, 2, 2, 2, 193, 168, 3, 2,
2, 2, 193, 169, 3, 2, 2, 2, 193, 170, 3, 2, 2, 2, 193, 171, 3, 2, 2, 2,
193, 172, 3, 2, 2, 2, 193, 173, 3, 2, 2, 2, 193, 174, 3, 2, 2, 2, 193,
175, 3, 2, 2, 2, 193, 176, 3, 2, 2, 2, 193, 177, 3, 2, 2, 2, 193, 178,
3, 2, 2, 2, 193, 179, 3, 2, 2, 2, 193, 180, 3, 2, 2, 2, 193, 181, 3, 2,
2, 2, 193, 182, 3, 2, 2, 2, 193, 183, 3, 2, 2, 2, 193, 184, 3, 2, 2, 2,
193, 185, 3, 2, 2, 2, 193, 186, 3, 2, 2, 2, 193, 187, 3, 2, 2, 2, 193,
188, 3, 2, 2, 2, 193, 189, 3, 2, 2, 2, 193, 190, 3, 2, 2, 2, 193, 191,
3, 2, 2, 2, 193, 192, 3, 2, 2, 2, 194, 9, 3, 2, 2, 2, 195, 199, 5, 8, 5,
2, 196, 199, 5, 4, 3, 2, 197, 199, 5, 12, 7, 2, 198, 195, 3, 2, 2, 2, 198,
196, 3, 2, 2, 2, 198, 197, 3, 2, 2, 2, 199, 11, 3, 2, 2, 2, 200, 207, 7,
19, 2, 2, 201, 203, 5, 6, 4, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2,
2, 203, 204, 3, 2, 2, 2, 204, 206, 5, 10, 6, 2, 205, 202, 3, 2, 2, 2, 206,
209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 211,
3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 210, 212, 5, 6, 4, 2, 211, 210, 3, 2,
2, 2, 211, 212, 3, 2, 2, 2, 212, 213, 3, 2, 2, 2, 213, 214, 7, 20, 2, 2,
214, 13, 3, 2, 2, 2, 215, 217, 5, 6, 4, 2, 216, 215, 3, 2, 2, 2, 216, 217,
3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 220, 5, 12, 7, 2, 219, 216, 3, 2,
2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2,
222, 224, 3, 2, 2, 2, 223, 225, 5, 6, 4, 2, 224, 223, 3, 2, 2, 2, 224,
225, 3, 2, 2, 2, 225, 228, 3, 2, 2, 2, 226, 228, 5, 6, 4, 2, 227, 219,
3, 2, 2, 2, 227, 226, 3, 2, 2, 2, 228, 15, 3, 2, 2, 2, 229, 252, 5, 132,
67, 2, 230, 252, 7, 27, 2, 2, 231, 252, 7, 12, 2, 2, 232, 252, 7, 14, 2,
2, 233, 252, 7, 15, 2, 2, 234, 252, 7, 16, 2, 2, 235, 252, 7, 17, 2, 2,
236, 252, 7, 18, 2, 2, 237, 252, 7, 21, 2, 2, 238, 252, 7, 22, 2, 2, 239,
252, 7, 24, 2, 2, 240, 252, 7, 26, 2, 2, 241, 252, 7, 31, 2, 2, 242, 252,
7, 33, 2, 2, 243, 252, 7, 38, 2, 2, 244, 252, 7, 39, 2, 2, 245, 252, 7,
40, 2, 2, 246, 252, 7, 41, 2, 2, 247, 252, 7, 42, 2, 2, 248, 252, 7, 43,
2, 2, 249, 252, 7, 44, 2, 2, 250, 252, 7, 46, 2, 2, 251, 229, 3, 2, 2,
2, 251, 230, 3, 2, 2, 2, 251, 231, 3, 2, 2, 2, 251, 232, 3, 2, 2, 2, 251,
233, 3, 2, 2, 2, 251, 234, 3, 2, 2, 2, 251, 235, 3, 2, 2, 2, 251, 236,
3, 2, 2, 2, 251, 237, 3, 2, 2, 2, 251, 238, 3, 2, 2, 2, 251, 239, 3, 2,
2, 2, 251, 240, 3, 2, 2, 2, 251, 241, 3, 2, 2, 2, 251, 242, 3, 2, 2, 2,
251, 243, 3, 2, 2, 2, 251, 244, 3, 2, 2, 2, 251, 245, 3, 2, 2, 2, 251,
246, 3, 2, 2, 2, 251, 247, 3, 2, 2, 2, 251, 248, 3, 2, 2, 2, 251, 249,
3, 2, 2, 2, 251, 250, 3, 2, 2, 2, 252, 17, 3, 2, 2, 2, 253, 255, 5, 16,
9, 2, 254, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2,
256, 257, 3, 2, 2, 2, 257, 19, 3, 2, 2, 2, 258, 260, 5, 16, 9, 2, 259,
258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 261, 262,
3, 2, 2, 2, 262, 271, 3, 2, 2, 2, 263, 265, 7, 25, 2, 2, 264, 266, 5, 16,
9, 2, 265, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2,
267, 268, 3, 2, 2, 2, 268, 270, 3, 2, 2, 2, 269, 263, 3, 2, 2, 2, 270,
273, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 275,
3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 274, 276, 7, 25, 2, 2, 275, 274, 3, 2,
2, 2, 275, 276, 3, 2, 2, 2, 276, 21, 3, 2, 2, 2, 277, 312, 5, 132, 67,
2, 278, 312, 7, 12, 2, 2, 279, 312, 7, 14, 2, 2, 280, 312, 7, 15, 2, 2,
281, 312, 7, 16, 2, 2, 282, 312, 7, 17, 2, 2, 283, 312, 7, 18, 2, 2, 284,
312, 7, 19, 2, 2, 285, 312, 7, 20, 2, 2, 286, 312, 7, 21, 2, 2, 287, 312,
7, 22, 2, 2, 288, 312, 7, 23, 2, 2, 289, 312, 7, 24, 2, 2, 290, 312, 7,
25, 2, 2, 291, 312, 7, 26, 2, 2, 292, 312, 7, 27, 2, 2, 293, 312, 7, 28,
2, 2, 294, 312, 7, 29, 2, 2, 295, 312, 7, 30, 2, 2, 296, 312, 7, 31, 2,
2, 297, 312, 7, 32, 2, 2, 298, 312, 7, 33, 2, 2, 299, 312, 7, 34, 2, 2,
300, 312, 7, 35, 2, 2, 301, 312, 7, 37, 2, 2, 302, 312, 7, 38, 2, 2, 303,
312, 7, 39, 2, 2, 304, 312, 7, 40, 2, 2, 305, 312, 7, 41, 2, 2, 306, 312,
7, 42, 2, 2, 307, 312, 7, 43, 2, 2, 308, 312, 7, 44, 2, 2, 309, 312, 5,
88, 45, 2, 310, 312, 7, 46, 2, 2, 311, 277, 3, 2, 2, 2, 311, 278, 3, 2,
2, 2, 311, 279, 3, 2, 2, 2, 311, 280, 3, 2, 2, 2, 311, 281, 3, 2, 2, 2,
311, 282, 3, 2, 2, 2, 311, 283, 3, 2, 2, 2, 311, 284, 3, 2, 2, 2, 311,
285, 3, 2, 2, 2, 311, 286, 3, 2, 2, 2, 311, 287, 3, 2, 2, 2, 311, 288,
3, 2, 2, 2, 311, 289, 3, 2, 2, 2, 311, 290, 3, 2, 2, 2, 311, 291, 3, 2,
2, 2, 311, 292, 3, 2, 2, 2, 311, 293, 3, 2, 2, 2, 311, 294, 3, 2, 2, 2,
311, 295, 3, 2, 2, 2, 311, 296, 3, 2, 2, 2, 311, 297, 3, 2, 2, 2, 311,
298, 3, 2, 2, 2, 311, 299, 3, 2, 2, 2, 311, 300, 3, 2, 2, 2, 311, 301,
3, 2, 2, 2, 311, 302, 3, 2, 2, 2, 311, 303, 3, 2, 2, 2, 311, 304, 3, 2,
2, 2, 311, 305, 3, 2, 2, 2, 311, 306, 3, 2, 2, 2, 311, 307, 3, 2, 2, 2,
311, 308, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 310, 3, 2, 2, 2, 312,
23, 3, 2, 2, 2, 313, 316, 5, 22, 12, 2, 314, 316, 5, 4, 3, 2, 315, 313,
3, 2, 2, 2, 315, 314, 3, 2, 2, 2, 316, 25, 3, 2, 2, 2, 317, 319, 5, 6,
4, 2, 318, 317, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2,
320, 322, 5, 24, 13, 2, 321, 318, 3, 2, 2, 2, 322, 325, 3, 2, 2, 2, 323,
321, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 27, 3, 2, 2, 2, 325, 323, 3,
2, 2, 2, 326, 327, 7, 13, 2, 2, 327, 329, 5, 26, 14, 2, 328, 330, 5, 6,
4, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2,
331, 332, 7, 13, 2, 2, 332, 29, 3, 2, 2, 2, 333, 335, 5, 14, 8, 2, 334,
333, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 336, 3, 2, 2, 2, 336, 338,
5, 112, 57, 2, 337, 339, 5, 14, 8, 2, 338, 337, 3, 2, 2, 2, 338, 339, 3,
2, 2, 2, 339, 356, 3, 2, 2, 2, 340, 342, 5, 14, 8, 2, 341, 340, 3, 2, 2,
2, 341, 342, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 345, 5, 18, 10, 2,
344, 346, 5, 14, 8, 2, 345, 344, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346,
356, 3, 2, 2, 2, 347, 349, 5, 14, 8, 2, 348, 347, 3, 2, 2, 2, 348, 349,
3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 352, 5, 28, 15, 2, 351, 353, 5,
14, 8, 2, 352, 351, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 356, 3, 2, 2,
2, 354, 356, 7, 34, 2, 2, 355, 334, 3, 2, 2, 2, 355, 341, 3, 2, 2, 2, 355,
348, 3, 2, 2, 2, 355, 354, 3, 2, 2, 2, 356, 31, 3, 2, 2, 2, 357, 358, 5,
34, 18, 2, 358, 359, 7, 23, 2, 2, 359, 361, 3, 2, 2, 2, 360, 357, 3, 2,
2, 2, 360, 361, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 363, 5, 38, 20,
2, 363, 364, 5, 40, 21, 2, 364, 365, 5, 42, 22, 2, 365, 366, 5, 44, 23,
2, 366, 367, 7, 28, 2, 2, 367, 370, 5, 46, 24, 2, 368, 369, 7, 28, 2, 2,
369, 371, 5, 48, 25, 2, 370, 368, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371,
373, 3, 2, 2, 2, 372, 374, 5, 52, 27, 2, 373, 372, 3, 2, 2, 2, 373, 374,
3, 2, 2, 2, 374, 376, 3, 2, 2, 2, 375, 377, 5, 14, 8, 2, 376, 375, 3, 2,
2, 2, 376, 377, 3, 2, 2, 2, 377, 378, 3, 2, 2, 2, 378, 379, 7, 2, 2, 3,
379, 33, 3, 2, 2, 2, 380, 382, 5, 6, 4, 2, 381, 380, 3, 2, 2, 2, 381, 382,
3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 392, 5, 36, 19, 2, 384, 386, 5,
14, 8, 2, 385, 384, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 3, 2, 2,
2, 387, 389, 5, 36, 19, 2, 388, 390, 5, 14, 8, 2, 389, 388, 3, 2, 2, 2,
389, 390, 3, 2, 2, 2, 390, 392, 3, 2, 2, 2, 391, 381, 3, 2, 2, 2, 391,
385, 3, 2, 2, 2, 392, 35, 3, 2, 2, 2, 393, 394, 7, 59, 2, 2, 394, 395,
7, 61, 2, 2, 395, 415, 7, 60, 2, 2, 396, 397, 7, 66, 2, 2, 397, 398, 7,
67, 2, 2, 398, 415, 7, 51, 2, 2, 399, 400, 7, 69, 2, 2, 400, 401, 7, 51,
2, 2, 401, 415, 7, 50, 2, 2, 402, 403, 7, 66, 2, 2, 403, 404, 7, 54, 2,
2, 404, 415, 7, 67, 2, 2, 405, 406, 7, 52, 2, 2, 406, 407, 7, 64, 2, 2,
407, 415, 7, 55, 2, 2, 408, 409, 7, 65, 2, 2, 409, 410, 7, 47, 2, 2, 410,
415, 7, 66, 2, 2, 411, 412, 7, 65, 2, 2, 412, 413, 7, 67, 2, 2, 413, 415,
7, 60, 2, 2, 414, 393, 3, 2, 2, 2, 414, 396, 3, 2, 2, 2, 414, 399, 3, 2,
2, 2, 414, 402, 3, 2, 2, 2, 414, 405, 3, 2, 2, 2, 414, 408, 3, 2, 2, 2,
414, 411, 3, 2, 2, 2, 415, 37, 3, 2, 2, 2, 416, 418, 5, 6, 4, 2, 417, 416,
3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 421, 7, 27,
2, 2, 420, 422, 7, 27, 2, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2,
422, 423, 3, 2, 2, 2, 423, 435, 5, 6, 4, 2, 424, 426, 5, 14, 8, 2, 425,
424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 429,
7, 27, 2, 2, 428, 430, 7, 27, 2, 2, 429, 428, 3, 2, 2, 2, 429, 430, 3,
2, 2, 2, 430, 432, 3, 2, 2, 2, 431, 433, 5, 14, 8, 2, 432, 431, 3, 2, 2,
2, 432, 433, 3, 2, 2, 2, 433, 435, 3, 2, 2, 2, 434, 417, 3, 2, 2, 2, 434,
425, 3, 2, 2, 2, 435, 39, 3, 2, 2, 2, 436, 437, 7, 56, 2, 2, 437, 438,
7, 47, 2, 2, 438, 473, 7, 60, 2, 2, 439, 440, 7, 52, 2, 2, 440, 441, 7,
51, 2, 2, 441, 473, 7, 48, 2, 2, 442, 443, 7, 59, 2, 2, 443, 444, 7, 47,
2, 2, 444, 473, 7, 64, 2, 2, 445, 446, 7, 47, 2, 2, 446, 447, 7, 62, 2,
2, 447, 473, 7, 64, 2, 2, 448, 449, 7, 59, 2, 2, 449, 450, 7, 47, 2, 2,
450, 473, 7, 71, 2, 2, 451, 452, 7, 56, 2, 2, 452, 453, 7, 67, 2, 2, 453,
473, 7, 60, 2, 2, 454, 455, 7, 56, 2, 2, 455, 456, 7, 67, 2, 2, 456, 473,
7, 58, 2, 2, 457, 458, 7, 47, 2, 2, 458, 459, 7, 67, 2, 2, 459, 473, 7,
53, 2, 2, 460, 461, 7, 65, 2, 2, 461, 462, 7, 51, 2, 2, 462, 473, 7, 62,
2, 2, 463, 464, 7, 61, 2, 2, 464, 465, 7, 49, 2, 2, 465, 473, 7, 66, 2,
2, 466, 467, 7, 60, 2, 2, 467, 468, 7, 61, 2, 2, 468, 473, 7, 68, 2, 2,
469, 470, 7, 50, 2, 2, 470, 471, 7, 51, 2, 2, 471, 473, 7, 49, 2, 2, 472,
436, 3, 2, 2, 2, 472, 439, 3, 2, 2, 2, 472, 442, 3, 2, 2, 2, 472, 445,
3, 2, 2, 2, 472, 448, 3, 2, 2, 2, 472, 451, 3, 2, 2, 2, 472, 454, 3, 2,
2, 2, 472, 457, 3, 2, 2, 2, 472, 460, 3, 2, 2, 2, 472, 463, 3, 2, 2, 2,
472, 466, 3, 2, 2, 2, 472, 469, 3, 2, 2, 2, 473, 41, 3, 2, 2, 2, 474, 475,
5, 6, 4, 2, 475, 476, 7, 27, 2, 2, 476, 477, 7, 27, 2, 2, 477, 478, 7,
27, 2, 2, 478, 479, 7, 27, 2, 2, 479, 480, 5, 6, 4, 2, 480, 490, 3, 2,
2, 2, 481, 483, 5, 14, 8, 2, 482, 481, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2,
483, 484, 3, 2, 2, 2, 484, 485, 7, 27, 2, 2, 485, 487, 7, 27, 2, 2, 486,
488, 5, 14, 8, 2, 487, 486, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 490,
3, 2, 2, 2, 489, 474, 3, 2, 2, 2, 489, 482, 3, 2, 2, 2, 490, 43, 3, 2,
2, 2, 491, 493, 7, 27, 2, 2, 492, 491, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2,
493, 494, 3, 2, 2, 2, 494, 506, 7, 27, 2, 2, 495, 497, 5, 14, 8, 2, 496,
495, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 499, 3, 2, 2, 2, 498, 500,
7, 27, 2, 2, 499, 498, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 501, 3, 2,
2, 2, 501, 503, 7, 27, 2, 2, 502, 504, 5, 14, 8, 2, 503, 502, 3, 2, 2,
2, 503, 504, 3, 2, 2, 2, 504, 506, 3, 2, 2, 2, 505, 492, 3, 2, 2, 2, 505,
496, 3, 2, 2, 2, 506, 45, 3, 2, 2, 2, 507, 508, 7, 27, 2, 2, 508, 518,
7, 27, 2, 2, 509, 511, 5, 14, 8, 2, 510, 509, 3, 2, 2, 2, 510, 511, 3,
2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 27, 2, 2, 513, 515, 7, 27,
2, 2, 514, 516, 5, 14, 8, 2, 515, 514, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2,
516, 518, 3, 2, 2, 2, 517, 507, 3, 2, 2, 2, 517, 510, 3, 2, 2, 2, 518,
47, 3, 2, 2, 2, 519, 520, 7, 27, 2, 2, 520, 530, 7, 27, 2, 2, 521, 523,
5, 14, 8, 2, 522, 521, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 524, 3, 2,
2, 2, 524, 525, 7, 27, 2, 2, 525, 527, 7, 27, 2, 2, 526, 528, 5, 14, 8,
2, 527, 526, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 530, 3, 2, 2, 2, 529,
519, 3, 2, 2, 2, 529, 522, 3, 2, 2, 2, 530, 49, 3, 2, 2, 2, 531, 533, 9,
2, 2, 2, 532, 531, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 3, 2, 2,
2, 534, 535, 7, 27, 2, 2, 535, 536, 7, 27, 2, 2, 536, 537, 7, 27, 2, 2,
537, 538, 7, 27, 2, 2, 538, 51, 3, 2, 2, 2, 539, 540, 5, 6, 4, 2, 540,
541, 5, 50, 26, 2, 541, 544, 3, 2, 2, 2, 542, 544, 5, 94, 48, 2, 543, 539,
3, 2, 2, 2, 543, 542, 3, 2, 2, 2, 544, 53, 3, 2, 2, 2, 545, 548, 5, 56,
29, 2, 546, 548, 5, 62, 32, 2, 547, 545, 3, 2, 2, 2, 547, 546, 3, 2, 2,
2, 548, 55, 3, 2, 2, 2, 549, 552, 5, 58, 30, 2, 550, 552, 5, 72, 37, 2,
551, 549, 3, 2, 2, 2, 551, 550, 3, 2, 2, 2, 552, 57, 3, 2, 2, 2, 553, 555,
5, 64, 33, 2, 554, 553, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 3,
2, 2, 2, 556, 557, 5, 60, 31, 2, 557, 59, 3, 2, 2, 2, 558, 560, 5, 14,
8, 2, 559, 558, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2,
561, 563, 7, 30, 2, 2, 562, 564, 5, 72, 37, 2, 563, 562, 3, 2, 2, 2, 563,
564, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 567, 7, 32, 2, 2, 566, 568,
5, 14, 8, 2, 567, 566, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 571, 3, 2,
2, 2, 569, 571, 5, 96, 49, 2, 570, 559, 3, 2, 2, 2, 570, 569, 3, 2, 2,
2, 571, 61, 3, 2, 2, 2, 572, 573, 5, 64, 33, 2, 573, 575, 7, 28, 2, 2,
574, 576, 5, 70, 36, 2, 575, 574, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576,
577, 3, 2, 2, 2, 577, 579, 7, 29, 2, 2, 578, 580, 5, 14, 8, 2, 579, 578,
3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 63, 3, 2, 2, 2, 581, 583, 5, 30,
16, 2, 582, 581, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2,
584, 585, 3, 2, 2, 2, 585, 596, 3, 2, 2, 2, 586, 592, 5, 30, 16, 2, 587,
591, 5, 30, 16, 2, 588, 591, 7, 25, 2, 2, 589, 591, 5, 14, 8, 2, 590, 587,
3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 590, 589, 3, 2, 2, 2, 591, 594, 3, 2,
2, 2, 592, 590, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 596, 3, 2, 2, 2,
594, 592, 3, 2, 2, 2, 595, 582, 3, 2, 2, 2, 595, 586, 3, 2, 2, 2, 596,
65, 3, 2, 2, 2, 597, 602, 5, 56, 29, 2, 598, 599, 7, 23, 2, 2, 599, 601,
5, 56, 29, 2, 600, 598, 3, 2, 2, 2, 601, 604, 3, 2, 2, 2, 602, 600, 3,
2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 607, 3, 2, 2, 2, 604, 602, 3, 2, 2,
2, 605, 607, 5, 102, 52, 2, 606, 597, 3, 2, 2, 2, 606, 605, 3, 2, 2, 2,
607, 67, 3, 2, 2, 2, 608, 613, 5, 54, 28, 2, 609, 610, 7, 23, 2, 2, 610,
612, 5, 54, 28, 2, 611, 609, 3, 2, 2, 2, 612, 615, 3, 2, 2, 2, 613, 611,
3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 616, 3, 2, 2, 2, 615, 613, 3, 2,
2, 2, 616, 617, 7, 2, 2, 3, 617, 622, 3, 2, 2, 2, 618, 619, 5, 104, 53,
2, 619, 620, 7, 2, 2, 3, 620, 622, 3, 2, 2, 2, 621, 608, 3, 2, 2, 2, 621,
618, 3, 2, 2, 2, 622, 69, 3, 2, 2, 2, 623, 627, 5, 66, 34, 2, 624, 627,
5, 14, 8, 2, 625, 627, 5, 106, 54, 2, 626, 623, 3, 2, 2, 2, 626, 624, 3,
2, 2, 2, 626, 625, 3, 2, 2, 2, 627, 71, 3, 2, 2, 2, 628, 629, 5, 74, 38,
2, 629, 630, 7, 34, 2, 2, 630, 633, 5, 78, 40, 2, 631, 632, 7, 28, 2, 2,
632, 634, 5, 76, 39, 2, 633, 631, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634,
73, 3, 2, 2, 2, 635, 637, 5, 14, 8, 2, 636, 635, 3, 2, 2, 2, 636, 637,
3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 640, 5, 20, 11, 2, 639, 641, 5,
14, 8, 2, 640, 639, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 651, 3, 2, 2,
2, 642, 644, 5, 14, 8, 2, 643, 642, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644,
645, 3, 2, 2, 2, 645, 647, 5, 28, 15, 2, 646, 648, 5, 14, 8, 2, 647, 646,
3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 651, 3, 2, 2, 2, 649, 651, 5, 108,
55, 2, 650, 636, 3, 2, 2, 2, 650, 643, 3, 2, 2, 2, 650, 649, 3, 2, 2, 2,
651, 75, 3, 2, 2, 2, 652, 654, 7, 27, 2, 2, 653, 652, 3, 2, 2, 2, 654,
655, 3, 2, 2, 2, 655, 653, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 77, 3,
2, 2, 2, 657, 659, 5, 14, 8, 2, 658, 657, 3, 2, 2, 2, 658, 659, 3, 2, 2,
2, 659, 660, 3, 2, 2, 2, 660, 662, 5, 20, 11, 2, 661, 663, 5, 14, 8, 2,
662, 661, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 679, 3, 2, 2, 2, 664,
666, 5, 14, 8, 2, 665, 664, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 667,
3, 2, 2, 2, 667, 669, 5, 80, 41, 2, 668, 670, 5, 14, 8, 2, 669, 668, 3,
2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 679, 3, 2, 2, 2, 671, 673, 5, 14, 8,
2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674,
676, 5, 110, 56, 2, 675, 677, 5, 14, 8, 2, 676, 675, 3, 2, 2, 2, 676, 677,
3, 2, 2, 2, 677, 679, 3, 2, 2, 2, 678, 658, 3, 2, 2, 2, 678, 665, 3, 2,
2, 2, 678, 672, 3, 2, 2, 2, 679, 79, 3, 2, 2, 2, 680, 687, 7, 35, 2, 2,
681, 683, 5, 6, 4, 2, 682, 681, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683,
684, 3, 2, 2, 2, 684, 686, 5, 82, 42, 2, 685, 682, 3, 2, 2, 2, 686, 689,
3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 691, 3, 2,
2, 2, 689, 687, 3, 2, 2, 2, 690, 692, 5, 6, 4, 2, 691, 690, 3, 2, 2, 2,
691, 692, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 694, 7, 37, 2, 2, 694,
81, 3, 2, 2, 2, 695, 728, 5, 132, 67, 2, 696, 728, 7, 12, 2, 2, 697, 728,
7, 13, 2, 2, 698, 728, 7, 14, 2, 2, 699, 728, 7, 15, 2, 2, 700, 728, 7,
16, 2, 2, 701, 728, 7, 17, 2, 2, 702, 728, 7, 18, 2, 2, 703, 728, 7, 19,
2, 2, 704, 728, 7, 20, 2, 2, 705, 728, 7, 21, 2, 2, 706, 728, 7, 22, 2,
2, 707, 728, 7, 23, 2, 2, 708, 728, 7, 24, 2, 2, 709, 728, 7, 25, 2, 2,
710, 728, 7, 26, 2, 2, 711, 728, 7, 27, 2, 2, 712, 728, 7, 28, 2, 2, 713,
728, 7, 29, 2, 2, 714, 728, 7, 30, 2, 2, 715, 728, 7, 31, 2, 2, 716, 728,
7, 32, 2, 2, 717, 728, 7, 33, 2, 2, 718, 728, 7, 34, 2, 2, 719, 728, 7,
38, 2, 2, 720, 728, 7, 39, 2, 2, 721, 728, 7, 40, 2, 2, 722, 728, 7, 41,
2, 2, 723, 728, 7, 42, 2, 2, 724, 728, 7, 43, 2, 2, 725, 728, 7, 44, 2,
2, 726, 728, 7, 46, 2, 2, 727, 695, 3, 2, 2, 2, 727, 696, 3, 2, 2, 2, 727,
697, 3, 2, 2, 2, 727, 698, 3, 2, 2, 2, 727, 699, 3, 2, 2, 2, 727, 700,
3, 2, 2, 2, 727, 701, 3, 2, 2, 2, 727, 702, 3, 2, 2, 2, 727, 703, 3, 2,
2, 2, 727, 704, 3, 2, 2, 2, 727, 705, 3, 2, 2, 2, 727, 706, 3, 2, 2, 2,
727, 707, 3, 2, 2, 2, 727, 708, 3, 2, 2, 2, 727, 709, 3, 2, 2, 2, 727,
710, 3, 2, 2, 2, 727, 711, 3, 2, 2, 2, 727, 712, 3, 2, 2, 2, 727, 713,
3, 2, 2, 2, 727, 714, 3, 2, 2, 2, 727, 715, 3, 2, 2, 2, 727, 716, 3, 2,
2, 2, 727, 717, 3, 2, 2, 2, 727, 718, 3, 2, 2, 2, 727, 719, 3, 2, 2, 2,
727, 720, 3, 2, 2, 2, 727, 721, 3, 2, 2, 2, 727, 722, 3, 2, 2, 2, 727,
723, 3, 2, 2, 2, 727, 724, 3, 2, 2, 2, 727, 725, 3, 2, 2, 2, 727, 726,
3, 2, 2, 2, 728, 83, 3, 2, 2, 2, 729, 730, 9, 3, 2, 2, 730, 85, 3, 2, 2,
2, 731, 732, 5, 84, 43, 2, 732, 87, 3, 2, 2, 2, 733, 734, 5, 84, 43, 2,
734, 89, 3, 2, 2, 2, 735, 740, 7, 36, 2, 2, 736, 741, 7, 3, 2, 2, 737,
741, 5, 84, 43, 2, 738, 741, 7, 6, 2, 2, 739, 741, 7, 9, 2, 2, 740, 736,
3, 2, 2, 2, 740, 737, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 740, 739, 3, 2,
2, 2, 741, 91, 3, 2, 2, 2, 742, 744, 5, 128, 65, 2, 743, 742, 3, 2, 2,
2, 744, 745, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746,
747, 3, 2, 2, 2, 747, 749, 5, 126, 64, 2, 748, 750, 5, 128, 65, 2, 749,
748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 749, 3, 2, 2, 2, 751, 752,
3, 2, 2, 2, 752, 93, 3, 2, 2, 2, 753, 754, 7, 67, 2, 2, 754, 786, 7, 66,
2, 2, 755, 756, 7, 67, 2, 2, 756, 757, 7, 66, 2, 2, 757, 786, 7, 49, 2,
2, 758, 759, 7, 53, 2, 2, 759, 760, 7, 59, 2, 2, 760, 786, 7, 66, 2, 2,
761, 762, 7, 51, 2, 2, 762, 763, 7, 65, 2, 2, 763, 786, 7, 66, 2, 2, 764,
765, 7, 51, 2, 2, 765, 766, 7, 50, 2, 2, 766, 786, 7, 66, 2, 2, 767, 768,
7, 49, 2, 2, 768, 769, 7, 65, 2, 2, 769, 786, 7, 66, 2, 2, 770, 771, 7,
49, 2, 2, 771, 772, 7, 50, 2, 2, 772, 786, 7, 66, 2, 2, 773, 774, 7, 59,
2, 2, 774, 775, 7, 65, 2, 2, 775, 786, 7, 66, 2, 2, 776, 777, 7, 59, 2,
2, 777, 778, 7, 50, 2, 2, 778, 786, 7, 66, 2, 2, 779, 780, 7, 62, 2, 2,
780, 781, 7, 65, 2, 2, 781, 786, 7, 66, 2, 2, 782, 783, 7, 62, 2, 2, 783,
784, 7, 50, 2, 2, 784, 786, 7, 66, 2, 2, 785, 753, 3, 2, 2, 2, 785, 755,
3, 2, 2, 2, 785, 758, 3, 2, 2, 2, 785, 761, 3, 2, 2, 2, 785, 764, 3, 2,
2, 2, 785, 767, 3, 2, 2, 2, 785, 770, 3, 2, 2, 2, 785, 773, 3, 2, 2, 2,
785, 776, 3, 2, 2, 2, 785, 779, 3, 2, 2, 2, 785, 782, 3, 2, 2, 2, 786,
95, 3, 2, 2, 2, 787, 789, 5, 14, 8, 2, 788, 787, 3, 2, 2, 2, 788, 789,
3, 2, 2, 2, 789, 790, 3, 2, 2, 2, 790, 791, 7, 30, 2, 2, 791, 792, 5, 98,
50, 2, 792, 793, 5, 72, 37, 2, 793, 795, 7, 32, 2, 2, 794, 796, 5, 14,
8, 2, 795, 794, 3, 2, 2, 2, 795, 796, 3, 2, 2, 2, 796, 97, 3, 2, 2, 2,
797, 798, 5, 100, 51, 2, 798, 799, 7, 28, 2, 2, 799, 99, 3, 2, 2, 2, 800,
803, 5, 14, 8, 2, 801, 803, 7, 23, 2, 2, 802, 800, 3, 2, 2, 2, 802, 801,
3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 805, 3, 2,
2, 2, 805, 807, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, 807, 808, 7, 34, 2, 2,
808, 819, 5, 78, 40, 2, 809, 811, 7, 23, 2, 2, 810, 812, 5, 14, 8, 2, 811,
810, 3, 2, 2, 2, 811, 812, 3, 2, 2, 2, 812, 815, 3, 2, 2, 2, 813, 814,
7, 34, 2, 2, 814, 816, 5, 78, 40, 2, 815, 813, 3, 2, 2, 2, 815, 816, 3,
2, 2, 2, 816, 818, 3, 2, 2, 2, 817, 809, 3, 2, 2, 2, 818, 821, 3, 2, 2,
2, 819, 817, 3, 2, 2, 2, 819, 820, 3, 2, 2, 2, 820, 101, 3, 2, 2, 2, 821,
819, 3, 2, 2, 2, 822, 824, 5, 14, 8, 2, 823, 822, 3, 2, 2, 2, 823, 824,
3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 827, 7, 23, 2, 2, 826, 823, 3, 2,
2, 2, 827, 830, 3, 2, 2, 2, 828, 826, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2,
829, 831, 3, 2, 2, 2, 830, 828, 3, 2, 2, 2, 831, 839, 5, 56, 29, 2, 832,
835, 7, 23, 2, 2, 833, 836, 5, 56, 29, 2, 834, 836, 5, 14, 8, 2, 835, 833,
3, 2, 2, 2, 835, 834, 3, 2, 2, 2, 835, 836, 3, 2, 2, 2, 836, 838, 3, 2,
2, 2, 837, 832, 3, 2, 2, 2, 838, 841, 3, 2, 2, 2, 839, 837, 3, 2, 2, 2,
839, 840, 3, 2, 2, 2, 840, 103, 3, 2, 2, 2, 841, 839, 3, 2, 2, 2, 842,
844, 5, 14, 8, 2, 843, 842, 3, 2, 2, 2, 843, 844, 3, 2, 2, 2, 844, 845,
3, 2, 2, 2, 845, 847, 7, 23, 2, 2, 846, 843, 3, 2, 2, 2, 847, 850, 3, 2,
2, 2, 848, 846, 3, 2, 2, 2, 848, 849, 3, 2, 2, 2, 849, 851, 3, 2, 2, 2,
850, 848, 3, 2, 2, 2, 851, 859, 5, 54, 28, 2, 852, 855, 7, 23, 2, 2, 853,
856, 5, 54, 28, 2, 854, 856, 5, 14, 8, 2, 855, 853, 3, 2, 2, 2, 855, 854,
3, 2, 2, 2, 855, 856, 3, 2, 2, 2, 856, 858, 3, 2, 2, 2, 857, 852, 3, 2,
2, 2, 858, 861, 3, 2, 2, 2, 859, 857, 3, 2, 2, 2, 859, 860, 3, 2, 2, 2,
860, 105, 3, 2, 2, 2, 861, 859, 3, 2, 2, 2, 862, 864, 5, 14, 8, 2, 863,
862, 3, 2, 2, 2, 863, 864, 3, 2, 2, 2, 864, 865, 3, 2, 2, 2, 865, 867,
7, 23, 2, 2, 866, 863, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 866, 3, 2,
2, 2, 868, 869, 3, 2, 2, 2, 869, 871, 3, 2, 2, 2, 870, 872, 5, 14, 8, 2,
871, 870, 3, 2, 2, 2, 871, 872, 3, 2, 2, 2, 872, 107, 3, 2, 2, 2, 873,
878, 5, 30, 16, 2, 874, 875, 7, 25, 2, 2, 875, 877, 5, 30, 16, 2, 876,
874, 3, 2, 2, 2, 877, 880, 3, 2, 2, 2, 878, 876, 3, 2, 2, 2, 878, 879,
3, 2, 2, 2, 879, 109, 3, 2, 2, 2, 880, 878, 3, 2, 2, 2, 881, 886, 5, 18,
10, 2, 882, 883, 7, 25, 2, 2, 883, 885, 5, 18, 10, 2, 884, 882, 3, 2, 2,
2, 885, 888, 3, 2, 2, 2, 886, 884, 3, 2, 2, 2, 886, 887, 3, 2, 2, 2, 887,
111, 3, 2, 2, 2, 888, 886, 3, 2, 2, 2, 889, 890, 7, 31, 2, 2, 890, 891,
7, 33, 2, 2, 891, 892, 5, 114, 58, 2, 892, 893, 7, 33, 2, 2, 893, 894,
5, 116, 59, 2, 894, 895, 7, 33, 2, 2, 895, 896, 5, 122, 62, 2, 896, 897,
7, 33, 2, 2, 897, 898, 7, 31, 2, 2, 898, 113, 3, 2, 2, 2, 899, 900, 5,
118, 60, 2, 900, 115, 3, 2, 2, 2, 901, 902, 5, 118, 60, 2, 902, 117, 3,
2, 2, 2, 903, 905, 5, 120, 61, 2, 904, 903, 3, 2, 2, 2, 905, 906, 3, 2,
2, 2, 906, 904, 3, 2, 2, 2, 906, 907, 3, 2, 2, 2, 907, 119, 3, 2, 2, 2,
908, 928, 5, 132, 67, 2, 909, 928, 7, 12, 2, 2, 910, 928, 7, 14, 2, 2,
911, 928, 7, 15, 2, 2, 912, 928, 7, 16, 2, 2, 913, 928, 7, 17, 2, 2, 914,
928, 7, 18, 2, 2, 915, 928, 7, 21, 2, 2, 916, 928, 7, 22, 2, 2, 917, 928,
7, 24, 2, 2, 918, 928, 7, 27, 2, 2, 919, 928, 7, 36, 2, 2, 920, 928, 7,
38, 2, 2, 921, 928, 7, 39, 2, 2, 922, 928, 7, 40, 2, 2, 923, 928, 7, 41,
2, 2, 924, 928, 7, 42, 2, 2, 925, 928, 7, 43, 2, 2, 926, 928, 7, 44, 2,
2, 927, 908, 3, 2, 2, 2, 927, 909, 3, 2, 2, 2, 927, 910, 3, 2, 2, 2, 927,
911, 3, 2, 2, 2, 927, 912, 3, 2, 2, 2, 927, 913, 3, 2, 2, 2, 927, 914,
3, 2, 2, 2, 927, 915, 3, 2, 2, 2, 927, 916, 3, 2, 2, 2, 927, 917, 3, 2,
2, 2, 927, 918, 3, 2, 2, 2, 927, 919, 3, 2, 2, 2, 927, 920, 3, 2, 2, 2,
927, 921, 3, 2, 2, 2, 927, 922, 3, 2, 2, 2, 927, 923, 3, 2, 2, 2, 927,
924, 3, 2, 2, 2, 927, 925, 3, 2, 2, 2, 927, 926, 3, 2, 2, 2, 928, 121,
3, 2, 2, 2, 929, 931, 5, 124, 63, 2, 930, 929, 3, 2, 2, 2, 931, 932, 3,
2, 2, 2, 932, 930, 3, 2, 2, 2, 932, 933, 3, 2, 2, 2, 933, 123, 3, 2, 2,
2, 934, 968, 5, 132, 67, 2, 935, 968, 7, 12, 2, 2, 936, 968, 7, 13, 2,
2, 937, 968, 7, 14, 2, 2, 938, 968, 7, 15, 2, 2, 939, 968, 7, 16, 2, 2,
940, 968, 7, 17, 2, 2, 941, 968, 7, 18, 2, 2, 942, 968, 7, 19, 2, 2, 943,
968, 7, 20, 2, 2, 944, 968, 7, 21, 2, 2, 945, 968, 7, 22, 2, 2, 946, 968,
7, 23, 2, 2, 947, 968, 7, 24, 2, 2, 948, 968, 7, 25, 2, 2, 949, 968, 7,
26, 2, 2, 950, 968, 7, 27, 2, 2, 951, 968, 7, 28, 2, 2, 952, 968, 7, 29,
2, 2, 953, 968, 7, 30, 2, 2, 954, 968, 7, 31, 2, 2, 955, 968, 7, 32, 2,
2, 956, 968, 7, 34, 2, 2, 957, 968, 7, 35, 2, 2, 958, 968, 7, 36, 2, 2,
959, 968, 7, 37, 2, 2, 960, 968, 7, 38, 2, 2, 961, 968, 7, 39, 2, 2, 962,
968, 7, 40, 2, 2, 963, 968, 7, 41, 2, 2, 964, 968, 7, 42, 2, 2, 965, 968,
7, 43, 2, 2, 966, 968, 7, 44, 2, 2, 967, 934, 3, 2, 2, 2, 967, 935, 3,
2, 2, 2, 967, 936, 3, 2, 2, 2, 967, 937, 3, 2, 2, 2, 967, 938, 3, 2, 2,
2, 967, 939, 3, 2, 2, 2, 967, 940, 3, 2, 2, 2, 967, 941, 3, 2, 2, 2, 967,
942, 3, 2, 2, 2, 967, 943, 3, 2, 2, 2, 967, 944, 3, 2, 2, 2, 967, 945,
3, 2, 2, 2, 967, 946, 3, 2, 2, 2, 967, 947, 3, 2, 2, 2, 967, 948, 3, 2,
2, 2, 967, 949, 3, 2, 2, 2, 967, 950, 3, 2, 2, 2, 967, 951, 3, 2, 2, 2,
967, 952, 3, 2, 2, 2, 967, 953, 3, 2, 2, 2, 967, 954, 3, 2, 2, 2, 967,
955, 3, 2, 2, 2, 967, 956, 3, 2, 2, 2, 967, 957, 3, 2, 2, 2, 967, 958,
3, 2, 2, 2, 967, 959, 3, 2, 2, 2, 967, 960, 3, 2, 2, 2, 967, 961, 3, 2,
2, 2, 967, 962, 3, 2, 2, 2, 967, 963, 3, 2, 2, 2, 967, 964, 3, 2, 2, 2,
967, 965, 3, 2, 2, 2, 967, 966, 3, 2, 2, 2, 968, 125, 3, 2, 2, 2, 969,
970, 7, 9, 2, 2, 970, 971, 7, 6, 2, 2, 971, 127, 3, 2, 2, 2, 972, 973,
9, 4, 2, 2, 973, 129, 3, 2, 2, 2, 974, 1010, 5, 132, 67, 2, 975, 1010,
7, 12, 2, 2, 976, 1010, 7, 13, 2, 2, 977, 1010, 7, 14, 2, 2, 978, 1010,
7, 15, 2, 2, 979, 1010, 7, 16, 2, 2, 980, 1010, 7, 17, 2, 2, 981, 1010,
7, 18, 2, 2, 982, 1010, 7, 19, 2, 2, 983, 1010, 7, 20, 2, 2, 984, 1010,
7, 21, 2, 2, 985, 1010, 7, 22, 2, 2, 986, 1010, 7, 23, 2, 2, 987, 1010,
7, 24, 2, 2, 988, 1010, 7, 25, 2, 2, 989, 1010, 7, 26, 2, 2, 990, 1010,
7, 27, 2, 2, 991, 1010, 7, 28, 2, 2, 992, 1010, 7, 29, 2, 2, 993, 1010,
7, 30, 2, 2, 994, 1010, 7, 31, 2, 2, 995, 1010, 7, 32, 2, 2, 996, 1010,
7, 33, 2, 2, 997, 1010, 7, 34, 2, 2, 998, 1010, 7, 35, 2, 2, 999, 1010,
7, 36, 2, 2, 1000, 1010, 7, 37, 2, 2, 1001, 1010, 7, 38, 2, 2, 1002, 1010,
7, 39, 2, 2, 1003, 1010, 7, 40, 2, 2, 1004, 1010, 7, 41, 2, 2, 1005, 1010,
7, 42, 2, 2, 1006, 1010, 7, 43, 2, 2, 1007, 1010, 7, 44, 2, 2, 1008, 1010,
7, 46, 2, 2, 1009, 974, 3, 2, 2, 2, 1009, 975, 3, 2, 2, 2, 1009, 976, 3,
2, 2, 2, 1009, 977, 3, 2, 2, 2, 1009, 978, 3, 2, 2, 2, 1009, 979, 3, 2,
2, 2, 1009, 980, 3, 2, 2, 2, 1009, 981, 3, 2, 2, 2, 1009, 982, 3, 2, 2,
2, 1009, 983, 3, 2, 2, 2, 1009, 984, 3, 2, 2, 2, 1009, 985, 3, 2, 2, 2,
1009, 986, 3, 2, 2, 2, 1009, 987, 3, 2, 2, 2, 1009, 988, 3, 2, 2, 2, 1009,
989, 3, 2, 2, 2, 1009, 990, 3, 2, 2, 2, 1009, 991, 3, 2, 2, 2, 1009, 992,
3, 2, 2, 2, 1009, 993, 3, 2, 2, 2, 1009, 994, 3, 2, 2, 2, 1009, 995, 3,
2, 2, 2, 1009, 996, 3, 2, 2, 2, 1009, 997, 3, 2, 2, 2, 1009, 998, 3, 2,
2, 2, 1009, 999, 3, 2, 2, 2, 1009, 1000, 3, 2, 2, 2, 1009, 1001, 3, 2,
2, 2, 1009, 1002, 3, 2, 2, 2, 1009, 1003, 3, 2, 2, 2, 1009, 1004, 3, 2,
2, 2, 1009, 1005, 3, 2, 2, 2, 1009, 1006, 3, 2, 2, 2, 1009, 1007, 3, 2,
2, 2, 1009, 1008, 3, 2, 2, 2, 1010, 131, 3, 2, 2, 2, 1011, 1012, 9, 5,
2, 2, 1012, 133, 3, 2, 2, 2, 132, 136, 141, 146, 150, 155, 158, 193, 198,
202, 207, 211, 216, 221, 224, 227, 251, 256, 261, 267, 271, 275, 311, 315,
318, 323, 329, 334, 338, 341, 345, 348, 352, 355, 360, 370, 373, 376, 381,
385, 389, 391, 414, 417, 421, 425, 429, 432, 434, 472, 482, 487, 489, 492,
496, 499, 503, 505, 510, 515, 517, 522, 527, 529, 532, 543, 547, 551, 554,
559, 563, 567, 570, 575, 579, 584, 590, 592, 595, 602, 606, 613, 621, 626,
633, 636, 640, 643, 647, 650, 655, 658, 662, 665, 669, 672, 676, 678, 682,
687, 691, 727, 740, 745, 751, 785, 788, 795, 802, 804, 811, 815, 819, 823,
828, 835, 839, 843, 848, 855, 859, 863, 868, 871, 878, 886, 906, 927, 932,
967, 1009,
}
var deserializer = antlr.NewATNDeserializer(nil)
var deserializedATN = deserializer.DeserializeFromUInt16(parserATN)
var literalNames = []string{
"", "'\u0000'", "", "'\t'", "'\n'", "'\u000B'", "'\u000C'", "'\r'", "",
"' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''", "'('", "')'",
"'*'", "'+'", "','", "'-'", "'.'", "'/'", "", "':'", "';'", "'<'", "'='",
"'>'", "'?'", "'@'", "'['", "'\\'", "']'", "'^'", "'_'", "'`'", "'{'",
"'|'", "'}'", "'~'", "'\u007F'",
}
var symbolicNames = []string{
"", "U_00", "U_01_08", "TAB", "LF", "U_0B", "U_0C", "CR", "U_0E_1F", "SP",
"Exclamation", "DQuote", "Hash", "Dollar", "Percent", "Ampersand", "SQuote",
"LParens", "RParens", "Asterisk", "Plus", "Comma", "Minus", "Period", "Slash",
"Digit", "Colon", "Semicolon", "Less", "Equal", "Greater", "Question",
"At", "LBracket", "Backslash", "RBracket", "Caret", "Underscore", "Backtick",
"LCurly", "Pipe", "RCurly", "Tilde", "Delete", "UTF8NonAscii", "A", "B",
"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",
"R", "S", "T", "U", "V", "W", "X", "Y", "Z",
}
var ruleNames = []string{
"quotedChar", "quotedPair", "fws", "ctext", "ccontent", "comment", "cfws",
"atext", "atom", "dotAtom", "qtext", "quotedContent", "quotedValue", "quotedString",
"word", "dateTime", "dayOfweek", "dayName", "day", "month", "year", "hour",
"minute", "second", "offset", "zone", "address", "mailbox", "nameAddr",
"angleAddr", "group", "displayName", "mailboxList", "addressList", "groupList",
"addrSpec", "localPart", "port", "domain", "domainLiteral", "dtext", "obsNoWSCTL",
"obsCtext", "obsQtext", "obsQP", "obsFWS", "obsZone", "obsAngleAddr", "obsRoute",
"obsDomainList", "obsMboxList", "obsAddrList", "obsGroupList", "obsLocalPart",
"obsDomain", "encodedWord", "charset", "encoding", "token", "tokenChar",
"encodedText", "encodedChar", "crlf", "wsp", "vchar", "alpha",
}
var decisionToDFA = make([]*antlr.DFA, len(deserializedATN.DecisionToState))
func init() {
for index, ds := range deserializedATN.DecisionToState {
decisionToDFA[index] = antlr.NewDFA(ds, index)
}
}
type RFC5322Parser struct {
*antlr.BaseParser
}
func NewRFC5322Parser(input antlr.TokenStream) *RFC5322Parser {
this := new(RFC5322Parser)
this.BaseParser = antlr.NewBaseParser(input)
this.Interpreter = antlr.NewParserATNSimulator(this, deserializedATN, decisionToDFA, antlr.NewPredictionContextCache())
this.RuleNames = ruleNames
this.LiteralNames = literalNames
this.SymbolicNames = symbolicNames
this.GrammarFileName = "RFC5322Parser.g4"
return this
}
// RFC5322Parser tokens.
const (
RFC5322ParserEOF = antlr.TokenEOF
RFC5322ParserU_00 = 1
RFC5322ParserU_01_08 = 2
RFC5322ParserTAB = 3
RFC5322ParserLF = 4
RFC5322ParserU_0B = 5
RFC5322ParserU_0C = 6
RFC5322ParserCR = 7
RFC5322ParserU_0E_1F = 8
RFC5322ParserSP = 9
RFC5322ParserExclamation = 10
RFC5322ParserDQuote = 11
RFC5322ParserHash = 12
RFC5322ParserDollar = 13
RFC5322ParserPercent = 14
RFC5322ParserAmpersand = 15
RFC5322ParserSQuote = 16
RFC5322ParserLParens = 17
RFC5322ParserRParens = 18
RFC5322ParserAsterisk = 19
RFC5322ParserPlus = 20
RFC5322ParserComma = 21
RFC5322ParserMinus = 22
RFC5322ParserPeriod = 23
RFC5322ParserSlash = 24
RFC5322ParserDigit = 25
RFC5322ParserColon = 26
RFC5322ParserSemicolon = 27
RFC5322ParserLess = 28
RFC5322ParserEqual = 29
RFC5322ParserGreater = 30
RFC5322ParserQuestion = 31
RFC5322ParserAt = 32
RFC5322ParserLBracket = 33
RFC5322ParserBackslash = 34
RFC5322ParserRBracket = 35
RFC5322ParserCaret = 36
RFC5322ParserUnderscore = 37
RFC5322ParserBacktick = 38
RFC5322ParserLCurly = 39
RFC5322ParserPipe = 40
RFC5322ParserRCurly = 41
RFC5322ParserTilde = 42
RFC5322ParserDelete = 43
RFC5322ParserUTF8NonAscii = 44
RFC5322ParserA = 45
RFC5322ParserB = 46
RFC5322ParserC = 47
RFC5322ParserD = 48
RFC5322ParserE = 49
RFC5322ParserF = 50
RFC5322ParserG = 51
RFC5322ParserH = 52
RFC5322ParserI = 53
RFC5322ParserJ = 54
RFC5322ParserK = 55
RFC5322ParserL = 56
RFC5322ParserM = 57
RFC5322ParserN = 58
RFC5322ParserO = 59
RFC5322ParserP = 60
RFC5322ParserQ = 61
RFC5322ParserR = 62
RFC5322ParserS = 63
RFC5322ParserT = 64
RFC5322ParserU = 65
RFC5322ParserV = 66
RFC5322ParserW = 67
RFC5322ParserX = 68
RFC5322ParserY = 69
RFC5322ParserZ = 70
)
// RFC5322Parser rules.
const (
RFC5322ParserRULE_quotedChar = 0
RFC5322ParserRULE_quotedPair = 1
RFC5322ParserRULE_fws = 2
RFC5322ParserRULE_ctext = 3
RFC5322ParserRULE_ccontent = 4
RFC5322ParserRULE_comment = 5
RFC5322ParserRULE_cfws = 6
RFC5322ParserRULE_atext = 7
RFC5322ParserRULE_atom = 8
RFC5322ParserRULE_dotAtom = 9
RFC5322ParserRULE_qtext = 10
RFC5322ParserRULE_quotedContent = 11
RFC5322ParserRULE_quotedValue = 12
RFC5322ParserRULE_quotedString = 13
RFC5322ParserRULE_word = 14
RFC5322ParserRULE_dateTime = 15
RFC5322ParserRULE_dayOfweek = 16
RFC5322ParserRULE_dayName = 17
RFC5322ParserRULE_day = 18
RFC5322ParserRULE_month = 19
RFC5322ParserRULE_year = 20
RFC5322ParserRULE_hour = 21
RFC5322ParserRULE_minute = 22
RFC5322ParserRULE_second = 23
RFC5322ParserRULE_offset = 24
RFC5322ParserRULE_zone = 25
RFC5322ParserRULE_address = 26
RFC5322ParserRULE_mailbox = 27
RFC5322ParserRULE_nameAddr = 28
RFC5322ParserRULE_angleAddr = 29
RFC5322ParserRULE_group = 30
RFC5322ParserRULE_displayName = 31
RFC5322ParserRULE_mailboxList = 32
RFC5322ParserRULE_addressList = 33
RFC5322ParserRULE_groupList = 34
RFC5322ParserRULE_addrSpec = 35
RFC5322ParserRULE_localPart = 36
RFC5322ParserRULE_port = 37
RFC5322ParserRULE_domain = 38
RFC5322ParserRULE_domainLiteral = 39
RFC5322ParserRULE_dtext = 40
RFC5322ParserRULE_obsNoWSCTL = 41
RFC5322ParserRULE_obsCtext = 42
RFC5322ParserRULE_obsQtext = 43
RFC5322ParserRULE_obsQP = 44
RFC5322ParserRULE_obsFWS = 45
RFC5322ParserRULE_obsZone = 46
RFC5322ParserRULE_obsAngleAddr = 47
RFC5322ParserRULE_obsRoute = 48
RFC5322ParserRULE_obsDomainList = 49
RFC5322ParserRULE_obsMboxList = 50
RFC5322ParserRULE_obsAddrList = 51
RFC5322ParserRULE_obsGroupList = 52
RFC5322ParserRULE_obsLocalPart = 53
RFC5322ParserRULE_obsDomain = 54
RFC5322ParserRULE_encodedWord = 55
RFC5322ParserRULE_charset = 56
RFC5322ParserRULE_encoding = 57
RFC5322ParserRULE_token = 58
RFC5322ParserRULE_tokenChar = 59
RFC5322ParserRULE_encodedText = 60
RFC5322ParserRULE_encodedChar = 61
RFC5322ParserRULE_crlf = 62
RFC5322ParserRULE_wsp = 63
RFC5322ParserRULE_vchar = 64
RFC5322ParserRULE_alpha = 65
)
// IQuotedCharContext is an interface to support dynamic dispatch.
type IQuotedCharContext interface {
antlr.ParserRuleContext
// GetParser returns the parser.
GetParser() antlr.Parser
// IsQuotedCharContext differentiates from other interfaces.
IsQuotedCharContext()
}
type QuotedCharContext struct {
*antlr.BaseParserRuleContext
parser antlr.Parser
}
func NewEmptyQuotedCharContext() *QuotedCharContext {
var p = new(QuotedCharContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1)
p.RuleIndex = RFC5322ParserRULE_quotedChar
return p
}
func (*QuotedCharContext) IsQuotedCharContext() {}
func NewQuotedCharContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *QuotedCharContext {
var p = new(QuotedCharContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState)
p.parser = parser
p.RuleIndex = RFC5322ParserRULE_quotedChar
return p
}
func (s *QuotedCharContext) GetParser() antlr.Parser { return s.parser }
func (s *QuotedCharContext) Vchar() IVcharContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IVcharContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IVcharContext)
}
func (s *QuotedCharContext) Wsp() IWspContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IWspContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IWspContext)
}
func (s *QuotedCharContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *QuotedCharContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string {
return antlr.TreesStringTree(s, ruleNames, recog)
}
func (s *QuotedCharContext) EnterRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.EnterQuotedChar(s)
}
}
func (s *QuotedCharContext) ExitRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.ExitQuotedChar(s)
}
}
func (p *RFC5322Parser) QuotedChar() (localctx IQuotedCharContext) {
localctx = NewQuotedCharContext(p, p.GetParserRuleContext(), p.GetState())
p.EnterRule(localctx, 0, RFC5322ParserRULE_quotedChar)
defer func() {
p.ExitRule()
}()
defer func() {
if err := recover(); err != nil {
if v, ok := err.(antlr.RecognitionException); ok {
localctx.SetException(v)
p.GetErrorHandler().ReportError(p, v)
p.GetErrorHandler().Recover(p, v)
} else {
panic(err)
}
}
}()
p.SetState(134)
p.GetErrorHandler().Sync(p)
switch p.GetTokenStream().LA(1) {
case RFC5322ParserExclamation, RFC5322ParserDQuote, RFC5322ParserHash, RFC5322ParserDollar, RFC5322ParserPercent, RFC5322ParserAmpersand, RFC5322ParserSQuote, RFC5322ParserLParens, RFC5322ParserRParens, RFC5322ParserAsterisk, RFC5322ParserPlus, RFC5322ParserComma, RFC5322ParserMinus, RFC5322ParserPeriod, RFC5322ParserSlash, RFC5322ParserDigit, RFC5322ParserColon, RFC5322ParserSemicolon, RFC5322ParserLess, RFC5322ParserEqual, RFC5322ParserGreater, RFC5322ParserQuestion, RFC5322ParserAt, RFC5322ParserLBracket, RFC5322ParserBackslash, RFC5322ParserRBracket, RFC5322ParserCaret, RFC5322ParserUnderscore, RFC5322ParserBacktick, RFC5322ParserLCurly, RFC5322ParserPipe, RFC5322ParserRCurly, RFC5322ParserTilde, RFC5322ParserUTF8NonAscii, RFC5322ParserA, RFC5322ParserB, RFC5322ParserC, RFC5322ParserD, RFC5322ParserE, RFC5322ParserF, RFC5322ParserG, RFC5322ParserH, RFC5322ParserI, RFC5322ParserJ, RFC5322ParserK, RFC5322ParserL, RFC5322ParserM, RFC5322ParserN, RFC5322ParserO, RFC5322ParserP, RFC5322ParserQ, RFC5322ParserR, RFC5322ParserS, RFC5322ParserT, RFC5322ParserU, RFC5322ParserV, RFC5322ParserW, RFC5322ParserX, RFC5322ParserY, RFC5322ParserZ:
p.EnterOuterAlt(localctx, 1)
{
p.SetState(132)
p.Vchar()
}
case RFC5322ParserTAB, RFC5322ParserSP:
p.EnterOuterAlt(localctx, 2)
{
p.SetState(133)
p.Wsp()
}
default:
panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil))
}
return localctx
}
// IQuotedPairContext is an interface to support dynamic dispatch.
type IQuotedPairContext interface {
antlr.ParserRuleContext
// GetParser returns the parser.
GetParser() antlr.Parser
// IsQuotedPairContext differentiates from other interfaces.
IsQuotedPairContext()
}
type QuotedPairContext struct {
*antlr.BaseParserRuleContext
parser antlr.Parser
}
func NewEmptyQuotedPairContext() *QuotedPairContext {
var p = new(QuotedPairContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1)
p.RuleIndex = RFC5322ParserRULE_quotedPair
return p
}
func (*QuotedPairContext) IsQuotedPairContext() {}
func NewQuotedPairContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *QuotedPairContext {
var p = new(QuotedPairContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState)
p.parser = parser
p.RuleIndex = RFC5322ParserRULE_quotedPair
return p
}
func (s *QuotedPairContext) GetParser() antlr.Parser { return s.parser }
func (s *QuotedPairContext) Backslash() antlr.TerminalNode {
return s.GetToken(RFC5322ParserBackslash, 0)
}
func (s *QuotedPairContext) QuotedChar() IQuotedCharContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IQuotedCharContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IQuotedCharContext)
}
func (s *QuotedPairContext) ObsQP() IObsQPContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IObsQPContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IObsQPContext)
}
func (s *QuotedPairContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *QuotedPairContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string {
return antlr.TreesStringTree(s, ruleNames, recog)
}
func (s *QuotedPairContext) EnterRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.EnterQuotedPair(s)
}
}
func (s *QuotedPairContext) ExitRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.ExitQuotedPair(s)
}
}
func (p *RFC5322Parser) QuotedPair() (localctx IQuotedPairContext) {
localctx = NewQuotedPairContext(p, p.GetParserRuleContext(), p.GetState())
p.EnterRule(localctx, 2, RFC5322ParserRULE_quotedPair)
defer func() {
p.ExitRule()
}()
defer func() {
if err := recover(); err != nil {
if v, ok := err.(antlr.RecognitionException); ok {
localctx.SetException(v)
p.GetErrorHandler().ReportError(p, v)
p.GetErrorHandler().Recover(p, v)
} else {
panic(err)
}
}
}()
p.SetState(139)
p.GetErrorHandler().Sync(p)
switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 1, p.GetParserRuleContext()) {
case 1:
p.EnterOuterAlt(localctx, 1)
{
p.SetState(136)
p.Match(RFC5322ParserBackslash)
}
{
p.SetState(137)
p.QuotedChar()
}
case 2:
p.EnterOuterAlt(localctx, 2)
{
p.SetState(138)
p.ObsQP()
}
}
return localctx
}
// IFwsContext is an interface to support dynamic dispatch.
type IFwsContext interface {
antlr.ParserRuleContext
// GetParser returns the parser.
GetParser() antlr.Parser
// IsFwsContext differentiates from other interfaces.
IsFwsContext()
}
type FwsContext struct {
*antlr.BaseParserRuleContext
parser antlr.Parser
}
func NewEmptyFwsContext() *FwsContext {
var p = new(FwsContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1)
p.RuleIndex = RFC5322ParserRULE_fws
return p
}
func (*FwsContext) IsFwsContext() {}
func NewFwsContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *FwsContext {
var p = new(FwsContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState)
p.parser = parser
p.RuleIndex = RFC5322ParserRULE_fws
return p
}
func (s *FwsContext) GetParser() antlr.Parser { return s.parser }
func (s *FwsContext) Crlf() ICrlfContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*ICrlfContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(ICrlfContext)
}
func (s *FwsContext) AllWsp() []IWspContext {
var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IWspContext)(nil)).Elem())
var tst = make([]IWspContext, len(ts))
for i, t := range ts {
if t != nil {
tst[i] = t.(IWspContext)
}
}
return tst
}
func (s *FwsContext) Wsp(i int) IWspContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IWspContext)(nil)).Elem(), i)
if t == nil {
return nil
}
return t.(IWspContext)
}
func (s *FwsContext) ObsFWS() IObsFWSContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IObsFWSContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IObsFWSContext)
}
func (s *FwsContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *FwsContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string {
return antlr.TreesStringTree(s, ruleNames, recog)
}
func (s *FwsContext) EnterRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.EnterFws(s)
}
}
func (s *FwsContext) ExitRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.ExitFws(s)
}
}
func (p *RFC5322Parser) Fws() (localctx IFwsContext) {
localctx = NewFwsContext(p, p.GetParserRuleContext(), p.GetState())
p.EnterRule(localctx, 4, RFC5322ParserRULE_fws)
var _la int
defer func() {
p.ExitRule()
}()
defer func() {
if err := recover(); err != nil {
if v, ok := err.(antlr.RecognitionException); ok {
localctx.SetException(v)
p.GetErrorHandler().ReportError(p, v)
p.GetErrorHandler().Recover(p, v)
} else {
panic(err)
}
}
}()
var _alt int
p.SetState(156)
p.GetErrorHandler().Sync(p)
switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 5, p.GetParserRuleContext()) {
case 1:
p.EnterOuterAlt(localctx, 1)
p.SetState(148)
p.GetErrorHandler().Sync(p)
if p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 3, p.GetParserRuleContext()) == 1 {
p.SetState(144)
p.GetErrorHandler().Sync(p)
_la = p.GetTokenStream().LA(1)
for _la == RFC5322ParserTAB || _la == RFC5322ParserSP {
{
p.SetState(141)
p.Wsp()
}
p.SetState(146)
p.GetErrorHandler().Sync(p)
_la = p.GetTokenStream().LA(1)
}
{
p.SetState(147)
p.Crlf()
}
}
p.SetState(151)
p.GetErrorHandler().Sync(p)
_alt = 1
for ok := true; ok; ok = _alt != 2 && _alt != antlr.ATNInvalidAltNumber {
switch _alt {
case 1:
{
p.SetState(150)
p.Wsp()
}
default:
panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil))
}
p.SetState(153)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext())
}
case 2:
p.EnterOuterAlt(localctx, 2)
{
p.SetState(155)
p.ObsFWS()
}
}
return localctx
}
// ICtextContext is an interface to support dynamic dispatch.
type ICtextContext interface {
antlr.ParserRuleContext
// GetParser returns the parser.
GetParser() antlr.Parser
// IsCtextContext differentiates from other interfaces.
IsCtextContext()
}
type CtextContext struct {
*antlr.BaseParserRuleContext
parser antlr.Parser
}
func NewEmptyCtextContext() *CtextContext {
var p = new(CtextContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1)
p.RuleIndex = RFC5322ParserRULE_ctext
return p
}
func (*CtextContext) IsCtextContext() {}
func NewCtextContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *CtextContext {
var p = new(CtextContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState)
p.parser = parser
p.RuleIndex = RFC5322ParserRULE_ctext
return p
}
func (s *CtextContext) GetParser() antlr.Parser { return s.parser }
func (s *CtextContext) Alpha() IAlphaContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IAlphaContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IAlphaContext)
}
func (s *CtextContext) Exclamation() antlr.TerminalNode {
return s.GetToken(RFC5322ParserExclamation, 0)
}
func (s *CtextContext) DQuote() antlr.TerminalNode {
return s.GetToken(RFC5322ParserDQuote, 0)
}
func (s *CtextContext) Hash() antlr.TerminalNode {
return s.GetToken(RFC5322ParserHash, 0)
}
func (s *CtextContext) Dollar() antlr.TerminalNode {
return s.GetToken(RFC5322ParserDollar, 0)
}
func (s *CtextContext) Percent() antlr.TerminalNode {
return s.GetToken(RFC5322ParserPercent, 0)
}
func (s *CtextContext) Ampersand() antlr.TerminalNode {
return s.GetToken(RFC5322ParserAmpersand, 0)
}
func (s *CtextContext) SQuote() antlr.TerminalNode {
return s.GetToken(RFC5322ParserSQuote, 0)
}
func (s *CtextContext) Asterisk() antlr.TerminalNode {
return s.GetToken(RFC5322ParserAsterisk, 0)
}
func (s *CtextContext) Plus() antlr.TerminalNode {
return s.GetToken(RFC5322ParserPlus, 0)
}
func (s *CtextContext) Comma() antlr.TerminalNode {
return s.GetToken(RFC5322ParserComma, 0)
}
func (s *CtextContext) Minus() antlr.TerminalNode {
return s.GetToken(RFC5322ParserMinus, 0)
}
func (s *CtextContext) Period() antlr.TerminalNode {
return s.GetToken(RFC5322ParserPeriod, 0)
}
func (s *CtextContext) Slash() antlr.TerminalNode {
return s.GetToken(RFC5322ParserSlash, 0)
}
func (s *CtextContext) Digit() antlr.TerminalNode {
return s.GetToken(RFC5322ParserDigit, 0)
}
func (s *CtextContext) Colon() antlr.TerminalNode {
return s.GetToken(RFC5322ParserColon, 0)
}
func (s *CtextContext) Semicolon() antlr.TerminalNode {
return s.GetToken(RFC5322ParserSemicolon, 0)
}
func (s *CtextContext) Less() antlr.TerminalNode {
return s.GetToken(RFC5322ParserLess, 0)
}
func (s *CtextContext) Equal() antlr.TerminalNode {
return s.GetToken(RFC5322ParserEqual, 0)
}
func (s *CtextContext) Greater() antlr.TerminalNode {
return s.GetToken(RFC5322ParserGreater, 0)
}
func (s *CtextContext) Question() antlr.TerminalNode {
return s.GetToken(RFC5322ParserQuestion, 0)
}
func (s *CtextContext) At() antlr.TerminalNode {
return s.GetToken(RFC5322ParserAt, 0)
}
func (s *CtextContext) LBracket() antlr.TerminalNode {
return s.GetToken(RFC5322ParserLBracket, 0)
}
func (s *CtextContext) RBracket() antlr.TerminalNode {
return s.GetToken(RFC5322ParserRBracket, 0)
}
func (s *CtextContext) Caret() antlr.TerminalNode {
return s.GetToken(RFC5322ParserCaret, 0)
}
func (s *CtextContext) Underscore() antlr.TerminalNode {
return s.GetToken(RFC5322ParserUnderscore, 0)
}
func (s *CtextContext) Backtick() antlr.TerminalNode {
return s.GetToken(RFC5322ParserBacktick, 0)
}
func (s *CtextContext) LCurly() antlr.TerminalNode {
return s.GetToken(RFC5322ParserLCurly, 0)
}
func (s *CtextContext) Pipe() antlr.TerminalNode {
return s.GetToken(RFC5322ParserPipe, 0)
}
func (s *CtextContext) RCurly() antlr.TerminalNode {
return s.GetToken(RFC5322ParserRCurly, 0)
}
func (s *CtextContext) Tilde() antlr.TerminalNode {
return s.GetToken(RFC5322ParserTilde, 0)
}
func (s *CtextContext) ObsCtext() IObsCtextContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IObsCtextContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IObsCtextContext)
}
func (s *CtextContext) UTF8NonAscii() antlr.TerminalNode {
return s.GetToken(RFC5322ParserUTF8NonAscii, 0)
}
func (s *CtextContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *CtextContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string {
return antlr.TreesStringTree(s, ruleNames, recog)
}
func (s *CtextContext) EnterRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.EnterCtext(s)
}
}
func (s *CtextContext) ExitRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.ExitCtext(s)
}
}
func (p *RFC5322Parser) Ctext() (localctx ICtextContext) {
localctx = NewCtextContext(p, p.GetParserRuleContext(), p.GetState())
p.EnterRule(localctx, 6, RFC5322ParserRULE_ctext)
defer func() {
p.ExitRule()
}()
defer func() {
if err := recover(); err != nil {
if v, ok := err.(antlr.RecognitionException); ok {
localctx.SetException(v)
p.GetErrorHandler().ReportError(p, v)
p.GetErrorHandler().Recover(p, v)
} else {
panic(err)
}
}
}()
p.SetState(191)
p.GetErrorHandler().Sync(p)
switch p.GetTokenStream().LA(1) {
case RFC5322ParserA, RFC5322ParserB, RFC5322ParserC, RFC5322ParserD, RFC5322ParserE, RFC5322ParserF, RFC5322ParserG, RFC5322ParserH, RFC5322ParserI, RFC5322ParserJ, RFC5322ParserK, RFC5322ParserL, RFC5322ParserM, RFC5322ParserN, RFC5322ParserO, RFC5322ParserP, RFC5322ParserQ, RFC5322ParserR, RFC5322ParserS, RFC5322ParserT, RFC5322ParserU, RFC5322ParserV, RFC5322ParserW, RFC5322ParserX, RFC5322ParserY, RFC5322ParserZ:
p.EnterOuterAlt(localctx, 1)
{
p.SetState(158)
p.Alpha()
}
case RFC5322ParserExclamation:
p.EnterOuterAlt(localctx, 2)
{
p.SetState(159)
p.Match(RFC5322ParserExclamation)
}
case RFC5322ParserDQuote:
p.EnterOuterAlt(localctx, 3)
{
p.SetState(160)
p.Match(RFC5322ParserDQuote)
}
case RFC5322ParserHash:
p.EnterOuterAlt(localctx, 4)
{
p.SetState(161)
p.Match(RFC5322ParserHash)
}
case RFC5322ParserDollar:
p.EnterOuterAlt(localctx, 5)
{
p.SetState(162)
p.Match(RFC5322ParserDollar)
}
case RFC5322ParserPercent:
p.EnterOuterAlt(localctx, 6)
{
p.SetState(163)
p.Match(RFC5322ParserPercent)
}
case RFC5322ParserAmpersand:
p.EnterOuterAlt(localctx, 7)
{
p.SetState(164)
p.Match(RFC5322ParserAmpersand)
}
case RFC5322ParserSQuote:
p.EnterOuterAlt(localctx, 8)
{
p.SetState(165)
p.Match(RFC5322ParserSQuote)
}
case RFC5322ParserAsterisk:
p.EnterOuterAlt(localctx, 9)
{
p.SetState(166)
p.Match(RFC5322ParserAsterisk)
}
case RFC5322ParserPlus:
p.EnterOuterAlt(localctx, 10)
{
p.SetState(167)
p.Match(RFC5322ParserPlus)
}
case RFC5322ParserComma:
p.EnterOuterAlt(localctx, 11)
{
p.SetState(168)
p.Match(RFC5322ParserComma)
}
case RFC5322ParserMinus:
p.EnterOuterAlt(localctx, 12)
{
p.SetState(169)
p.Match(RFC5322ParserMinus)
}
case RFC5322ParserPeriod:
p.EnterOuterAlt(localctx, 13)
{
p.SetState(170)
p.Match(RFC5322ParserPeriod)
}
case RFC5322ParserSlash:
p.EnterOuterAlt(localctx, 14)
{
p.SetState(171)
p.Match(RFC5322ParserSlash)
}
case RFC5322ParserDigit:
p.EnterOuterAlt(localctx, 15)
{
p.SetState(172)
p.Match(RFC5322ParserDigit)
}
case RFC5322ParserColon:
p.EnterOuterAlt(localctx, 16)
{
p.SetState(173)
p.Match(RFC5322ParserColon)
}
case RFC5322ParserSemicolon:
p.EnterOuterAlt(localctx, 17)
{
p.SetState(174)
p.Match(RFC5322ParserSemicolon)
}
case RFC5322ParserLess:
p.EnterOuterAlt(localctx, 18)
{
p.SetState(175)
p.Match(RFC5322ParserLess)
}
case RFC5322ParserEqual:
p.EnterOuterAlt(localctx, 19)
{
p.SetState(176)
p.Match(RFC5322ParserEqual)
}
case RFC5322ParserGreater:
p.EnterOuterAlt(localctx, 20)
{
p.SetState(177)
p.Match(RFC5322ParserGreater)
}
case RFC5322ParserQuestion:
p.EnterOuterAlt(localctx, 21)
{
p.SetState(178)
p.Match(RFC5322ParserQuestion)
}
case RFC5322ParserAt:
p.EnterOuterAlt(localctx, 22)
{
p.SetState(179)
p.Match(RFC5322ParserAt)
}
case RFC5322ParserLBracket:
p.EnterOuterAlt(localctx, 23)
{
p.SetState(180)
p.Match(RFC5322ParserLBracket)
}
case RFC5322ParserRBracket:
p.EnterOuterAlt(localctx, 24)
{
p.SetState(181)
p.Match(RFC5322ParserRBracket)
}
case RFC5322ParserCaret:
p.EnterOuterAlt(localctx, 25)
{
p.SetState(182)
p.Match(RFC5322ParserCaret)
}
case RFC5322ParserUnderscore:
p.EnterOuterAlt(localctx, 26)
{
p.SetState(183)
p.Match(RFC5322ParserUnderscore)
}
case RFC5322ParserBacktick:
p.EnterOuterAlt(localctx, 27)
{
p.SetState(184)
p.Match(RFC5322ParserBacktick)
}
case RFC5322ParserLCurly:
p.EnterOuterAlt(localctx, 28)
{
p.SetState(185)
p.Match(RFC5322ParserLCurly)
}
case RFC5322ParserPipe:
p.EnterOuterAlt(localctx, 29)
{
p.SetState(186)
p.Match(RFC5322ParserPipe)
}
case RFC5322ParserRCurly:
p.EnterOuterAlt(localctx, 30)
{
p.SetState(187)
p.Match(RFC5322ParserRCurly)
}
case RFC5322ParserTilde:
p.EnterOuterAlt(localctx, 31)
{
p.SetState(188)
p.Match(RFC5322ParserTilde)
}
case RFC5322ParserU_01_08, RFC5322ParserU_0B, RFC5322ParserU_0C, RFC5322ParserU_0E_1F, RFC5322ParserDelete:
p.EnterOuterAlt(localctx, 32)
{
p.SetState(189)
p.ObsCtext()
}
case RFC5322ParserUTF8NonAscii:
p.EnterOuterAlt(localctx, 33)
{
p.SetState(190)
p.Match(RFC5322ParserUTF8NonAscii)
}
default:
panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil))
}
return localctx
}
// ICcontentContext is an interface to support dynamic dispatch.
type ICcontentContext interface {
antlr.ParserRuleContext
// GetParser returns the parser.
GetParser() antlr.Parser
// IsCcontentContext differentiates from other interfaces.
IsCcontentContext()
}
type CcontentContext struct {
*antlr.BaseParserRuleContext
parser antlr.Parser
}
func NewEmptyCcontentContext() *CcontentContext {
var p = new(CcontentContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1)
p.RuleIndex = RFC5322ParserRULE_ccontent
return p
}
func (*CcontentContext) IsCcontentContext() {}
func NewCcontentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *CcontentContext {
var p = new(CcontentContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState)
p.parser = parser
p.RuleIndex = RFC5322ParserRULE_ccontent
return p
}
func (s *CcontentContext) GetParser() antlr.Parser { return s.parser }
func (s *CcontentContext) Ctext() ICtextContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*ICtextContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(ICtextContext)
}
func (s *CcontentContext) QuotedPair() IQuotedPairContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IQuotedPairContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(IQuotedPairContext)
}
func (s *CcontentContext) Comment() ICommentContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*ICommentContext)(nil)).Elem(), 0)
if t == nil {
return nil
}
return t.(ICommentContext)
}
func (s *CcontentContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *CcontentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string {
return antlr.TreesStringTree(s, ruleNames, recog)
}
func (s *CcontentContext) EnterRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.EnterCcontent(s)
}
}
func (s *CcontentContext) ExitRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.ExitCcontent(s)
}
}
func (p *RFC5322Parser) Ccontent() (localctx ICcontentContext) {
localctx = NewCcontentContext(p, p.GetParserRuleContext(), p.GetState())
p.EnterRule(localctx, 8, RFC5322ParserRULE_ccontent)
defer func() {
p.ExitRule()
}()
defer func() {
if err := recover(); err != nil {
if v, ok := err.(antlr.RecognitionException); ok {
localctx.SetException(v)
p.GetErrorHandler().ReportError(p, v)
p.GetErrorHandler().Recover(p, v)
} else {
panic(err)
}
}
}()
p.SetState(196)
p.GetErrorHandler().Sync(p)
switch p.GetTokenStream().LA(1) {
case RFC5322ParserU_01_08, RFC5322ParserU_0B, RFC5322ParserU_0C, RFC5322ParserU_0E_1F, RFC5322ParserExclamation, RFC5322ParserDQuote, RFC5322ParserHash, RFC5322ParserDollar, RFC5322ParserPercent, RFC5322ParserAmpersand, RFC5322ParserSQuote, RFC5322ParserAsterisk, RFC5322ParserPlus, RFC5322ParserComma, RFC5322ParserMinus, RFC5322ParserPeriod, RFC5322ParserSlash, RFC5322ParserDigit, RFC5322ParserColon, RFC5322ParserSemicolon, RFC5322ParserLess, RFC5322ParserEqual, RFC5322ParserGreater, RFC5322ParserQuestion, RFC5322ParserAt, RFC5322ParserLBracket, RFC5322ParserRBracket, RFC5322ParserCaret, RFC5322ParserUnderscore, RFC5322ParserBacktick, RFC5322ParserLCurly, RFC5322ParserPipe, RFC5322ParserRCurly, RFC5322ParserTilde, RFC5322ParserDelete, RFC5322ParserUTF8NonAscii, RFC5322ParserA, RFC5322ParserB, RFC5322ParserC, RFC5322ParserD, RFC5322ParserE, RFC5322ParserF, RFC5322ParserG, RFC5322ParserH, RFC5322ParserI, RFC5322ParserJ, RFC5322ParserK, RFC5322ParserL, RFC5322ParserM, RFC5322ParserN, RFC5322ParserO, RFC5322ParserP, RFC5322ParserQ, RFC5322ParserR, RFC5322ParserS, RFC5322ParserT, RFC5322ParserU, RFC5322ParserV, RFC5322ParserW, RFC5322ParserX, RFC5322ParserY, RFC5322ParserZ:
p.EnterOuterAlt(localctx, 1)
{
p.SetState(193)
p.Ctext()
}
case RFC5322ParserBackslash:
p.EnterOuterAlt(localctx, 2)
{
p.SetState(194)
p.QuotedPair()
}
case RFC5322ParserLParens:
p.EnterOuterAlt(localctx, 3)
{
p.SetState(195)
p.Comment()
}
default:
panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil))
}
return localctx
}
// ICommentContext is an interface to support dynamic dispatch.
type ICommentContext interface {
antlr.ParserRuleContext
// GetParser returns the parser.
GetParser() antlr.Parser
// IsCommentContext differentiates from other interfaces.
IsCommentContext()
}
type CommentContext struct {
*antlr.BaseParserRuleContext
parser antlr.Parser
}
func NewEmptyCommentContext() *CommentContext {
var p = new(CommentContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1)
p.RuleIndex = RFC5322ParserRULE_comment
return p
}
func (*CommentContext) IsCommentContext() {}
func NewCommentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *CommentContext {
var p = new(CommentContext)
p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState)
p.parser = parser
p.RuleIndex = RFC5322ParserRULE_comment
return p
}
func (s *CommentContext) GetParser() antlr.Parser { return s.parser }
func (s *CommentContext) LParens() antlr.TerminalNode {
return s.GetToken(RFC5322ParserLParens, 0)
}
func (s *CommentContext) RParens() antlr.TerminalNode {
return s.GetToken(RFC5322ParserRParens, 0)
}
func (s *CommentContext) AllCcontent() []ICcontentContext {
var ts = s.GetTypedRuleContexts(reflect.TypeOf((*ICcontentContext)(nil)).Elem())
var tst = make([]ICcontentContext, len(ts))
for i, t := range ts {
if t != nil {
tst[i] = t.(ICcontentContext)
}
}
return tst
}
func (s *CommentContext) Ccontent(i int) ICcontentContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*ICcontentContext)(nil)).Elem(), i)
if t == nil {
return nil
}
return t.(ICcontentContext)
}
func (s *CommentContext) AllFws() []IFwsContext {
var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IFwsContext)(nil)).Elem())
var tst = make([]IFwsContext, len(ts))
for i, t := range ts {
if t != nil {
tst[i] = t.(IFwsContext)
}
}
return tst
}
func (s *CommentContext) Fws(i int) IFwsContext {
var t = s.GetTypedRuleContext(reflect.TypeOf((*IFwsContext)(nil)).Elem(), i)
if t == nil {
return nil
}
return t.(IFwsContext)
}
func (s *CommentContext) GetRuleContext() antlr.RuleContext {
return s
}
func (s *CommentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string {
return antlr.TreesStringTree(s, ruleNames, recog)
}
func (s *CommentContext) EnterRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.EnterComment(s)
}
}
func (s *CommentContext) ExitRule(listener antlr.ParseTreeListener) {
if listenerT, ok := listener.(RFC5322ParserListener); ok {
listenerT.ExitComment(s)
}
}
func (p *RFC5322Parser) Comment() (localctx ICommentContext) {
localctx = NewCommentContext(p, p.GetParserRuleContext(), p.GetState())
p.EnterRule(localctx, 10, RFC5322ParserRULE_comment)
var _la int
defer func() {
p.ExitRule()
}()
defer func() {
if err := recover(); err != nil {
if v, ok := err.(antlr.RecognitionException); ok {
localctx.SetException(v)
p.GetErrorHandler().ReportError(p, v)
p.GetErrorHandler().Recover(p, v)
} else {
panic(err)
}
}
}()
var _alt int
p.EnterOuterAlt(localctx, 1)
{
p.SetState(198)
p.Match(RFC5322ParserLParens)
}
p.SetState(205)
p.GetErrorHandler().Sync(p)
_alt = p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 9, p.GetParserRuleContext())
for _alt != 2 && _alt != antlr.ATNInvalidAltNumber {
if _alt == 1 {
p.SetState(200)
p.GetErrorHandler().Sync(p)
_la = p.GetTokenStream().LA(1)
if ((_la)&-(0x1f+1)) == 0 && ((1<