diff --git a/pkg/compiler/compiler_filter_test.go b/pkg/compiler/compiler_filter_test.go new file mode 100644 index 00000000..270e9806 --- /dev/null +++ b/pkg/compiler/compiler_filter_test.go @@ -0,0 +1,314 @@ +package compiler_test + +import ( + "context" + "github.com/MontFerret/ferret/pkg/compiler" + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestForFilter(t *testing.T) { + Convey("Should compile query with FILTER i > 2", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + FOR i IN [ 1, 2, 3, 4, 1, 3 ] + FILTER i > 2 + RETURN i + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[3,4,3]`) + }) + + Convey("Should compile query with FILTER i > 1 AND i < 3", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + FOR i IN [ 1, 2, 3, 4, 1, 3 ] + FILTER i > 1 AND i < 4 + RETURN i + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[2,3,3]`) + }) + + Convey("Should compile query with multiple FILTER statements", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + LET users = [ + { + active: true, + age: 31, + gender: "m" + }, + { + active: true, + age: 29, + gender: "f" + }, + { + active: true, + age: 36, + gender: "m" + } + ] + FOR u IN users + FILTER u.active == true + FILTER u.age < 35 + RETURN u + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[{"active":true,"age":31,"gender":"m"},{"active":true,"age":29,"gender":"f"}]`) + }) + + Convey("Should compile query with multiple FILTER statements", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + LET users = [ + { + active: true, + age: 31, + gender: "m" + }, + { + active: true, + age: 29, + gender: "f" + }, + { + active: true, + age: 36, + gender: "m" + }, + { + active: false, + age: 69, + gender: "m" + } + ] + FOR u IN users + FILTER u.active == true + LIMIT 2 + FILTER u.gender == "m" + RETURN u + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[{"active":true,"age":31,"gender":"m"}]`) + }) + + Convey("Should compile query with left side expression", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + LET users = [ + { + active: true, + age: 31, + gender: "m" + }, + { + active: true, + age: 29, + gender: "f" + }, + { + active: true, + age: 36, + gender: "m" + }, + { + active: false, + age: 69, + gender: "m" + } + ] + FOR u IN users + FILTER u.active + RETURN u + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[{"active":true,"age":31,"gender":"m"},{"active":true,"age":29,"gender":"f"},{"active":true,"age":36,"gender":"m"}]`) + }) + + Convey("Should compile query with multiple left side expression", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + LET users = [ + { + active: true, + married: true, + age: 31, + gender: "m" + }, + { + active: true, + married: false, + age: 25, + gender: "f" + }, + { + active: true, + married: false, + age: 36, + gender: "m" + }, + { + active: false, + married: true, + age: 69, + gender: "m" + }, + { + active: true, + married: true, + age: 45, + gender: "f" + } + ] + FOR u IN users + FILTER u.active AND u.married + RETURN u + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[{"active":true,"age":31,"gender":"m","married":true},{"active":true,"age":45,"gender":"f","married":true}]`) + }) + + Convey("Should compile query with multiple left side expression and with binary operator", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + LET users = [ + { + active: true, + married: true, + age: 31, + gender: "m" + }, + { + active: true, + married: false, + age: 25, + gender: "f" + }, + { + active: true, + married: false, + age: 36, + gender: "m" + }, + { + active: false, + married: true, + age: 69, + gender: "m" + }, + { + active: true, + married: true, + age: 45, + gender: "f" + } + ] + FOR u IN users + FILTER !u.active AND u.married + RETURN u + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[{"active":false,"age":69,"gender":"m","married":true}]`) + }) + + Convey("Should compile query with multiple left side expression and with binary operator 2", t, func() { + c := compiler.New() + + prog, err := c.Compile(` + LET users = [ + { + active: true, + married: true, + age: 31, + gender: "m" + }, + { + active: true, + married: false, + age: 25, + gender: "f" + }, + { + active: true, + married: false, + age: 36, + gender: "m" + }, + { + active: false, + married: true, + age: 69, + gender: "m" + }, + { + active: true, + married: true, + age: 45, + gender: "f" + } + ] + FOR u IN users + FILTER !u.active AND !u.married + RETURN u + `) + + So(err, ShouldBeNil) + + out, err := prog.Run(context.Background()) + + So(err, ShouldBeNil) + + So(string(out), ShouldEqual, `[]`) + }) +} diff --git a/pkg/compiler/compiler_for_test.go b/pkg/compiler/compiler_for_test.go index e24f82f0..1f826eee 100644 --- a/pkg/compiler/compiler_for_test.go +++ b/pkg/compiler/compiler_for_test.go @@ -287,120 +287,6 @@ func TestFor(t *testing.T) { So(string(out), ShouldEqual, `[5,6]`) }) - Convey("Should compile query with FILTER i > 2", t, func() { - c := compiler.New() - - prog, err := c.Compile(` - FOR i IN [ 1, 2, 3, 4, 1, 3 ] - FILTER i > 2 - RETURN i - `) - - So(err, ShouldBeNil) - - out, err := prog.Run(context.Background()) - - So(err, ShouldBeNil) - - So(string(out), ShouldEqual, `[3,4,3]`) - }) - - Convey("Should compile query with FILTER i > 1 AND i < 3", t, func() { - c := compiler.New() - - prog, err := c.Compile(` - FOR i IN [ 1, 2, 3, 4, 1, 3 ] - FILTER i > 1 AND i < 4 - RETURN i - `) - - So(err, ShouldBeNil) - - out, err := prog.Run(context.Background()) - - So(err, ShouldBeNil) - - So(string(out), ShouldEqual, `[2,3,3]`) - }) - - Convey("Should compile query with multiple FILTER statements", t, func() { - c := compiler.New() - - prog, err := c.Compile(` - LET users = [ - { - active: true, - age: 31, - gender: "m" - }, - { - active: true, - age: 29, - gender: "f" - }, - { - active: true, - age: 36, - gender: "m" - } - ] - FOR u IN users - FILTER u.active == true - FILTER u.age < 35 - RETURN u - `) - - So(err, ShouldBeNil) - - out, err := prog.Run(context.Background()) - - So(err, ShouldBeNil) - - So(string(out), ShouldEqual, `[{"active":true,"age":31,"gender":"m"},{"active":true,"age":29,"gender":"f"}]`) - }) - - Convey("Should compile query with multiple FILTER statements", t, func() { - c := compiler.New() - - prog, err := c.Compile(` - LET users = [ - { - active: true, - age: 31, - gender: "m" - }, - { - active: true, - age: 29, - gender: "f" - }, - { - active: true, - age: 36, - gender: "m" - }, - { - active: false, - age: 69, - gender: "m" - } - ] - FOR u IN users - FILTER u.active == true - LIMIT 2 - FILTER u.gender == "m" - RETURN u - `) - - So(err, ShouldBeNil) - - out, err := prog.Run(context.Background()) - - So(err, ShouldBeNil) - - So(string(out), ShouldEqual, `[{"active":true,"age":31,"gender":"m"}]`) - }) - Convey("Should compile query with SORT statement", t, func() { c := compiler.New() diff --git a/pkg/compiler/compiler_unary_test.go b/pkg/compiler/compiler_unary_test.go new file mode 100644 index 00000000..dbc50a74 --- /dev/null +++ b/pkg/compiler/compiler_unary_test.go @@ -0,0 +1,92 @@ +package compiler_test + +import ( + "context" + "github.com/MontFerret/ferret/pkg/compiler" + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +func TestUnaryOperator(t *testing.T) { + Convey("RETURN !{BOOLEAN}", t, func() { + c := compiler.New() + + out1, err := c.MustCompile(` + RETURN !TRUE + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out1), ShouldEqual, `false`) + + out2, err := c.MustCompile(` + RETURN !FALSE + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out2), ShouldEqual, `true`) + }) + + Convey("RETURN foo ? TRUE : FALSE ", t, func() { + c := compiler.New() + + out1, err := c.MustCompile(` + LET foo = TRUE + RETURN foo ? TRUE : FALSE + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out1), ShouldEqual, `true`) + + out2, err := c.MustCompile(` + LET foo = TRUE + RETURN !foo ? TRUE : FALSE + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out2), ShouldEqual, `false`) + }) + + Convey("RETURN { enabled: !val}", t, func() { + c := compiler.New() + + out1, err := c.MustCompile(` + LET val = "" + RETURN { enabled: !val } + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out1), ShouldEqual, `{"enabled":true}`) + + out2, err := c.MustCompile(` + LET val = "" + RETURN { enabled: !!val } + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out2), ShouldEqual, `{"enabled":false}`) + }) + + Convey("RETURN -v", t, func() { + c := compiler.New() + + out1, err := c.MustCompile(` + LET v = 1 + RETURN -v + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out1), ShouldEqual, `-1`) + }) + + Convey("RETURN +v", t, func() { + c := compiler.New() + + out1, err := c.MustCompile(` + LET v = -1 + RETURN +v + `).Run(context.Background()) + + So(err, ShouldBeNil) + So(string(out1), ShouldEqual, `-1`) + }) +} diff --git a/pkg/compiler/visitor.go b/pkg/compiler/visitor.go index 3ea47a20..c5aee3e2 100644 --- a/pkg/compiler/visitor.go +++ b/pkg/compiler/visitor.go @@ -334,19 +334,24 @@ func (v *visitor) createFilter(ctx *fql.FilterClauseContext, scope *scope) (core return nil, err } - left := exps[0] - right := exps[1] + if len(exps) == 2 { + left := exps[0] + right := exps[1] - equalityOp := exp.EqualityOperator() + equalityOp := exp.EqualityOperator() - if equalityOp != nil { - return operators.NewEqualityOperator(v.getSourceMap(ctx), left, right, equalityOp.GetText()) - } + if equalityOp != nil { + return operators.NewEqualityOperator(v.getSourceMap(ctx), left, right, equalityOp.GetText()) + } - logicalOp := exp.LogicalOperator() + logicalOp := exp.LogicalOperator() - if logicalOp != nil { - return operators.NewLogicalOperator(v.getSourceMap(ctx), left, right, logicalOp.GetText()) + if logicalOp != nil { + return operators.NewLogicalOperator(v.getSourceMap(ctx), left, right, logicalOp.GetText()) + } + } else { + // should be unary operator + return v.doVisitExpression(exp, scope) } return nil, core.Error(ErrInvalidToken, ctx.GetText()) @@ -785,7 +790,9 @@ func (v *visitor) doVisitMathOperator(ctx *fql.ExpressionContext, scope *scope) ) } -func (v *visitor) doVisitNotOperator(ctx *fql.ExpressionContext, scope *scope) (core.OperatorExpression, error) { +func (v *visitor) doVisitUnaryOperator(ctx *fql.ExpressionContext, scope *scope) (core.OperatorExpression, error) { + op := ctx.UnaryOperator().(*fql.UnaryOperatorContext) + exps, err := v.doVisitAllExpressions(ctx.AllExpression(), scope) if err != nil { @@ -794,11 +801,10 @@ func (v *visitor) doVisitNotOperator(ctx *fql.ExpressionContext, scope *scope) ( exp := exps[0] - return operators.NewLogicalOperator( + return operators.NewUnaryOperator( v.getSourceMap(ctx), - nil, exp, - "NOT", + operators.UnaryOperatorType(op.GetText()), ) } @@ -837,6 +843,8 @@ func (v *visitor) doVisitInOperator(ctx *fql.ExpressionContext, scope *scope) (c return nil, err } + op := ctx.InOperator().(*fql.InOperatorContext) + left := exps[0] right := exps[1] @@ -848,7 +856,7 @@ func (v *visitor) doVisitInOperator(ctx *fql.ExpressionContext, scope *scope) (c v.getSourceMap(ctx), left, right, - ctx.Not() != nil, + op.Not() != nil, ) } @@ -893,6 +901,12 @@ func (v *visitor) doVisitArrayOperator(ctx *fql.ExpressionContext, scope *scope) } func (v *visitor) doVisitExpression(ctx *fql.ExpressionContext, scope *scope) (core.Expression, error) { + notOp := ctx.UnaryOperator() + + if notOp != nil { + return v.doVisitUnaryOperator(ctx, scope) + } + variable := ctx.Variable() if variable != nil { @@ -999,12 +1013,6 @@ func (v *visitor) doVisitExpression(ctx *fql.ExpressionContext, scope *scope) (c ) } - notOp := ctx.Not() - - if notOp != nil { - return v.doVisitNotOperator(ctx, scope) - } - rangeOp := ctx.RangeOperator() if rangeOp != nil { diff --git a/pkg/parser/antlr/FqlParser.g4 b/pkg/parser/antlr/FqlParser.g4 index 9e614a0a..bb9cc46a 100644 --- a/pkg/parser/antlr/FqlParser.g4 +++ b/pkg/parser/antlr/FqlParser.g4 @@ -210,16 +210,14 @@ arguments ; expression - : expression equalityOperator expression + : unaryOperator expression + | expression equalityOperator expression | expression logicalOperator expression | expression mathOperator expression | functionCallExpression | OpenParen expressionSequence CloseParen - | Plus expression - | Minus expression - | expression arrayOperator (Not)? (inOperator | equalityOperator) expression - | expression (Not)? inOperator expression - | Not expression + | expression arrayOperator (inOperator | equalityOperator) expression + | expression inOperator expression | expression QuestionMark expression? Colon expression | rangeOperator | stringLiteral @@ -248,6 +246,7 @@ arrayOperator inOperator : In + | Not In ; equalityOperator diff --git a/pkg/parser/fql/FqlLexer.interp b/pkg/parser/fql/FqlLexer.interp index a0897eec..0a4038f2 100644 --- a/pkg/parser/fql/FqlLexer.interp +++ b/pkg/parser/fql/FqlLexer.interp @@ -61,6 +61,7 @@ null null null null +null token symbolic names: null @@ -123,6 +124,7 @@ In Param Identifier StringLiteral +TemplateStringLiteral IntegerLiteral FloatLiteral @@ -186,6 +188,7 @@ In Param Identifier StringLiteral +TemplateStringLiteral IntegerLiteral FloatLiteral HexDigit @@ -205,4 +208,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 63, 506, 8, 1, 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, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 146, 10, 2, 12, 2, 14, 2, 149, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 160, 10, 3, 12, 3, 14, 3, 163, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 168, 10, 4, 13, 4, 14, 4, 169, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 235, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 241, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 313, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 343, 10, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 393, 10, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 6, 59, 401, 10, 59, 13, 59, 14, 59, 402, 3, 59, 3, 59, 7, 59, 407, 10, 59, 12, 59, 14, 59, 410, 11, 59, 7, 59, 412, 10, 59, 12, 59, 14, 59, 415, 11, 59, 3, 59, 3, 59, 7, 59, 419, 10, 59, 12, 59, 14, 59, 422, 11, 59, 7, 59, 424, 10, 59, 12, 59, 14, 59, 427, 11, 59, 3, 60, 3, 60, 5, 60, 431, 10, 60, 3, 61, 6, 61, 434, 10, 61, 13, 61, 14, 61, 435, 3, 62, 3, 62, 3, 62, 6, 62, 441, 10, 62, 13, 62, 14, 62, 442, 3, 62, 5, 62, 446, 10, 62, 3, 62, 3, 62, 5, 62, 450, 10, 62, 5, 62, 452, 10, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 459, 10, 64, 12, 64, 14, 64, 462, 11, 64, 5, 64, 464, 10, 64, 3, 65, 3, 65, 5, 65, 468, 10, 65, 3, 65, 6, 65, 471, 10, 65, 13, 65, 14, 65, 472, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 487, 10, 69, 12, 69, 14, 69, 490, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 500, 10, 70, 12, 70, 14, 70, 503, 11, 70, 3, 70, 3, 70, 3, 147, 2, 71, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 2, 127, 2, 129, 2, 131, 2, 133, 2, 135, 2, 137, 2, 139, 2, 3, 2, 12, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 2, 528, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 3, 141, 3, 2, 2, 2, 5, 155, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 173, 3, 2, 2, 2, 11, 177, 3, 2, 2, 2, 13, 179, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 183, 3, 2, 2, 2, 19, 185, 3, 2, 2, 2, 21, 187, 3, 2, 2, 2, 23, 189, 3, 2, 2, 2, 25, 191, 3, 2, 2, 2, 27, 193, 3, 2, 2, 2, 29, 195, 3, 2, 2, 2, 31, 197, 3, 2, 2, 2, 33, 199, 3, 2, 2, 2, 35, 201, 3, 2, 2, 2, 37, 204, 3, 2, 2, 2, 39, 207, 3, 2, 2, 2, 41, 210, 3, 2, 2, 2, 43, 213, 3, 2, 2, 2, 45, 215, 3, 2, 2, 2, 47, 217, 3, 2, 2, 2, 49, 220, 3, 2, 2, 2, 51, 223, 3, 2, 2, 2, 53, 225, 3, 2, 2, 2, 55, 227, 3, 2, 2, 2, 57, 234, 3, 2, 2, 2, 59, 240, 3, 2, 2, 2, 61, 242, 3, 2, 2, 2, 63, 245, 3, 2, 2, 2, 65, 247, 3, 2, 2, 2, 67, 249, 3, 2, 2, 2, 69, 252, 3, 2, 2, 2, 71, 255, 3, 2, 2, 2, 73, 259, 3, 2, 2, 2, 75, 266, 3, 2, 2, 2, 77, 275, 3, 2, 2, 2, 79, 282, 3, 2, 2, 2, 81, 287, 3, 2, 2, 2, 83, 293, 3, 2, 2, 2, 85, 297, 3, 2, 2, 2, 87, 312, 3, 2, 2, 2, 89, 314, 3, 2, 2, 2, 91, 319, 3, 2, 2, 2, 93, 342, 3, 2, 2, 2, 95, 344, 3, 2, 2, 2, 97, 349, 3, 2, 2, 2, 99, 354, 3, 2, 2, 2, 101, 359, 3, 2, 2, 2, 103, 365, 3, 2, 2, 2, 105, 369, 3, 2, 2, 2, 107, 373, 3, 2, 2, 2, 109, 383, 3, 2, 2, 2, 111, 392, 3, 2, 2, 2, 113, 394, 3, 2, 2, 2, 115, 397, 3, 2, 2, 2, 117, 400, 3, 2, 2, 2, 119, 430, 3, 2, 2, 2, 121, 433, 3, 2, 2, 2, 123, 451, 3, 2, 2, 2, 125, 453, 3, 2, 2, 2, 127, 463, 3, 2, 2, 2, 129, 465, 3, 2, 2, 2, 131, 474, 3, 2, 2, 2, 133, 476, 3, 2, 2, 2, 135, 478, 3, 2, 2, 2, 137, 480, 3, 2, 2, 2, 139, 493, 3, 2, 2, 2, 141, 142, 7, 49, 2, 2, 142, 143, 7, 44, 2, 2, 143, 147, 3, 2, 2, 2, 144, 146, 11, 2, 2, 2, 145, 144, 3, 2, 2, 2, 146, 149, 3, 2, 2, 2, 147, 148, 3, 2, 2, 2, 147, 145, 3, 2, 2, 2, 148, 150, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 150, 151, 7, 44, 2, 2, 151, 152, 7, 49, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, 8, 2, 2, 2, 154, 4, 3, 2, 2, 2, 155, 156, 7, 49, 2, 2, 156, 157, 7, 49, 2, 2, 157, 161, 3, 2, 2, 2, 158, 160, 10, 2, 2, 2, 159, 158, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 8, 3, 2, 2, 165, 6, 3, 2, 2, 2, 166, 168, 9, 3, 2, 2, 167, 166, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 172, 8, 4, 2, 2, 172, 8, 3, 2, 2, 2, 173, 174, 9, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 176, 8, 5, 2, 2, 176, 10, 3, 2, 2, 2, 177, 178, 7, 60, 2, 2, 178, 12, 3, 2, 2, 2, 179, 180, 7, 61, 2, 2, 180, 14, 3, 2, 2, 2, 181, 182, 7, 48, 2, 2, 182, 16, 3, 2, 2, 2, 183, 184, 7, 46, 2, 2, 184, 18, 3, 2, 2, 2, 185, 186, 7, 93, 2, 2, 186, 20, 3, 2, 2, 2, 187, 188, 7, 95, 2, 2, 188, 22, 3, 2, 2, 2, 189, 190, 7, 42, 2, 2, 190, 24, 3, 2, 2, 2, 191, 192, 7, 43, 2, 2, 192, 26, 3, 2, 2, 2, 193, 194, 7, 125, 2, 2, 194, 28, 3, 2, 2, 2, 195, 196, 7, 127, 2, 2, 196, 30, 3, 2, 2, 2, 197, 198, 7, 64, 2, 2, 198, 32, 3, 2, 2, 2, 199, 200, 7, 62, 2, 2, 200, 34, 3, 2, 2, 2, 201, 202, 7, 63, 2, 2, 202, 203, 7, 63, 2, 2, 203, 36, 3, 2, 2, 2, 204, 205, 7, 64, 2, 2, 205, 206, 7, 63, 2, 2, 206, 38, 3, 2, 2, 2, 207, 208, 7, 62, 2, 2, 208, 209, 7, 63, 2, 2, 209, 40, 3, 2, 2, 2, 210, 211, 7, 35, 2, 2, 211, 212, 7, 63, 2, 2, 212, 42, 3, 2, 2, 2, 213, 214, 7, 45, 2, 2, 214, 44, 3, 2, 2, 2, 215, 216, 7, 47, 2, 2, 216, 46, 3, 2, 2, 2, 217, 218, 7, 47, 2, 2, 218, 219, 7, 47, 2, 2, 219, 48, 3, 2, 2, 2, 220, 221, 7, 45, 2, 2, 221, 222, 7, 45, 2, 2, 222, 50, 3, 2, 2, 2, 223, 224, 7, 44, 2, 2, 224, 52, 3, 2, 2, 2, 225, 226, 7, 49, 2, 2, 226, 54, 3, 2, 2, 2, 227, 228, 7, 39, 2, 2, 228, 56, 3, 2, 2, 2, 229, 230, 7, 67, 2, 2, 230, 231, 7, 80, 2, 2, 231, 235, 7, 70, 2, 2, 232, 233, 7, 40, 2, 2, 233, 235, 7, 40, 2, 2, 234, 229, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 58, 3, 2, 2, 2, 236, 237, 7, 81, 2, 2, 237, 241, 7, 84, 2, 2, 238, 239, 7, 126, 2, 2, 239, 241, 7, 126, 2, 2, 240, 236, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 241, 60, 3, 2, 2, 2, 242, 243, 5, 15, 8, 2, 243, 244, 5, 15, 8, 2, 244, 62, 3, 2, 2, 2, 245, 246, 7, 63, 2, 2, 246, 64, 3, 2, 2, 2, 247, 248, 7, 65, 2, 2, 248, 66, 3, 2, 2, 2, 249, 250, 7, 35, 2, 2, 250, 251, 7, 128, 2, 2, 251, 68, 3, 2, 2, 2, 252, 253, 7, 63, 2, 2, 253, 254, 7, 128, 2, 2, 254, 70, 3, 2, 2, 2, 255, 256, 7, 72, 2, 2, 256, 257, 7, 81, 2, 2, 257, 258, 7, 84, 2, 2, 258, 72, 3, 2, 2, 2, 259, 260, 7, 84, 2, 2, 260, 261, 7, 71, 2, 2, 261, 262, 7, 86, 2, 2, 262, 263, 7, 87, 2, 2, 263, 264, 7, 84, 2, 2, 264, 265, 7, 80, 2, 2, 265, 74, 3, 2, 2, 2, 266, 267, 7, 70, 2, 2, 267, 268, 7, 75, 2, 2, 268, 269, 7, 85, 2, 2, 269, 270, 7, 86, 2, 2, 270, 271, 7, 75, 2, 2, 271, 272, 7, 80, 2, 2, 272, 273, 7, 69, 2, 2, 273, 274, 7, 86, 2, 2, 274, 76, 3, 2, 2, 2, 275, 276, 7, 72, 2, 2, 276, 277, 7, 75, 2, 2, 277, 278, 7, 78, 2, 2, 278, 279, 7, 86, 2, 2, 279, 280, 7, 71, 2, 2, 280, 281, 7, 84, 2, 2, 281, 78, 3, 2, 2, 2, 282, 283, 7, 85, 2, 2, 283, 284, 7, 81, 2, 2, 284, 285, 7, 84, 2, 2, 285, 286, 7, 86, 2, 2, 286, 80, 3, 2, 2, 2, 287, 288, 7, 78, 2, 2, 288, 289, 7, 75, 2, 2, 289, 290, 7, 79, 2, 2, 290, 291, 7, 75, 2, 2, 291, 292, 7, 86, 2, 2, 292, 82, 3, 2, 2, 2, 293, 294, 7, 78, 2, 2, 294, 295, 7, 71, 2, 2, 295, 296, 7, 86, 2, 2, 296, 84, 3, 2, 2, 2, 297, 298, 7, 69, 2, 2, 298, 299, 7, 81, 2, 2, 299, 300, 7, 78, 2, 2, 300, 301, 7, 78, 2, 2, 301, 302, 7, 71, 2, 2, 302, 303, 7, 69, 2, 2, 303, 304, 7, 86, 2, 2, 304, 86, 3, 2, 2, 2, 305, 306, 7, 67, 2, 2, 306, 307, 7, 85, 2, 2, 307, 313, 7, 69, 2, 2, 308, 309, 7, 70, 2, 2, 309, 310, 7, 71, 2, 2, 310, 311, 7, 85, 2, 2, 311, 313, 7, 69, 2, 2, 312, 305, 3, 2, 2, 2, 312, 308, 3, 2, 2, 2, 313, 88, 3, 2, 2, 2, 314, 315, 7, 80, 2, 2, 315, 316, 7, 81, 2, 2, 316, 317, 7, 80, 2, 2, 317, 318, 7, 71, 2, 2, 318, 90, 3, 2, 2, 2, 319, 320, 7, 80, 2, 2, 320, 321, 7, 87, 2, 2, 321, 322, 7, 78, 2, 2, 322, 323, 7, 78, 2, 2, 323, 92, 3, 2, 2, 2, 324, 325, 7, 86, 2, 2, 325, 326, 7, 84, 2, 2, 326, 327, 7, 87, 2, 2, 327, 343, 7, 71, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 116, 2, 2, 330, 331, 7, 119, 2, 2, 331, 343, 7, 103, 2, 2, 332, 333, 7, 72, 2, 2, 333, 334, 7, 67, 2, 2, 334, 335, 7, 78, 2, 2, 335, 336, 7, 85, 2, 2, 336, 343, 7, 71, 2, 2, 337, 338, 7, 104, 2, 2, 338, 339, 7, 99, 2, 2, 339, 340, 7, 110, 2, 2, 340, 341, 7, 117, 2, 2, 341, 343, 7, 103, 2, 2, 342, 324, 3, 2, 2, 2, 342, 328, 3, 2, 2, 2, 342, 332, 3, 2, 2, 2, 342, 337, 3, 2, 2, 2, 343, 94, 3, 2, 2, 2, 344, 345, 7, 75, 2, 2, 345, 346, 7, 80, 2, 2, 346, 347, 7, 86, 2, 2, 347, 348, 7, 81, 2, 2, 348, 96, 3, 2, 2, 2, 349, 350, 7, 77, 2, 2, 350, 351, 7, 71, 2, 2, 351, 352, 7, 71, 2, 2, 352, 353, 7, 82, 2, 2, 353, 98, 3, 2, 2, 2, 354, 355, 7, 89, 2, 2, 355, 356, 7, 75, 2, 2, 356, 357, 7, 86, 2, 2, 357, 358, 7, 74, 2, 2, 358, 100, 3, 2, 2, 2, 359, 360, 7, 69, 2, 2, 360, 361, 7, 81, 2, 2, 361, 362, 7, 87, 2, 2, 362, 363, 7, 80, 2, 2, 363, 364, 7, 86, 2, 2, 364, 102, 3, 2, 2, 2, 365, 366, 7, 67, 2, 2, 366, 367, 7, 78, 2, 2, 367, 368, 7, 78, 2, 2, 368, 104, 3, 2, 2, 2, 369, 370, 7, 67, 2, 2, 370, 371, 7, 80, 2, 2, 371, 372, 7, 91, 2, 2, 372, 106, 3, 2, 2, 2, 373, 374, 7, 67, 2, 2, 374, 375, 7, 73, 2, 2, 375, 376, 7, 73, 2, 2, 376, 377, 7, 84, 2, 2, 377, 378, 7, 71, 2, 2, 378, 379, 7, 73, 2, 2, 379, 380, 7, 67, 2, 2, 380, 381, 7, 86, 2, 2, 381, 382, 7, 71, 2, 2, 382, 108, 3, 2, 2, 2, 383, 384, 7, 78, 2, 2, 384, 385, 7, 75, 2, 2, 385, 386, 7, 77, 2, 2, 386, 387, 7, 71, 2, 2, 387, 110, 3, 2, 2, 2, 388, 389, 7, 80, 2, 2, 389, 390, 7, 81, 2, 2, 390, 393, 7, 86, 2, 2, 391, 393, 7, 35, 2, 2, 392, 388, 3, 2, 2, 2, 392, 391, 3, 2, 2, 2, 393, 112, 3, 2, 2, 2, 394, 395, 7, 75, 2, 2, 395, 396, 7, 80, 2, 2, 396, 114, 3, 2, 2, 2, 397, 398, 7, 66, 2, 2, 398, 116, 3, 2, 2, 2, 399, 401, 5, 131, 66, 2, 400, 399, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 413, 3, 2, 2, 2, 404, 408, 5, 133, 67, 2, 405, 407, 5, 117, 59, 2, 406, 405, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 404, 3, 2, 2, 2, 412, 415, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 425, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 416, 420, 5, 135, 68, 2, 417, 419, 5, 117, 59, 2, 418, 417, 3, 2, 2, 2, 419, 422, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 420, 421, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, 416, 3, 2, 2, 2, 424, 427, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 118, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 428, 431, 5, 139, 70, 2, 429, 431, 5, 137, 69, 2, 430, 428, 3, 2, 2, 2, 430, 429, 3, 2, 2, 2, 431, 120, 3, 2, 2, 2, 432, 434, 9, 4, 2, 2, 433, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 122, 3, 2, 2, 2, 437, 438, 5, 127, 64, 2, 438, 440, 5, 15, 8, 2, 439, 441, 9, 4, 2, 2, 440, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 445, 3, 2, 2, 2, 444, 446, 5, 129, 65, 2, 445, 444, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 452, 3, 2, 2, 2, 447, 449, 5, 127, 64, 2, 448, 450, 5, 129, 65, 2, 449, 448, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 437, 3, 2, 2, 2, 451, 447, 3, 2, 2, 2, 452, 124, 3, 2, 2, 2, 453, 454, 9, 5, 2, 2, 454, 126, 3, 2, 2, 2, 455, 464, 7, 50, 2, 2, 456, 460, 9, 6, 2, 2, 457, 459, 9, 4, 2, 2, 458, 457, 3, 2, 2, 2, 459, 462, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 460, 461, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 455, 3, 2, 2, 2, 463, 456, 3, 2, 2, 2, 464, 128, 3, 2, 2, 2, 465, 467, 9, 7, 2, 2, 466, 468, 9, 8, 2, 2, 467, 466, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, 468, 470, 3, 2, 2, 2, 469, 471, 9, 4, 2, 2, 470, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 130, 3, 2, 2, 2, 474, 475, 9, 9, 2, 2, 475, 132, 3, 2, 2, 2, 476, 477, 7, 97, 2, 2, 477, 134, 3, 2, 2, 2, 478, 479, 4, 50, 59, 2, 479, 136, 3, 2, 2, 2, 480, 488, 7, 36, 2, 2, 481, 482, 7, 94, 2, 2, 482, 487, 11, 2, 2, 2, 483, 484, 7, 36, 2, 2, 484, 487, 7, 36, 2, 2, 485, 487, 10, 10, 2, 2, 486, 481, 3, 2, 2, 2, 486, 483, 3, 2, 2, 2, 486, 485, 3, 2, 2, 2, 487, 490, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 491, 3, 2, 2, 2, 490, 488, 3, 2, 2, 2, 491, 492, 7, 36, 2, 2, 492, 138, 3, 2, 2, 2, 493, 501, 7, 41, 2, 2, 494, 495, 7, 94, 2, 2, 495, 500, 11, 2, 2, 2, 496, 497, 7, 41, 2, 2, 497, 500, 7, 41, 2, 2, 498, 500, 10, 11, 2, 2, 499, 494, 3, 2, 2, 2, 499, 496, 3, 2, 2, 2, 499, 498, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 505, 7, 41, 2, 2, 505, 140, 3, 2, 2, 2, 30, 2, 147, 161, 169, 234, 240, 312, 342, 392, 402, 408, 413, 420, 425, 430, 435, 442, 445, 449, 451, 460, 463, 467, 472, 486, 488, 499, 501, 3, 2, 3, 2] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 64, 519, 8, 1, 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, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 148, 10, 2, 12, 2, 14, 2, 151, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 162, 10, 3, 12, 3, 14, 3, 165, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 170, 10, 4, 13, 4, 14, 4, 171, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 237, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 243, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 315, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 345, 10, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 395, 10, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 6, 59, 403, 10, 59, 13, 59, 14, 59, 404, 3, 59, 3, 59, 7, 59, 409, 10, 59, 12, 59, 14, 59, 412, 11, 59, 7, 59, 414, 10, 59, 12, 59, 14, 59, 417, 11, 59, 3, 59, 3, 59, 7, 59, 421, 10, 59, 12, 59, 14, 59, 424, 11, 59, 7, 59, 426, 10, 59, 12, 59, 14, 59, 429, 11, 59, 3, 60, 3, 60, 5, 60, 433, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 7, 61, 439, 10, 61, 12, 61, 14, 61, 442, 11, 61, 3, 61, 3, 61, 3, 62, 6, 62, 447, 10, 62, 13, 62, 14, 62, 448, 3, 63, 3, 63, 3, 63, 6, 63, 454, 10, 63, 13, 63, 14, 63, 455, 3, 63, 5, 63, 459, 10, 63, 3, 63, 3, 63, 5, 63, 463, 10, 63, 5, 63, 465, 10, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 7, 65, 472, 10, 65, 12, 65, 14, 65, 475, 11, 65, 5, 65, 477, 10, 65, 3, 66, 3, 66, 5, 66, 481, 10, 66, 3, 66, 6, 66, 484, 10, 66, 13, 66, 14, 66, 485, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 500, 10, 70, 12, 70, 14, 70, 503, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 513, 10, 71, 12, 71, 14, 71, 516, 11, 71, 3, 71, 3, 71, 3, 149, 2, 72, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 2, 129, 2, 131, 2, 133, 2, 135, 2, 137, 2, 139, 2, 141, 2, 3, 2, 13, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 3, 2, 98, 98, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, 124, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 2, 543, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 3, 143, 3, 2, 2, 2, 5, 157, 3, 2, 2, 2, 7, 169, 3, 2, 2, 2, 9, 175, 3, 2, 2, 2, 11, 179, 3, 2, 2, 2, 13, 181, 3, 2, 2, 2, 15, 183, 3, 2, 2, 2, 17, 185, 3, 2, 2, 2, 19, 187, 3, 2, 2, 2, 21, 189, 3, 2, 2, 2, 23, 191, 3, 2, 2, 2, 25, 193, 3, 2, 2, 2, 27, 195, 3, 2, 2, 2, 29, 197, 3, 2, 2, 2, 31, 199, 3, 2, 2, 2, 33, 201, 3, 2, 2, 2, 35, 203, 3, 2, 2, 2, 37, 206, 3, 2, 2, 2, 39, 209, 3, 2, 2, 2, 41, 212, 3, 2, 2, 2, 43, 215, 3, 2, 2, 2, 45, 217, 3, 2, 2, 2, 47, 219, 3, 2, 2, 2, 49, 222, 3, 2, 2, 2, 51, 225, 3, 2, 2, 2, 53, 227, 3, 2, 2, 2, 55, 229, 3, 2, 2, 2, 57, 236, 3, 2, 2, 2, 59, 242, 3, 2, 2, 2, 61, 244, 3, 2, 2, 2, 63, 247, 3, 2, 2, 2, 65, 249, 3, 2, 2, 2, 67, 251, 3, 2, 2, 2, 69, 254, 3, 2, 2, 2, 71, 257, 3, 2, 2, 2, 73, 261, 3, 2, 2, 2, 75, 268, 3, 2, 2, 2, 77, 277, 3, 2, 2, 2, 79, 284, 3, 2, 2, 2, 81, 289, 3, 2, 2, 2, 83, 295, 3, 2, 2, 2, 85, 299, 3, 2, 2, 2, 87, 314, 3, 2, 2, 2, 89, 316, 3, 2, 2, 2, 91, 321, 3, 2, 2, 2, 93, 344, 3, 2, 2, 2, 95, 346, 3, 2, 2, 2, 97, 351, 3, 2, 2, 2, 99, 356, 3, 2, 2, 2, 101, 361, 3, 2, 2, 2, 103, 367, 3, 2, 2, 2, 105, 371, 3, 2, 2, 2, 107, 375, 3, 2, 2, 2, 109, 385, 3, 2, 2, 2, 111, 394, 3, 2, 2, 2, 113, 396, 3, 2, 2, 2, 115, 399, 3, 2, 2, 2, 117, 402, 3, 2, 2, 2, 119, 432, 3, 2, 2, 2, 121, 434, 3, 2, 2, 2, 123, 446, 3, 2, 2, 2, 125, 464, 3, 2, 2, 2, 127, 466, 3, 2, 2, 2, 129, 476, 3, 2, 2, 2, 131, 478, 3, 2, 2, 2, 133, 487, 3, 2, 2, 2, 135, 489, 3, 2, 2, 2, 137, 491, 3, 2, 2, 2, 139, 493, 3, 2, 2, 2, 141, 506, 3, 2, 2, 2, 143, 144, 7, 49, 2, 2, 144, 145, 7, 44, 2, 2, 145, 149, 3, 2, 2, 2, 146, 148, 11, 2, 2, 2, 147, 146, 3, 2, 2, 2, 148, 151, 3, 2, 2, 2, 149, 150, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 150, 152, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 152, 153, 7, 44, 2, 2, 153, 154, 7, 49, 2, 2, 154, 155, 3, 2, 2, 2, 155, 156, 8, 2, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 49, 2, 2, 158, 159, 7, 49, 2, 2, 159, 163, 3, 2, 2, 2, 160, 162, 10, 2, 2, 2, 161, 160, 3, 2, 2, 2, 162, 165, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 163, 164, 3, 2, 2, 2, 164, 166, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 166, 167, 8, 3, 2, 2, 167, 6, 3, 2, 2, 2, 168, 170, 9, 3, 2, 2, 169, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 174, 8, 4, 2, 2, 174, 8, 3, 2, 2, 2, 175, 176, 9, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 8, 5, 2, 2, 178, 10, 3, 2, 2, 2, 179, 180, 7, 60, 2, 2, 180, 12, 3, 2, 2, 2, 181, 182, 7, 61, 2, 2, 182, 14, 3, 2, 2, 2, 183, 184, 7, 48, 2, 2, 184, 16, 3, 2, 2, 2, 185, 186, 7, 46, 2, 2, 186, 18, 3, 2, 2, 2, 187, 188, 7, 93, 2, 2, 188, 20, 3, 2, 2, 2, 189, 190, 7, 95, 2, 2, 190, 22, 3, 2, 2, 2, 191, 192, 7, 42, 2, 2, 192, 24, 3, 2, 2, 2, 193, 194, 7, 43, 2, 2, 194, 26, 3, 2, 2, 2, 195, 196, 7, 125, 2, 2, 196, 28, 3, 2, 2, 2, 197, 198, 7, 127, 2, 2, 198, 30, 3, 2, 2, 2, 199, 200, 7, 64, 2, 2, 200, 32, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, 202, 34, 3, 2, 2, 2, 203, 204, 7, 63, 2, 2, 204, 205, 7, 63, 2, 2, 205, 36, 3, 2, 2, 2, 206, 207, 7, 64, 2, 2, 207, 208, 7, 63, 2, 2, 208, 38, 3, 2, 2, 2, 209, 210, 7, 62, 2, 2, 210, 211, 7, 63, 2, 2, 211, 40, 3, 2, 2, 2, 212, 213, 7, 35, 2, 2, 213, 214, 7, 63, 2, 2, 214, 42, 3, 2, 2, 2, 215, 216, 7, 45, 2, 2, 216, 44, 3, 2, 2, 2, 217, 218, 7, 47, 2, 2, 218, 46, 3, 2, 2, 2, 219, 220, 7, 47, 2, 2, 220, 221, 7, 47, 2, 2, 221, 48, 3, 2, 2, 2, 222, 223, 7, 45, 2, 2, 223, 224, 7, 45, 2, 2, 224, 50, 3, 2, 2, 2, 225, 226, 7, 44, 2, 2, 226, 52, 3, 2, 2, 2, 227, 228, 7, 49, 2, 2, 228, 54, 3, 2, 2, 2, 229, 230, 7, 39, 2, 2, 230, 56, 3, 2, 2, 2, 231, 232, 7, 67, 2, 2, 232, 233, 7, 80, 2, 2, 233, 237, 7, 70, 2, 2, 234, 235, 7, 40, 2, 2, 235, 237, 7, 40, 2, 2, 236, 231, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 237, 58, 3, 2, 2, 2, 238, 239, 7, 81, 2, 2, 239, 243, 7, 84, 2, 2, 240, 241, 7, 126, 2, 2, 241, 243, 7, 126, 2, 2, 242, 238, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 60, 3, 2, 2, 2, 244, 245, 5, 15, 8, 2, 245, 246, 5, 15, 8, 2, 246, 62, 3, 2, 2, 2, 247, 248, 7, 63, 2, 2, 248, 64, 3, 2, 2, 2, 249, 250, 7, 65, 2, 2, 250, 66, 3, 2, 2, 2, 251, 252, 7, 35, 2, 2, 252, 253, 7, 128, 2, 2, 253, 68, 3, 2, 2, 2, 254, 255, 7, 63, 2, 2, 255, 256, 7, 128, 2, 2, 256, 70, 3, 2, 2, 2, 257, 258, 7, 72, 2, 2, 258, 259, 7, 81, 2, 2, 259, 260, 7, 84, 2, 2, 260, 72, 3, 2, 2, 2, 261, 262, 7, 84, 2, 2, 262, 263, 7, 71, 2, 2, 263, 264, 7, 86, 2, 2, 264, 265, 7, 87, 2, 2, 265, 266, 7, 84, 2, 2, 266, 267, 7, 80, 2, 2, 267, 74, 3, 2, 2, 2, 268, 269, 7, 70, 2, 2, 269, 270, 7, 75, 2, 2, 270, 271, 7, 85, 2, 2, 271, 272, 7, 86, 2, 2, 272, 273, 7, 75, 2, 2, 273, 274, 7, 80, 2, 2, 274, 275, 7, 69, 2, 2, 275, 276, 7, 86, 2, 2, 276, 76, 3, 2, 2, 2, 277, 278, 7, 72, 2, 2, 278, 279, 7, 75, 2, 2, 279, 280, 7, 78, 2, 2, 280, 281, 7, 86, 2, 2, 281, 282, 7, 71, 2, 2, 282, 283, 7, 84, 2, 2, 283, 78, 3, 2, 2, 2, 284, 285, 7, 85, 2, 2, 285, 286, 7, 81, 2, 2, 286, 287, 7, 84, 2, 2, 287, 288, 7, 86, 2, 2, 288, 80, 3, 2, 2, 2, 289, 290, 7, 78, 2, 2, 290, 291, 7, 75, 2, 2, 291, 292, 7, 79, 2, 2, 292, 293, 7, 75, 2, 2, 293, 294, 7, 86, 2, 2, 294, 82, 3, 2, 2, 2, 295, 296, 7, 78, 2, 2, 296, 297, 7, 71, 2, 2, 297, 298, 7, 86, 2, 2, 298, 84, 3, 2, 2, 2, 299, 300, 7, 69, 2, 2, 300, 301, 7, 81, 2, 2, 301, 302, 7, 78, 2, 2, 302, 303, 7, 78, 2, 2, 303, 304, 7, 71, 2, 2, 304, 305, 7, 69, 2, 2, 305, 306, 7, 86, 2, 2, 306, 86, 3, 2, 2, 2, 307, 308, 7, 67, 2, 2, 308, 309, 7, 85, 2, 2, 309, 315, 7, 69, 2, 2, 310, 311, 7, 70, 2, 2, 311, 312, 7, 71, 2, 2, 312, 313, 7, 85, 2, 2, 313, 315, 7, 69, 2, 2, 314, 307, 3, 2, 2, 2, 314, 310, 3, 2, 2, 2, 315, 88, 3, 2, 2, 2, 316, 317, 7, 80, 2, 2, 317, 318, 7, 81, 2, 2, 318, 319, 7, 80, 2, 2, 319, 320, 7, 71, 2, 2, 320, 90, 3, 2, 2, 2, 321, 322, 7, 80, 2, 2, 322, 323, 7, 87, 2, 2, 323, 324, 7, 78, 2, 2, 324, 325, 7, 78, 2, 2, 325, 92, 3, 2, 2, 2, 326, 327, 7, 86, 2, 2, 327, 328, 7, 84, 2, 2, 328, 329, 7, 87, 2, 2, 329, 345, 7, 71, 2, 2, 330, 331, 7, 118, 2, 2, 331, 332, 7, 116, 2, 2, 332, 333, 7, 119, 2, 2, 333, 345, 7, 103, 2, 2, 334, 335, 7, 72, 2, 2, 335, 336, 7, 67, 2, 2, 336, 337, 7, 78, 2, 2, 337, 338, 7, 85, 2, 2, 338, 345, 7, 71, 2, 2, 339, 340, 7, 104, 2, 2, 340, 341, 7, 99, 2, 2, 341, 342, 7, 110, 2, 2, 342, 343, 7, 117, 2, 2, 343, 345, 7, 103, 2, 2, 344, 326, 3, 2, 2, 2, 344, 330, 3, 2, 2, 2, 344, 334, 3, 2, 2, 2, 344, 339, 3, 2, 2, 2, 345, 94, 3, 2, 2, 2, 346, 347, 7, 75, 2, 2, 347, 348, 7, 80, 2, 2, 348, 349, 7, 86, 2, 2, 349, 350, 7, 81, 2, 2, 350, 96, 3, 2, 2, 2, 351, 352, 7, 77, 2, 2, 352, 353, 7, 71, 2, 2, 353, 354, 7, 71, 2, 2, 354, 355, 7, 82, 2, 2, 355, 98, 3, 2, 2, 2, 356, 357, 7, 89, 2, 2, 357, 358, 7, 75, 2, 2, 358, 359, 7, 86, 2, 2, 359, 360, 7, 74, 2, 2, 360, 100, 3, 2, 2, 2, 361, 362, 7, 69, 2, 2, 362, 363, 7, 81, 2, 2, 363, 364, 7, 87, 2, 2, 364, 365, 7, 80, 2, 2, 365, 366, 7, 86, 2, 2, 366, 102, 3, 2, 2, 2, 367, 368, 7, 67, 2, 2, 368, 369, 7, 78, 2, 2, 369, 370, 7, 78, 2, 2, 370, 104, 3, 2, 2, 2, 371, 372, 7, 67, 2, 2, 372, 373, 7, 80, 2, 2, 373, 374, 7, 91, 2, 2, 374, 106, 3, 2, 2, 2, 375, 376, 7, 67, 2, 2, 376, 377, 7, 73, 2, 2, 377, 378, 7, 73, 2, 2, 378, 379, 7, 84, 2, 2, 379, 380, 7, 71, 2, 2, 380, 381, 7, 73, 2, 2, 381, 382, 7, 67, 2, 2, 382, 383, 7, 86, 2, 2, 383, 384, 7, 71, 2, 2, 384, 108, 3, 2, 2, 2, 385, 386, 7, 78, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 77, 2, 2, 388, 389, 7, 71, 2, 2, 389, 110, 3, 2, 2, 2, 390, 391, 7, 80, 2, 2, 391, 392, 7, 81, 2, 2, 392, 395, 7, 86, 2, 2, 393, 395, 7, 35, 2, 2, 394, 390, 3, 2, 2, 2, 394, 393, 3, 2, 2, 2, 395, 112, 3, 2, 2, 2, 396, 397, 7, 75, 2, 2, 397, 398, 7, 80, 2, 2, 398, 114, 3, 2, 2, 2, 399, 400, 7, 66, 2, 2, 400, 116, 3, 2, 2, 2, 401, 403, 5, 133, 67, 2, 402, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 415, 3, 2, 2, 2, 406, 410, 5, 135, 68, 2, 407, 409, 5, 117, 59, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 406, 3, 2, 2, 2, 414, 417, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 427, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 418, 422, 5, 137, 69, 2, 419, 421, 5, 117, 59, 2, 420, 419, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 418, 3, 2, 2, 2, 426, 429, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 118, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 433, 5, 141, 71, 2, 431, 433, 5, 139, 70, 2, 432, 430, 3, 2, 2, 2, 432, 431, 3, 2, 2, 2, 433, 120, 3, 2, 2, 2, 434, 440, 7, 98, 2, 2, 435, 436, 7, 94, 2, 2, 436, 439, 7, 98, 2, 2, 437, 439, 10, 4, 2, 2, 438, 435, 3, 2, 2, 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 444, 7, 98, 2, 2, 444, 122, 3, 2, 2, 2, 445, 447, 9, 5, 2, 2, 446, 445, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 124, 3, 2, 2, 2, 450, 451, 5, 129, 65, 2, 451, 453, 5, 15, 8, 2, 452, 454, 9, 5, 2, 2, 453, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 458, 3, 2, 2, 2, 457, 459, 5, 131, 66, 2, 458, 457, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 465, 3, 2, 2, 2, 460, 462, 5, 129, 65, 2, 461, 463, 5, 131, 66, 2, 462, 461, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 465, 3, 2, 2, 2, 464, 450, 3, 2, 2, 2, 464, 460, 3, 2, 2, 2, 465, 126, 3, 2, 2, 2, 466, 467, 9, 6, 2, 2, 467, 128, 3, 2, 2, 2, 468, 477, 7, 50, 2, 2, 469, 473, 9, 7, 2, 2, 470, 472, 9, 5, 2, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 468, 3, 2, 2, 2, 476, 469, 3, 2, 2, 2, 477, 130, 3, 2, 2, 2, 478, 480, 9, 8, 2, 2, 479, 481, 9, 9, 2, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 483, 3, 2, 2, 2, 482, 484, 9, 5, 2, 2, 483, 482, 3, 2, 2, 2, 484, 485, 3, 2, 2, 2, 485, 483, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 132, 3, 2, 2, 2, 487, 488, 9, 10, 2, 2, 488, 134, 3, 2, 2, 2, 489, 490, 7, 97, 2, 2, 490, 136, 3, 2, 2, 2, 491, 492, 4, 50, 59, 2, 492, 138, 3, 2, 2, 2, 493, 501, 7, 36, 2, 2, 494, 495, 7, 94, 2, 2, 495, 500, 11, 2, 2, 2, 496, 497, 7, 36, 2, 2, 497, 500, 7, 36, 2, 2, 498, 500, 10, 11, 2, 2, 499, 494, 3, 2, 2, 2, 499, 496, 3, 2, 2, 2, 499, 498, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 505, 7, 36, 2, 2, 505, 140, 3, 2, 2, 2, 506, 514, 7, 41, 2, 2, 507, 508, 7, 94, 2, 2, 508, 513, 11, 2, 2, 2, 509, 510, 7, 41, 2, 2, 510, 513, 7, 41, 2, 2, 511, 513, 10, 12, 2, 2, 512, 507, 3, 2, 2, 2, 512, 509, 3, 2, 2, 2, 512, 511, 3, 2, 2, 2, 513, 516, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 517, 518, 7, 41, 2, 2, 518, 142, 3, 2, 2, 2, 32, 2, 149, 163, 171, 236, 242, 314, 344, 394, 404, 410, 415, 422, 427, 432, 438, 440, 448, 455, 458, 462, 464, 473, 476, 480, 485, 499, 501, 512, 514, 3, 2, 3, 2] \ No newline at end of file diff --git a/pkg/parser/fql/FqlLexer.tokens b/pkg/parser/fql/FqlLexer.tokens index f01abdae..bc38f772 100644 --- a/pkg/parser/fql/FqlLexer.tokens +++ b/pkg/parser/fql/FqlLexer.tokens @@ -57,8 +57,9 @@ In=56 Param=57 Identifier=58 StringLiteral=59 -IntegerLiteral=60 -FloatLiteral=61 +TemplateStringLiteral=60 +IntegerLiteral=61 +FloatLiteral=62 ':'=5 ';'=6 '.'=7 diff --git a/pkg/parser/fql/FqlParser.interp b/pkg/parser/fql/FqlParser.interp index e8810235..6aa6e8b1 100644 --- a/pkg/parser/fql/FqlParser.interp +++ b/pkg/parser/fql/FqlParser.interp @@ -61,6 +61,7 @@ null null null null +null token symbolic names: null @@ -123,6 +124,7 @@ In Param Identifier StringLiteral +TemplateStringLiteral IntegerLiteral FloatLiteral @@ -182,4 +184,4 @@ unaryOperator atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 63, 550, 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, 3, 2, 3, 2, 3, 3, 7, 3, 110, 10, 3, 12, 3, 14, 3, 113, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 119, 10, 4, 3, 5, 3, 5, 5, 5, 123, 10, 5, 3, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 140, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 146, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 151, 10, 7, 12, 7, 14, 7, 154, 11, 7, 3, 7, 7, 7, 157, 10, 7, 12, 7, 14, 7, 160, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 175, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 181, 10, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 190, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 196, 10, 14, 12, 14, 14, 14, 199, 11, 14, 3, 15, 3, 15, 5, 15, 203, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 254, 10, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 272, 10, 24, 3, 25, 3, 25, 5, 25, 276, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 293, 10, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 5, 29, 303, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 309, 10, 29, 3, 30, 3, 30, 5, 30, 313, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 321, 10, 31, 12, 31, 14, 31, 324, 11, 31, 5, 31, 326, 10, 31, 3, 31, 5, 31, 329, 10, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 6, 37, 345, 10, 37, 13, 37, 14, 37, 346, 3, 37, 7, 37, 350, 10, 37, 12, 37, 14, 37, 353, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 364, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 370, 10, 39, 12, 39, 14, 39, 373, 11, 39, 6, 39, 375, 10, 39, 13, 39, 14, 39, 376, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 384, 10, 39, 12, 39, 14, 39, 387, 11, 39, 7, 39, 389, 10, 39, 12, 39, 14, 39, 392, 11, 39, 3, 39, 3, 39, 3, 39, 7, 39, 397, 10, 39, 12, 39, 14, 39, 400, 11, 39, 7, 39, 402, 10, 39, 12, 39, 14, 39, 405, 11, 39, 5, 39, 407, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 7, 43, 420, 10, 43, 12, 43, 14, 43, 423, 11, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 432, 10, 45, 12, 45, 14, 45, 435, 11, 45, 5, 45, 437, 10, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 464, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 481, 10, 46, 3, 46, 3, 46, 5, 46, 485, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 491, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 499, 10, 46, 3, 46, 3, 46, 7, 46, 503, 10, 46, 12, 46, 14, 46, 506, 11, 46, 3, 47, 3, 47, 3, 47, 5, 47, 511, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 536, 10, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 2, 3, 90, 54, 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, 2, 8, 3, 2, 46, 47, 4, 2, 46, 46, 53, 54, 3, 2, 17, 22, 3, 2, 30, 31, 4, 2, 23, 24, 27, 29, 4, 2, 23, 24, 56, 57, 2, 579, 2, 106, 3, 2, 2, 2, 4, 111, 3, 2, 2, 2, 6, 118, 3, 2, 2, 2, 8, 122, 3, 2, 2, 2, 10, 139, 3, 2, 2, 2, 12, 141, 3, 2, 2, 2, 14, 163, 3, 2, 2, 2, 16, 165, 3, 2, 2, 2, 18, 174, 3, 2, 2, 2, 20, 180, 3, 2, 2, 2, 22, 182, 3, 2, 2, 2, 24, 185, 3, 2, 2, 2, 26, 191, 3, 2, 2, 2, 28, 200, 3, 2, 2, 2, 30, 253, 3, 2, 2, 2, 32, 255, 3, 2, 2, 2, 34, 257, 3, 2, 2, 2, 36, 259, 3, 2, 2, 2, 38, 261, 3, 2, 2, 2, 40, 263, 3, 2, 2, 2, 42, 265, 3, 2, 2, 2, 44, 267, 3, 2, 2, 2, 46, 271, 3, 2, 2, 2, 48, 275, 3, 2, 2, 2, 50, 292, 3, 2, 2, 2, 52, 294, 3, 2, 2, 2, 54, 297, 3, 2, 2, 2, 56, 302, 3, 2, 2, 2, 58, 310, 3, 2, 2, 2, 60, 316, 3, 2, 2, 2, 62, 332, 3, 2, 2, 2, 64, 334, 3, 2, 2, 2, 66, 336, 3, 2, 2, 2, 68, 338, 3, 2, 2, 2, 70, 340, 3, 2, 2, 2, 72, 342, 3, 2, 2, 2, 74, 363, 3, 2, 2, 2, 76, 406, 3, 2, 2, 2, 78, 408, 3, 2, 2, 2, 80, 410, 3, 2, 2, 2, 82, 414, 3, 2, 2, 2, 84, 416, 3, 2, 2, 2, 86, 424, 3, 2, 2, 2, 88, 427, 3, 2, 2, 2, 90, 463, 3, 2, 2, 2, 92, 535, 3, 2, 2, 2, 94, 537, 3, 2, 2, 2, 96, 539, 3, 2, 2, 2, 98, 541, 3, 2, 2, 2, 100, 543, 3, 2, 2, 2, 102, 545, 3, 2, 2, 2, 104, 547, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, 3, 3, 2, 2, 2, 108, 110, 5, 6, 4, 2, 109, 108, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 114, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 5, 8, 5, 2, 115, 5, 3, 2, 2, 2, 116, 119, 5, 86, 44, 2, 117, 119, 5, 50, 26, 2, 118, 116, 3, 2, 2, 2, 118, 117, 3, 2, 2, 2, 119, 7, 3, 2, 2, 2, 120, 123, 5, 10, 6, 2, 121, 123, 5, 12, 7, 2, 122, 120, 3, 2, 2, 2, 122, 121, 3, 2, 2, 2, 123, 9, 3, 2, 2, 2, 124, 126, 7, 38, 2, 2, 125, 127, 7, 39, 2, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 140, 5, 90, 46, 2, 129, 131, 7, 38, 2, 2, 130, 132, 7, 39, 2, 2, 131, 130, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 13, 2, 2, 134, 135, 5, 12, 7, 2, 135, 136, 7, 14, 2, 2, 136, 140, 3, 2, 2, 2, 137, 138, 7, 38, 2, 2, 138, 140, 5, 92, 47, 2, 139, 124, 3, 2, 2, 2, 139, 129, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 11, 3, 2, 2, 2, 141, 142, 7, 37, 2, 2, 142, 145, 5, 14, 8, 2, 143, 144, 7, 10, 2, 2, 144, 146, 5, 16, 9, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 7, 58, 2, 2, 148, 152, 5, 18, 10, 2, 149, 151, 5, 20, 11, 2, 150, 149, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 46, 24, 2, 156, 155, 3, 2, 2, 2, 157, 160, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 161, 162, 5, 48, 25, 2, 162, 13, 3, 2, 2, 2, 163, 164, 7, 60, 2, 2, 164, 15, 3, 2, 2, 2, 165, 166, 7, 60, 2, 2, 166, 17, 3, 2, 2, 2, 167, 175, 5, 86, 44, 2, 168, 175, 5, 58, 30, 2, 169, 175, 5, 60, 31, 2, 170, 175, 5, 54, 28, 2, 171, 175, 5, 76, 39, 2, 172, 175, 5, 56, 29, 2, 173, 175, 5, 52, 27, 2, 174, 167, 3, 2, 2, 2, 174, 168, 3, 2, 2, 2, 174, 169, 3, 2, 2, 2, 174, 170, 3, 2, 2, 2, 174, 171, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 19, 3, 2, 2, 2, 176, 181, 5, 24, 13, 2, 177, 181, 5, 26, 14, 2, 178, 181, 5, 22, 12, 2, 179, 181, 5, 30, 16, 2, 180, 176, 3, 2, 2, 2, 180, 177, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 180, 179, 3, 2, 2, 2, 181, 21, 3, 2, 2, 2, 182, 183, 7, 40, 2, 2, 183, 184, 5, 90, 46, 2, 184, 23, 3, 2, 2, 2, 185, 186, 7, 42, 2, 2, 186, 189, 7, 62, 2, 2, 187, 188, 7, 10, 2, 2, 188, 190, 7, 62, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 25, 3, 2, 2, 2, 191, 192, 7, 41, 2, 2, 192, 197, 5, 28, 15, 2, 193, 194, 7, 10, 2, 2, 194, 196, 5, 28, 15, 2, 195, 193, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 27, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 202, 5, 90, 46, 2, 201, 203, 7, 45, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 29, 3, 2, 2, 2, 204, 205, 7, 44, 2, 2, 205, 206, 5, 32, 17, 2, 206, 207, 7, 33, 2, 2, 207, 208, 5, 90, 46, 2, 208, 254, 3, 2, 2, 2, 209, 210, 7, 44, 2, 2, 210, 211, 5, 32, 17, 2, 211, 212, 7, 33, 2, 2, 212, 213, 5, 90, 46, 2, 213, 214, 7, 49, 2, 2, 214, 215, 5, 34, 18, 2, 215, 254, 3, 2, 2, 2, 216, 217, 7, 44, 2, 2, 217, 218, 5, 32, 17, 2, 218, 219, 7, 33, 2, 2, 219, 220, 5, 90, 46, 2, 220, 221, 7, 49, 2, 2, 221, 222, 5, 34, 18, 2, 222, 223, 7, 50, 2, 2, 223, 224, 5, 36, 19, 2, 224, 254, 3, 2, 2, 2, 225, 226, 7, 44, 2, 2, 226, 227, 5, 32, 17, 2, 227, 228, 7, 33, 2, 2, 228, 229, 5, 90, 46, 2, 229, 230, 7, 51, 2, 2, 230, 231, 7, 52, 2, 2, 231, 232, 5, 38, 20, 2, 232, 254, 3, 2, 2, 2, 233, 234, 7, 44, 2, 2, 234, 235, 5, 32, 17, 2, 235, 236, 7, 33, 2, 2, 236, 237, 5, 90, 46, 2, 237, 238, 7, 55, 2, 2, 238, 239, 5, 40, 21, 2, 239, 240, 7, 33, 2, 2, 240, 241, 5, 42, 22, 2, 241, 254, 3, 2, 2, 2, 242, 243, 7, 44, 2, 2, 243, 244, 7, 55, 2, 2, 244, 245, 5, 40, 21, 2, 245, 246, 7, 33, 2, 2, 246, 247, 5, 42, 22, 2, 247, 254, 3, 2, 2, 2, 248, 249, 7, 44, 2, 2, 249, 250, 7, 51, 2, 2, 250, 251, 7, 52, 2, 2, 251, 252, 7, 49, 2, 2, 252, 254, 5, 38, 20, 2, 253, 204, 3, 2, 2, 2, 253, 209, 3, 2, 2, 2, 253, 216, 3, 2, 2, 2, 253, 225, 3, 2, 2, 2, 253, 233, 3, 2, 2, 2, 253, 242, 3, 2, 2, 2, 253, 248, 3, 2, 2, 2, 254, 31, 3, 2, 2, 2, 255, 256, 7, 60, 2, 2, 256, 33, 3, 2, 2, 2, 257, 258, 7, 60, 2, 2, 258, 35, 3, 2, 2, 2, 259, 260, 7, 60, 2, 2, 260, 37, 3, 2, 2, 2, 261, 262, 7, 60, 2, 2, 262, 39, 3, 2, 2, 2, 263, 264, 7, 60, 2, 2, 264, 41, 3, 2, 2, 2, 265, 266, 5, 90, 46, 2, 266, 43, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 45, 3, 2, 2, 2, 269, 272, 5, 50, 26, 2, 270, 272, 5, 86, 44, 2, 271, 269, 3, 2, 2, 2, 271, 270, 3, 2, 2, 2, 272, 47, 3, 2, 2, 2, 273, 276, 5, 10, 6, 2, 274, 276, 5, 12, 7, 2, 275, 273, 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, 276, 49, 3, 2, 2, 2, 277, 278, 7, 43, 2, 2, 278, 279, 7, 60, 2, 2, 279, 280, 7, 33, 2, 2, 280, 293, 5, 90, 46, 2, 281, 282, 7, 43, 2, 2, 282, 283, 7, 60, 2, 2, 283, 284, 7, 33, 2, 2, 284, 285, 7, 13, 2, 2, 285, 286, 5, 12, 7, 2, 286, 287, 7, 14, 2, 2, 287, 293, 3, 2, 2, 2, 288, 289, 7, 43, 2, 2, 289, 290, 7, 60, 2, 2, 290, 291, 7, 33, 2, 2, 291, 293, 5, 92, 47, 2, 292, 277, 3, 2, 2, 2, 292, 281, 3, 2, 2, 2, 292, 288, 3, 2, 2, 2, 293, 51, 3, 2, 2, 2, 294, 295, 7, 59, 2, 2, 295, 296, 7, 60, 2, 2, 296, 53, 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, 55, 3, 2, 2, 2, 299, 303, 5, 66, 34, 2, 300, 303, 5, 54, 28, 2, 301, 303, 5, 52, 27, 2, 302, 299, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 308, 7, 32, 2, 2, 305, 309, 5, 66, 34, 2, 306, 309, 5, 54, 28, 2, 307, 309, 5, 52, 27, 2, 308, 305, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 308, 307, 3, 2, 2, 2, 309, 57, 3, 2, 2, 2, 310, 312, 7, 11, 2, 2, 311, 313, 5, 72, 37, 2, 312, 311, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 7, 12, 2, 2, 315, 59, 3, 2, 2, 2, 316, 325, 7, 15, 2, 2, 317, 322, 5, 74, 38, 2, 318, 319, 7, 10, 2, 2, 319, 321, 5, 74, 38, 2, 320, 318, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 325, 317, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 328, 3, 2, 2, 2, 327, 329, 7, 10, 2, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 7, 16, 2, 2, 331, 61, 3, 2, 2, 2, 332, 333, 7, 48, 2, 2, 333, 63, 3, 2, 2, 2, 334, 335, 7, 61, 2, 2, 335, 65, 3, 2, 2, 2, 336, 337, 7, 62, 2, 2, 337, 67, 3, 2, 2, 2, 338, 339, 7, 63, 2, 2, 339, 69, 3, 2, 2, 2, 340, 341, 9, 2, 2, 2, 341, 71, 3, 2, 2, 2, 342, 351, 5, 90, 46, 2, 343, 345, 7, 10, 2, 2, 344, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 350, 5, 90, 46, 2, 349, 344, 3, 2, 2, 2, 350, 353, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 73, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 354, 355, 5, 82, 42, 2, 355, 356, 7, 7, 2, 2, 356, 357, 5, 90, 46, 2, 357, 364, 3, 2, 2, 2, 358, 359, 5, 80, 41, 2, 359, 360, 7, 7, 2, 2, 360, 361, 5, 90, 46, 2, 361, 364, 3, 2, 2, 2, 362, 364, 5, 78, 40, 2, 363, 354, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 363, 362, 3, 2, 2, 2, 364, 75, 3, 2, 2, 2, 365, 374, 7, 60, 2, 2, 366, 367, 7, 9, 2, 2, 367, 371, 5, 82, 42, 2, 368, 370, 5, 80, 41, 2, 369, 368, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 366, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 407, 3, 2, 2, 2, 378, 379, 7, 60, 2, 2, 379, 390, 5, 80, 41, 2, 380, 381, 7, 9, 2, 2, 381, 385, 5, 82, 42, 2, 382, 384, 5, 80, 41, 2, 383, 382, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 389, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 380, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 403, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 398, 5, 80, 41, 2, 394, 395, 7, 9, 2, 2, 395, 397, 5, 82, 42, 2, 396, 394, 3, 2, 2, 2, 397, 400, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 401, 393, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 407, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 365, 3, 2, 2, 2, 406, 378, 3, 2, 2, 2, 407, 77, 3, 2, 2, 2, 408, 409, 5, 54, 28, 2, 409, 79, 3, 2, 2, 2, 410, 411, 7, 11, 2, 2, 411, 412, 5, 90, 46, 2, 412, 413, 7, 12, 2, 2, 413, 81, 3, 2, 2, 2, 414, 415, 7, 60, 2, 2, 415, 83, 3, 2, 2, 2, 416, 421, 5, 90, 46, 2, 417, 418, 7, 10, 2, 2, 418, 420, 5, 90, 46, 2, 419, 417, 3, 2, 2, 2, 420, 423, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 85, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 424, 425, 7, 60, 2, 2, 425, 426, 5, 88, 45, 2, 426, 87, 3, 2, 2, 2, 427, 436, 7, 13, 2, 2, 428, 433, 5, 90, 46, 2, 429, 430, 7, 10, 2, 2, 430, 432, 5, 90, 46, 2, 431, 429, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 437, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 428, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 7, 14, 2, 2, 439, 89, 3, 2, 2, 2, 440, 441, 8, 46, 1, 2, 441, 464, 5, 86, 44, 2, 442, 443, 7, 13, 2, 2, 443, 444, 5, 84, 43, 2, 444, 445, 7, 14, 2, 2, 445, 464, 3, 2, 2, 2, 446, 447, 7, 23, 2, 2, 447, 464, 5, 90, 46, 19, 448, 449, 7, 24, 2, 2, 449, 464, 5, 90, 46, 18, 450, 451, 7, 57, 2, 2, 451, 464, 5, 90, 46, 15, 452, 464, 5, 56, 29, 2, 453, 464, 5, 64, 33, 2, 454, 464, 5, 66, 34, 2, 455, 464, 5, 68, 35, 2, 456, 464, 5, 62, 32, 2, 457, 464, 5, 58, 30, 2, 458, 464, 5, 60, 31, 2, 459, 464, 5, 54, 28, 2, 460, 464, 5, 76, 39, 2, 461, 464, 5, 70, 36, 2, 462, 464, 5, 52, 27, 2, 463, 440, 3, 2, 2, 2, 463, 442, 3, 2, 2, 2, 463, 446, 3, 2, 2, 2, 463, 448, 3, 2, 2, 2, 463, 450, 3, 2, 2, 2, 463, 452, 3, 2, 2, 2, 463, 453, 3, 2, 2, 2, 463, 454, 3, 2, 2, 2, 463, 455, 3, 2, 2, 2, 463, 456, 3, 2, 2, 2, 463, 457, 3, 2, 2, 2, 463, 458, 3, 2, 2, 2, 463, 459, 3, 2, 2, 2, 463, 460, 3, 2, 2, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 504, 3, 2, 2, 2, 465, 466, 12, 24, 2, 2, 466, 467, 5, 98, 50, 2, 467, 468, 5, 90, 46, 25, 468, 503, 3, 2, 2, 2, 469, 470, 12, 23, 2, 2, 470, 471, 5, 100, 51, 2, 471, 472, 5, 90, 46, 24, 472, 503, 3, 2, 2, 2, 473, 474, 12, 22, 2, 2, 474, 475, 5, 102, 52, 2, 475, 476, 5, 90, 46, 23, 476, 503, 3, 2, 2, 2, 477, 478, 12, 17, 2, 2, 478, 480, 5, 94, 48, 2, 479, 481, 7, 57, 2, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, 485, 5, 96, 49, 2, 483, 485, 5, 98, 50, 2, 484, 482, 3, 2, 2, 2, 484, 483, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 487, 5, 90, 46, 18, 487, 503, 3, 2, 2, 2, 488, 490, 12, 16, 2, 2, 489, 491, 7, 57, 2, 2, 490, 489, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 5, 96, 49, 2, 493, 494, 5, 90, 46, 17, 494, 503, 3, 2, 2, 2, 495, 496, 12, 14, 2, 2, 496, 498, 7, 34, 2, 2, 497, 499, 5, 90, 46, 2, 498, 497, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 501, 7, 7, 2, 2, 501, 503, 5, 90, 46, 15, 502, 465, 3, 2, 2, 2, 502, 469, 3, 2, 2, 2, 502, 473, 3, 2, 2, 2, 502, 477, 3, 2, 2, 2, 502, 488, 3, 2, 2, 2, 502, 495, 3, 2, 2, 2, 503, 506, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 91, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 508, 5, 90, 46, 2, 508, 510, 7, 34, 2, 2, 509, 511, 5, 90, 46, 2, 510, 509, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 7, 2, 2, 513, 514, 7, 13, 2, 2, 514, 515, 5, 12, 7, 2, 515, 516, 7, 14, 2, 2, 516, 536, 3, 2, 2, 2, 517, 518, 5, 90, 46, 2, 518, 519, 7, 34, 2, 2, 519, 520, 7, 13, 2, 2, 520, 521, 5, 12, 7, 2, 521, 522, 7, 14, 2, 2, 522, 523, 7, 7, 2, 2, 523, 524, 5, 90, 46, 2, 524, 536, 3, 2, 2, 2, 525, 526, 5, 90, 46, 2, 526, 527, 7, 34, 2, 2, 527, 528, 7, 13, 2, 2, 528, 529, 5, 12, 7, 2, 529, 530, 7, 14, 2, 2, 530, 531, 7, 7, 2, 2, 531, 532, 7, 13, 2, 2, 532, 533, 5, 12, 7, 2, 533, 534, 7, 14, 2, 2, 534, 536, 3, 2, 2, 2, 535, 507, 3, 2, 2, 2, 535, 517, 3, 2, 2, 2, 535, 525, 3, 2, 2, 2, 536, 93, 3, 2, 2, 2, 537, 538, 9, 3, 2, 2, 538, 95, 3, 2, 2, 2, 539, 540, 7, 58, 2, 2, 540, 97, 3, 2, 2, 2, 541, 542, 9, 4, 2, 2, 542, 99, 3, 2, 2, 2, 543, 544, 9, 5, 2, 2, 544, 101, 3, 2, 2, 2, 545, 546, 9, 6, 2, 2, 546, 103, 3, 2, 2, 2, 547, 548, 9, 7, 2, 2, 548, 105, 3, 2, 2, 2, 48, 111, 118, 122, 126, 131, 139, 145, 152, 158, 174, 180, 189, 197, 202, 253, 271, 275, 292, 302, 308, 312, 322, 325, 328, 346, 351, 363, 371, 376, 385, 390, 398, 403, 406, 421, 433, 436, 463, 480, 484, 490, 498, 502, 504, 510, 535] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 64, 544, 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, 3, 2, 3, 2, 3, 3, 7, 3, 110, 10, 3, 12, 3, 14, 3, 113, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 119, 10, 4, 3, 5, 3, 5, 5, 5, 123, 10, 5, 3, 6, 3, 6, 5, 6, 127, 10, 6, 3, 6, 3, 6, 3, 6, 5, 6, 132, 10, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 140, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 146, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 151, 10, 7, 12, 7, 14, 7, 154, 11, 7, 3, 7, 7, 7, 157, 10, 7, 12, 7, 14, 7, 160, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 175, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 181, 10, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 190, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 196, 10, 14, 12, 14, 14, 14, 199, 11, 14, 3, 15, 3, 15, 5, 15, 203, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 254, 10, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 272, 10, 24, 3, 25, 3, 25, 5, 25, 276, 10, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 293, 10, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 5, 29, 303, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 309, 10, 29, 3, 30, 3, 30, 5, 30, 313, 10, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 321, 10, 31, 12, 31, 14, 31, 324, 11, 31, 5, 31, 326, 10, 31, 3, 31, 5, 31, 329, 10, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 6, 37, 345, 10, 37, 13, 37, 14, 37, 346, 3, 37, 7, 37, 350, 10, 37, 12, 37, 14, 37, 353, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 364, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 370, 10, 39, 12, 39, 14, 39, 373, 11, 39, 6, 39, 375, 10, 39, 13, 39, 14, 39, 376, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 384, 10, 39, 12, 39, 14, 39, 387, 11, 39, 7, 39, 389, 10, 39, 12, 39, 14, 39, 392, 11, 39, 3, 39, 3, 39, 3, 39, 7, 39, 397, 10, 39, 12, 39, 14, 39, 400, 11, 39, 7, 39, 402, 10, 39, 12, 39, 14, 39, 405, 11, 39, 5, 39, 407, 10, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 7, 43, 420, 10, 43, 12, 43, 14, 43, 423, 11, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 432, 10, 45, 12, 45, 14, 45, 435, 11, 45, 5, 45, 437, 10, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 461, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 479, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 490, 10, 46, 3, 46, 3, 46, 7, 46, 494, 10, 46, 12, 46, 14, 46, 497, 11, 46, 3, 47, 3, 47, 3, 47, 5, 47, 502, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 527, 10, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 5, 49, 534, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 2, 3, 90, 54, 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, 2, 9, 3, 2, 61, 62, 3, 2, 46, 47, 4, 2, 46, 46, 53, 54, 3, 2, 17, 22, 3, 2, 30, 31, 4, 2, 23, 24, 27, 29, 4, 2, 23, 24, 56, 57, 2, 570, 2, 106, 3, 2, 2, 2, 4, 111, 3, 2, 2, 2, 6, 118, 3, 2, 2, 2, 8, 122, 3, 2, 2, 2, 10, 139, 3, 2, 2, 2, 12, 141, 3, 2, 2, 2, 14, 163, 3, 2, 2, 2, 16, 165, 3, 2, 2, 2, 18, 174, 3, 2, 2, 2, 20, 180, 3, 2, 2, 2, 22, 182, 3, 2, 2, 2, 24, 185, 3, 2, 2, 2, 26, 191, 3, 2, 2, 2, 28, 200, 3, 2, 2, 2, 30, 253, 3, 2, 2, 2, 32, 255, 3, 2, 2, 2, 34, 257, 3, 2, 2, 2, 36, 259, 3, 2, 2, 2, 38, 261, 3, 2, 2, 2, 40, 263, 3, 2, 2, 2, 42, 265, 3, 2, 2, 2, 44, 267, 3, 2, 2, 2, 46, 271, 3, 2, 2, 2, 48, 275, 3, 2, 2, 2, 50, 292, 3, 2, 2, 2, 52, 294, 3, 2, 2, 2, 54, 297, 3, 2, 2, 2, 56, 302, 3, 2, 2, 2, 58, 310, 3, 2, 2, 2, 60, 316, 3, 2, 2, 2, 62, 332, 3, 2, 2, 2, 64, 334, 3, 2, 2, 2, 66, 336, 3, 2, 2, 2, 68, 338, 3, 2, 2, 2, 70, 340, 3, 2, 2, 2, 72, 342, 3, 2, 2, 2, 74, 363, 3, 2, 2, 2, 76, 406, 3, 2, 2, 2, 78, 408, 3, 2, 2, 2, 80, 410, 3, 2, 2, 2, 82, 414, 3, 2, 2, 2, 84, 416, 3, 2, 2, 2, 86, 424, 3, 2, 2, 2, 88, 427, 3, 2, 2, 2, 90, 460, 3, 2, 2, 2, 92, 526, 3, 2, 2, 2, 94, 528, 3, 2, 2, 2, 96, 533, 3, 2, 2, 2, 98, 535, 3, 2, 2, 2, 100, 537, 3, 2, 2, 2, 102, 539, 3, 2, 2, 2, 104, 541, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, 3, 3, 2, 2, 2, 108, 110, 5, 6, 4, 2, 109, 108, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 114, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, 115, 5, 8, 5, 2, 115, 5, 3, 2, 2, 2, 116, 119, 5, 86, 44, 2, 117, 119, 5, 50, 26, 2, 118, 116, 3, 2, 2, 2, 118, 117, 3, 2, 2, 2, 119, 7, 3, 2, 2, 2, 120, 123, 5, 10, 6, 2, 121, 123, 5, 12, 7, 2, 122, 120, 3, 2, 2, 2, 122, 121, 3, 2, 2, 2, 123, 9, 3, 2, 2, 2, 124, 126, 7, 38, 2, 2, 125, 127, 7, 39, 2, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 140, 5, 90, 46, 2, 129, 131, 7, 38, 2, 2, 130, 132, 7, 39, 2, 2, 131, 130, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 13, 2, 2, 134, 135, 5, 12, 7, 2, 135, 136, 7, 14, 2, 2, 136, 140, 3, 2, 2, 2, 137, 138, 7, 38, 2, 2, 138, 140, 5, 92, 47, 2, 139, 124, 3, 2, 2, 2, 139, 129, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 11, 3, 2, 2, 2, 141, 142, 7, 37, 2, 2, 142, 145, 5, 14, 8, 2, 143, 144, 7, 10, 2, 2, 144, 146, 5, 16, 9, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 7, 58, 2, 2, 148, 152, 5, 18, 10, 2, 149, 151, 5, 20, 11, 2, 150, 149, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 46, 24, 2, 156, 155, 3, 2, 2, 2, 157, 160, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 161, 162, 5, 48, 25, 2, 162, 13, 3, 2, 2, 2, 163, 164, 7, 60, 2, 2, 164, 15, 3, 2, 2, 2, 165, 166, 7, 60, 2, 2, 166, 17, 3, 2, 2, 2, 167, 175, 5, 86, 44, 2, 168, 175, 5, 58, 30, 2, 169, 175, 5, 60, 31, 2, 170, 175, 5, 54, 28, 2, 171, 175, 5, 76, 39, 2, 172, 175, 5, 56, 29, 2, 173, 175, 5, 52, 27, 2, 174, 167, 3, 2, 2, 2, 174, 168, 3, 2, 2, 2, 174, 169, 3, 2, 2, 2, 174, 170, 3, 2, 2, 2, 174, 171, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 19, 3, 2, 2, 2, 176, 181, 5, 24, 13, 2, 177, 181, 5, 26, 14, 2, 178, 181, 5, 22, 12, 2, 179, 181, 5, 30, 16, 2, 180, 176, 3, 2, 2, 2, 180, 177, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 180, 179, 3, 2, 2, 2, 181, 21, 3, 2, 2, 2, 182, 183, 7, 40, 2, 2, 183, 184, 5, 90, 46, 2, 184, 23, 3, 2, 2, 2, 185, 186, 7, 42, 2, 2, 186, 189, 7, 63, 2, 2, 187, 188, 7, 10, 2, 2, 188, 190, 7, 63, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 25, 3, 2, 2, 2, 191, 192, 7, 41, 2, 2, 192, 197, 5, 28, 15, 2, 193, 194, 7, 10, 2, 2, 194, 196, 5, 28, 15, 2, 195, 193, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 27, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 202, 5, 90, 46, 2, 201, 203, 7, 45, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 29, 3, 2, 2, 2, 204, 205, 7, 44, 2, 2, 205, 206, 5, 32, 17, 2, 206, 207, 7, 33, 2, 2, 207, 208, 5, 90, 46, 2, 208, 254, 3, 2, 2, 2, 209, 210, 7, 44, 2, 2, 210, 211, 5, 32, 17, 2, 211, 212, 7, 33, 2, 2, 212, 213, 5, 90, 46, 2, 213, 214, 7, 49, 2, 2, 214, 215, 5, 34, 18, 2, 215, 254, 3, 2, 2, 2, 216, 217, 7, 44, 2, 2, 217, 218, 5, 32, 17, 2, 218, 219, 7, 33, 2, 2, 219, 220, 5, 90, 46, 2, 220, 221, 7, 49, 2, 2, 221, 222, 5, 34, 18, 2, 222, 223, 7, 50, 2, 2, 223, 224, 5, 36, 19, 2, 224, 254, 3, 2, 2, 2, 225, 226, 7, 44, 2, 2, 226, 227, 5, 32, 17, 2, 227, 228, 7, 33, 2, 2, 228, 229, 5, 90, 46, 2, 229, 230, 7, 51, 2, 2, 230, 231, 7, 52, 2, 2, 231, 232, 5, 38, 20, 2, 232, 254, 3, 2, 2, 2, 233, 234, 7, 44, 2, 2, 234, 235, 5, 32, 17, 2, 235, 236, 7, 33, 2, 2, 236, 237, 5, 90, 46, 2, 237, 238, 7, 55, 2, 2, 238, 239, 5, 40, 21, 2, 239, 240, 7, 33, 2, 2, 240, 241, 5, 42, 22, 2, 241, 254, 3, 2, 2, 2, 242, 243, 7, 44, 2, 2, 243, 244, 7, 55, 2, 2, 244, 245, 5, 40, 21, 2, 245, 246, 7, 33, 2, 2, 246, 247, 5, 42, 22, 2, 247, 254, 3, 2, 2, 2, 248, 249, 7, 44, 2, 2, 249, 250, 7, 51, 2, 2, 250, 251, 7, 52, 2, 2, 251, 252, 7, 49, 2, 2, 252, 254, 5, 38, 20, 2, 253, 204, 3, 2, 2, 2, 253, 209, 3, 2, 2, 2, 253, 216, 3, 2, 2, 2, 253, 225, 3, 2, 2, 2, 253, 233, 3, 2, 2, 2, 253, 242, 3, 2, 2, 2, 253, 248, 3, 2, 2, 2, 254, 31, 3, 2, 2, 2, 255, 256, 7, 60, 2, 2, 256, 33, 3, 2, 2, 2, 257, 258, 7, 60, 2, 2, 258, 35, 3, 2, 2, 2, 259, 260, 7, 60, 2, 2, 260, 37, 3, 2, 2, 2, 261, 262, 7, 60, 2, 2, 262, 39, 3, 2, 2, 2, 263, 264, 7, 60, 2, 2, 264, 41, 3, 2, 2, 2, 265, 266, 5, 90, 46, 2, 266, 43, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 45, 3, 2, 2, 2, 269, 272, 5, 50, 26, 2, 270, 272, 5, 86, 44, 2, 271, 269, 3, 2, 2, 2, 271, 270, 3, 2, 2, 2, 272, 47, 3, 2, 2, 2, 273, 276, 5, 10, 6, 2, 274, 276, 5, 12, 7, 2, 275, 273, 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, 276, 49, 3, 2, 2, 2, 277, 278, 7, 43, 2, 2, 278, 279, 7, 60, 2, 2, 279, 280, 7, 33, 2, 2, 280, 293, 5, 90, 46, 2, 281, 282, 7, 43, 2, 2, 282, 283, 7, 60, 2, 2, 283, 284, 7, 33, 2, 2, 284, 285, 7, 13, 2, 2, 285, 286, 5, 12, 7, 2, 286, 287, 7, 14, 2, 2, 287, 293, 3, 2, 2, 2, 288, 289, 7, 43, 2, 2, 289, 290, 7, 60, 2, 2, 290, 291, 7, 33, 2, 2, 291, 293, 5, 92, 47, 2, 292, 277, 3, 2, 2, 2, 292, 281, 3, 2, 2, 2, 292, 288, 3, 2, 2, 2, 293, 51, 3, 2, 2, 2, 294, 295, 7, 59, 2, 2, 295, 296, 7, 60, 2, 2, 296, 53, 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, 55, 3, 2, 2, 2, 299, 303, 5, 66, 34, 2, 300, 303, 5, 54, 28, 2, 301, 303, 5, 52, 27, 2, 302, 299, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 308, 7, 32, 2, 2, 305, 309, 5, 66, 34, 2, 306, 309, 5, 54, 28, 2, 307, 309, 5, 52, 27, 2, 308, 305, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 308, 307, 3, 2, 2, 2, 309, 57, 3, 2, 2, 2, 310, 312, 7, 11, 2, 2, 311, 313, 5, 72, 37, 2, 312, 311, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 7, 12, 2, 2, 315, 59, 3, 2, 2, 2, 316, 325, 7, 15, 2, 2, 317, 322, 5, 74, 38, 2, 318, 319, 7, 10, 2, 2, 319, 321, 5, 74, 38, 2, 320, 318, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 325, 317, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 328, 3, 2, 2, 2, 327, 329, 7, 10, 2, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 7, 16, 2, 2, 331, 61, 3, 2, 2, 2, 332, 333, 7, 48, 2, 2, 333, 63, 3, 2, 2, 2, 334, 335, 9, 2, 2, 2, 335, 65, 3, 2, 2, 2, 336, 337, 7, 63, 2, 2, 337, 67, 3, 2, 2, 2, 338, 339, 7, 64, 2, 2, 339, 69, 3, 2, 2, 2, 340, 341, 9, 3, 2, 2, 341, 71, 3, 2, 2, 2, 342, 351, 5, 90, 46, 2, 343, 345, 7, 10, 2, 2, 344, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 350, 5, 90, 46, 2, 349, 344, 3, 2, 2, 2, 350, 353, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 73, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 354, 355, 5, 82, 42, 2, 355, 356, 7, 7, 2, 2, 356, 357, 5, 90, 46, 2, 357, 364, 3, 2, 2, 2, 358, 359, 5, 80, 41, 2, 359, 360, 7, 7, 2, 2, 360, 361, 5, 90, 46, 2, 361, 364, 3, 2, 2, 2, 362, 364, 5, 78, 40, 2, 363, 354, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 363, 362, 3, 2, 2, 2, 364, 75, 3, 2, 2, 2, 365, 374, 7, 60, 2, 2, 366, 367, 7, 9, 2, 2, 367, 371, 5, 82, 42, 2, 368, 370, 5, 80, 41, 2, 369, 368, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 366, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 407, 3, 2, 2, 2, 378, 379, 7, 60, 2, 2, 379, 390, 5, 80, 41, 2, 380, 381, 7, 9, 2, 2, 381, 385, 5, 82, 42, 2, 382, 384, 5, 80, 41, 2, 383, 382, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 389, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 380, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 403, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 398, 5, 80, 41, 2, 394, 395, 7, 9, 2, 2, 395, 397, 5, 82, 42, 2, 396, 394, 3, 2, 2, 2, 397, 400, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 401, 393, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 407, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 365, 3, 2, 2, 2, 406, 378, 3, 2, 2, 2, 407, 77, 3, 2, 2, 2, 408, 409, 5, 54, 28, 2, 409, 79, 3, 2, 2, 2, 410, 411, 7, 11, 2, 2, 411, 412, 5, 90, 46, 2, 412, 413, 7, 12, 2, 2, 413, 81, 3, 2, 2, 2, 414, 415, 7, 60, 2, 2, 415, 83, 3, 2, 2, 2, 416, 421, 5, 90, 46, 2, 417, 418, 7, 10, 2, 2, 418, 420, 5, 90, 46, 2, 419, 417, 3, 2, 2, 2, 420, 423, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 85, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 424, 425, 7, 60, 2, 2, 425, 426, 5, 88, 45, 2, 426, 87, 3, 2, 2, 2, 427, 436, 7, 13, 2, 2, 428, 433, 5, 90, 46, 2, 429, 430, 7, 10, 2, 2, 430, 432, 5, 90, 46, 2, 431, 429, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 437, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 428, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 7, 14, 2, 2, 439, 89, 3, 2, 2, 2, 440, 441, 8, 46, 1, 2, 441, 442, 5, 104, 53, 2, 442, 443, 5, 90, 46, 22, 443, 461, 3, 2, 2, 2, 444, 461, 5, 86, 44, 2, 445, 446, 7, 13, 2, 2, 446, 447, 5, 84, 43, 2, 447, 448, 7, 14, 2, 2, 448, 461, 3, 2, 2, 2, 449, 461, 5, 56, 29, 2, 450, 461, 5, 64, 33, 2, 451, 461, 5, 66, 34, 2, 452, 461, 5, 68, 35, 2, 453, 461, 5, 62, 32, 2, 454, 461, 5, 58, 30, 2, 455, 461, 5, 60, 31, 2, 456, 461, 5, 54, 28, 2, 457, 461, 5, 76, 39, 2, 458, 461, 5, 70, 36, 2, 459, 461, 5, 52, 27, 2, 460, 440, 3, 2, 2, 2, 460, 444, 3, 2, 2, 2, 460, 445, 3, 2, 2, 2, 460, 449, 3, 2, 2, 2, 460, 450, 3, 2, 2, 2, 460, 451, 3, 2, 2, 2, 460, 452, 3, 2, 2, 2, 460, 453, 3, 2, 2, 2, 460, 454, 3, 2, 2, 2, 460, 455, 3, 2, 2, 2, 460, 456, 3, 2, 2, 2, 460, 457, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 460, 459, 3, 2, 2, 2, 461, 495, 3, 2, 2, 2, 462, 463, 12, 21, 2, 2, 463, 464, 5, 98, 50, 2, 464, 465, 5, 90, 46, 22, 465, 494, 3, 2, 2, 2, 466, 467, 12, 20, 2, 2, 467, 468, 5, 100, 51, 2, 468, 469, 5, 90, 46, 21, 469, 494, 3, 2, 2, 2, 470, 471, 12, 19, 2, 2, 471, 472, 5, 102, 52, 2, 472, 473, 5, 90, 46, 20, 473, 494, 3, 2, 2, 2, 474, 475, 12, 16, 2, 2, 475, 478, 5, 94, 48, 2, 476, 479, 5, 96, 49, 2, 477, 479, 5, 98, 50, 2, 478, 476, 3, 2, 2, 2, 478, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 481, 5, 90, 46, 17, 481, 494, 3, 2, 2, 2, 482, 483, 12, 15, 2, 2, 483, 484, 5, 96, 49, 2, 484, 485, 5, 90, 46, 16, 485, 494, 3, 2, 2, 2, 486, 487, 12, 14, 2, 2, 487, 489, 7, 34, 2, 2, 488, 490, 5, 90, 46, 2, 489, 488, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 7, 7, 2, 2, 492, 494, 5, 90, 46, 15, 493, 462, 3, 2, 2, 2, 493, 466, 3, 2, 2, 2, 493, 470, 3, 2, 2, 2, 493, 474, 3, 2, 2, 2, 493, 482, 3, 2, 2, 2, 493, 486, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 91, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 499, 5, 90, 46, 2, 499, 501, 7, 34, 2, 2, 500, 502, 5, 90, 46, 2, 501, 500, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 504, 7, 7, 2, 2, 504, 505, 7, 13, 2, 2, 505, 506, 5, 12, 7, 2, 506, 507, 7, 14, 2, 2, 507, 527, 3, 2, 2, 2, 508, 509, 5, 90, 46, 2, 509, 510, 7, 34, 2, 2, 510, 511, 7, 13, 2, 2, 511, 512, 5, 12, 7, 2, 512, 513, 7, 14, 2, 2, 513, 514, 7, 7, 2, 2, 514, 515, 5, 90, 46, 2, 515, 527, 3, 2, 2, 2, 516, 517, 5, 90, 46, 2, 517, 518, 7, 34, 2, 2, 518, 519, 7, 13, 2, 2, 519, 520, 5, 12, 7, 2, 520, 521, 7, 14, 2, 2, 521, 522, 7, 7, 2, 2, 522, 523, 7, 13, 2, 2, 523, 524, 5, 12, 7, 2, 524, 525, 7, 14, 2, 2, 525, 527, 3, 2, 2, 2, 526, 498, 3, 2, 2, 2, 526, 508, 3, 2, 2, 2, 526, 516, 3, 2, 2, 2, 527, 93, 3, 2, 2, 2, 528, 529, 9, 4, 2, 2, 529, 95, 3, 2, 2, 2, 530, 534, 7, 58, 2, 2, 531, 532, 7, 57, 2, 2, 532, 534, 7, 58, 2, 2, 533, 530, 3, 2, 2, 2, 533, 531, 3, 2, 2, 2, 534, 97, 3, 2, 2, 2, 535, 536, 9, 5, 2, 2, 536, 99, 3, 2, 2, 2, 537, 538, 9, 6, 2, 2, 538, 101, 3, 2, 2, 2, 539, 540, 9, 7, 2, 2, 540, 103, 3, 2, 2, 2, 541, 542, 9, 8, 2, 2, 542, 105, 3, 2, 2, 2, 47, 111, 118, 122, 126, 131, 139, 145, 152, 158, 174, 180, 189, 197, 202, 253, 271, 275, 292, 302, 308, 312, 322, 325, 328, 346, 351, 363, 371, 376, 385, 390, 398, 403, 406, 421, 433, 436, 460, 478, 489, 493, 495, 501, 526, 533] \ No newline at end of file diff --git a/pkg/parser/fql/FqlParser.tokens b/pkg/parser/fql/FqlParser.tokens index f01abdae..bc38f772 100644 --- a/pkg/parser/fql/FqlParser.tokens +++ b/pkg/parser/fql/FqlParser.tokens @@ -57,8 +57,9 @@ In=56 Param=57 Identifier=58 StringLiteral=59 -IntegerLiteral=60 -FloatLiteral=61 +TemplateStringLiteral=60 +IntegerLiteral=61 +FloatLiteral=62 ':'=5 ';'=6 '.'=7 diff --git a/pkg/parser/fql/fql_lexer.go b/pkg/parser/fql/fql_lexer.go index 68a5c779..091e3bff 100644 --- a/pkg/parser/fql/fql_lexer.go +++ b/pkg/parser/fql/fql_lexer.go @@ -14,7 +14,7 @@ var _ = fmt.Printf var _ = unicode.IsLetter var serializedLexerAtn = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 63, 506, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 64, 519, 8, 1, 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, @@ -28,218 +28,224 @@ var serializedLexerAtn = []uint16{ 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, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, - 70, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 146, 10, 2, 12, 2, 14, 2, 149, 11, 2, - 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 160, 10, 3, - 12, 3, 14, 3, 163, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 168, 10, 4, 13, 4, 14, - 4, 169, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, - 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, - 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, - 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, - 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, - 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, - 29, 235, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 241, 10, 30, 3, 31, - 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, - 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, - 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, - 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, - 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, - 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, - 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 313, 10, 44, 3, 45, 3, - 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, - 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, - 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 343, 10, 47, 3, 48, 3, 48, - 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, - 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, - 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, - 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, - 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 393, 10, 56, 3, 57, 3, 57, 3, 57, 3, - 58, 3, 58, 3, 59, 6, 59, 401, 10, 59, 13, 59, 14, 59, 402, 3, 59, 3, 59, - 7, 59, 407, 10, 59, 12, 59, 14, 59, 410, 11, 59, 7, 59, 412, 10, 59, 12, - 59, 14, 59, 415, 11, 59, 3, 59, 3, 59, 7, 59, 419, 10, 59, 12, 59, 14, - 59, 422, 11, 59, 7, 59, 424, 10, 59, 12, 59, 14, 59, 427, 11, 59, 3, 60, - 3, 60, 5, 60, 431, 10, 60, 3, 61, 6, 61, 434, 10, 61, 13, 61, 14, 61, 435, - 3, 62, 3, 62, 3, 62, 6, 62, 441, 10, 62, 13, 62, 14, 62, 442, 3, 62, 5, - 62, 446, 10, 62, 3, 62, 3, 62, 5, 62, 450, 10, 62, 5, 62, 452, 10, 62, - 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 7, 64, 459, 10, 64, 12, 64, 14, 64, - 462, 11, 64, 5, 64, 464, 10, 64, 3, 65, 3, 65, 5, 65, 468, 10, 65, 3, 65, - 6, 65, 471, 10, 65, 13, 65, 14, 65, 472, 3, 66, 3, 66, 3, 67, 3, 67, 3, - 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 487, 10, 69, - 12, 69, 14, 69, 490, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, - 3, 70, 3, 70, 7, 70, 500, 10, 70, 12, 70, 14, 70, 503, 11, 70, 3, 70, 3, - 70, 3, 147, 2, 71, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, - 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, - 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, - 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, - 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, - 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, - 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, - 63, 125, 2, 127, 2, 129, 2, 131, 2, 133, 2, 135, 2, 137, 2, 139, 2, 3, - 2, 12, 5, 2, 12, 12, 15, 15, 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, - 162, 162, 3, 2, 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 51, 59, 4, - 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, 124, 4, 2, - 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 2, 528, 2, 3, 3, 2, 2, 2, 2, 5, 3, - 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, - 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, - 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, - 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, - 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, - 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, - 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, - 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, - 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, - 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, - 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, - 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, - 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, - 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, - 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, - 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 3, 141, 3, 2, 2, 2, - 5, 155, 3, 2, 2, 2, 7, 167, 3, 2, 2, 2, 9, 173, 3, 2, 2, 2, 11, 177, 3, - 2, 2, 2, 13, 179, 3, 2, 2, 2, 15, 181, 3, 2, 2, 2, 17, 183, 3, 2, 2, 2, - 19, 185, 3, 2, 2, 2, 21, 187, 3, 2, 2, 2, 23, 189, 3, 2, 2, 2, 25, 191, - 3, 2, 2, 2, 27, 193, 3, 2, 2, 2, 29, 195, 3, 2, 2, 2, 31, 197, 3, 2, 2, - 2, 33, 199, 3, 2, 2, 2, 35, 201, 3, 2, 2, 2, 37, 204, 3, 2, 2, 2, 39, 207, - 3, 2, 2, 2, 41, 210, 3, 2, 2, 2, 43, 213, 3, 2, 2, 2, 45, 215, 3, 2, 2, - 2, 47, 217, 3, 2, 2, 2, 49, 220, 3, 2, 2, 2, 51, 223, 3, 2, 2, 2, 53, 225, - 3, 2, 2, 2, 55, 227, 3, 2, 2, 2, 57, 234, 3, 2, 2, 2, 59, 240, 3, 2, 2, - 2, 61, 242, 3, 2, 2, 2, 63, 245, 3, 2, 2, 2, 65, 247, 3, 2, 2, 2, 67, 249, - 3, 2, 2, 2, 69, 252, 3, 2, 2, 2, 71, 255, 3, 2, 2, 2, 73, 259, 3, 2, 2, - 2, 75, 266, 3, 2, 2, 2, 77, 275, 3, 2, 2, 2, 79, 282, 3, 2, 2, 2, 81, 287, - 3, 2, 2, 2, 83, 293, 3, 2, 2, 2, 85, 297, 3, 2, 2, 2, 87, 312, 3, 2, 2, - 2, 89, 314, 3, 2, 2, 2, 91, 319, 3, 2, 2, 2, 93, 342, 3, 2, 2, 2, 95, 344, - 3, 2, 2, 2, 97, 349, 3, 2, 2, 2, 99, 354, 3, 2, 2, 2, 101, 359, 3, 2, 2, - 2, 103, 365, 3, 2, 2, 2, 105, 369, 3, 2, 2, 2, 107, 373, 3, 2, 2, 2, 109, - 383, 3, 2, 2, 2, 111, 392, 3, 2, 2, 2, 113, 394, 3, 2, 2, 2, 115, 397, - 3, 2, 2, 2, 117, 400, 3, 2, 2, 2, 119, 430, 3, 2, 2, 2, 121, 433, 3, 2, - 2, 2, 123, 451, 3, 2, 2, 2, 125, 453, 3, 2, 2, 2, 127, 463, 3, 2, 2, 2, - 129, 465, 3, 2, 2, 2, 131, 474, 3, 2, 2, 2, 133, 476, 3, 2, 2, 2, 135, - 478, 3, 2, 2, 2, 137, 480, 3, 2, 2, 2, 139, 493, 3, 2, 2, 2, 141, 142, - 7, 49, 2, 2, 142, 143, 7, 44, 2, 2, 143, 147, 3, 2, 2, 2, 144, 146, 11, - 2, 2, 2, 145, 144, 3, 2, 2, 2, 146, 149, 3, 2, 2, 2, 147, 148, 3, 2, 2, - 2, 147, 145, 3, 2, 2, 2, 148, 150, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 150, - 151, 7, 44, 2, 2, 151, 152, 7, 49, 2, 2, 152, 153, 3, 2, 2, 2, 153, 154, - 8, 2, 2, 2, 154, 4, 3, 2, 2, 2, 155, 156, 7, 49, 2, 2, 156, 157, 7, 49, - 2, 2, 157, 161, 3, 2, 2, 2, 158, 160, 10, 2, 2, 2, 159, 158, 3, 2, 2, 2, - 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, - 164, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 165, 8, 3, 2, 2, 165, 6, 3, - 2, 2, 2, 166, 168, 9, 3, 2, 2, 167, 166, 3, 2, 2, 2, 168, 169, 3, 2, 2, - 2, 169, 167, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, - 172, 8, 4, 2, 2, 172, 8, 3, 2, 2, 2, 173, 174, 9, 2, 2, 2, 174, 175, 3, - 2, 2, 2, 175, 176, 8, 5, 2, 2, 176, 10, 3, 2, 2, 2, 177, 178, 7, 60, 2, - 2, 178, 12, 3, 2, 2, 2, 179, 180, 7, 61, 2, 2, 180, 14, 3, 2, 2, 2, 181, - 182, 7, 48, 2, 2, 182, 16, 3, 2, 2, 2, 183, 184, 7, 46, 2, 2, 184, 18, - 3, 2, 2, 2, 185, 186, 7, 93, 2, 2, 186, 20, 3, 2, 2, 2, 187, 188, 7, 95, - 2, 2, 188, 22, 3, 2, 2, 2, 189, 190, 7, 42, 2, 2, 190, 24, 3, 2, 2, 2, - 191, 192, 7, 43, 2, 2, 192, 26, 3, 2, 2, 2, 193, 194, 7, 125, 2, 2, 194, - 28, 3, 2, 2, 2, 195, 196, 7, 127, 2, 2, 196, 30, 3, 2, 2, 2, 197, 198, - 7, 64, 2, 2, 198, 32, 3, 2, 2, 2, 199, 200, 7, 62, 2, 2, 200, 34, 3, 2, - 2, 2, 201, 202, 7, 63, 2, 2, 202, 203, 7, 63, 2, 2, 203, 36, 3, 2, 2, 2, - 204, 205, 7, 64, 2, 2, 205, 206, 7, 63, 2, 2, 206, 38, 3, 2, 2, 2, 207, - 208, 7, 62, 2, 2, 208, 209, 7, 63, 2, 2, 209, 40, 3, 2, 2, 2, 210, 211, - 7, 35, 2, 2, 211, 212, 7, 63, 2, 2, 212, 42, 3, 2, 2, 2, 213, 214, 7, 45, - 2, 2, 214, 44, 3, 2, 2, 2, 215, 216, 7, 47, 2, 2, 216, 46, 3, 2, 2, 2, - 217, 218, 7, 47, 2, 2, 218, 219, 7, 47, 2, 2, 219, 48, 3, 2, 2, 2, 220, - 221, 7, 45, 2, 2, 221, 222, 7, 45, 2, 2, 222, 50, 3, 2, 2, 2, 223, 224, - 7, 44, 2, 2, 224, 52, 3, 2, 2, 2, 225, 226, 7, 49, 2, 2, 226, 54, 3, 2, - 2, 2, 227, 228, 7, 39, 2, 2, 228, 56, 3, 2, 2, 2, 229, 230, 7, 67, 2, 2, - 230, 231, 7, 80, 2, 2, 231, 235, 7, 70, 2, 2, 232, 233, 7, 40, 2, 2, 233, - 235, 7, 40, 2, 2, 234, 229, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 235, 58, - 3, 2, 2, 2, 236, 237, 7, 81, 2, 2, 237, 241, 7, 84, 2, 2, 238, 239, 7, - 126, 2, 2, 239, 241, 7, 126, 2, 2, 240, 236, 3, 2, 2, 2, 240, 238, 3, 2, - 2, 2, 241, 60, 3, 2, 2, 2, 242, 243, 5, 15, 8, 2, 243, 244, 5, 15, 8, 2, - 244, 62, 3, 2, 2, 2, 245, 246, 7, 63, 2, 2, 246, 64, 3, 2, 2, 2, 247, 248, - 7, 65, 2, 2, 248, 66, 3, 2, 2, 2, 249, 250, 7, 35, 2, 2, 250, 251, 7, 128, - 2, 2, 251, 68, 3, 2, 2, 2, 252, 253, 7, 63, 2, 2, 253, 254, 7, 128, 2, - 2, 254, 70, 3, 2, 2, 2, 255, 256, 7, 72, 2, 2, 256, 257, 7, 81, 2, 2, 257, - 258, 7, 84, 2, 2, 258, 72, 3, 2, 2, 2, 259, 260, 7, 84, 2, 2, 260, 261, - 7, 71, 2, 2, 261, 262, 7, 86, 2, 2, 262, 263, 7, 87, 2, 2, 263, 264, 7, - 84, 2, 2, 264, 265, 7, 80, 2, 2, 265, 74, 3, 2, 2, 2, 266, 267, 7, 70, - 2, 2, 267, 268, 7, 75, 2, 2, 268, 269, 7, 85, 2, 2, 269, 270, 7, 86, 2, - 2, 270, 271, 7, 75, 2, 2, 271, 272, 7, 80, 2, 2, 272, 273, 7, 69, 2, 2, - 273, 274, 7, 86, 2, 2, 274, 76, 3, 2, 2, 2, 275, 276, 7, 72, 2, 2, 276, - 277, 7, 75, 2, 2, 277, 278, 7, 78, 2, 2, 278, 279, 7, 86, 2, 2, 279, 280, - 7, 71, 2, 2, 280, 281, 7, 84, 2, 2, 281, 78, 3, 2, 2, 2, 282, 283, 7, 85, - 2, 2, 283, 284, 7, 81, 2, 2, 284, 285, 7, 84, 2, 2, 285, 286, 7, 86, 2, - 2, 286, 80, 3, 2, 2, 2, 287, 288, 7, 78, 2, 2, 288, 289, 7, 75, 2, 2, 289, - 290, 7, 79, 2, 2, 290, 291, 7, 75, 2, 2, 291, 292, 7, 86, 2, 2, 292, 82, - 3, 2, 2, 2, 293, 294, 7, 78, 2, 2, 294, 295, 7, 71, 2, 2, 295, 296, 7, - 86, 2, 2, 296, 84, 3, 2, 2, 2, 297, 298, 7, 69, 2, 2, 298, 299, 7, 81, - 2, 2, 299, 300, 7, 78, 2, 2, 300, 301, 7, 78, 2, 2, 301, 302, 7, 71, 2, - 2, 302, 303, 7, 69, 2, 2, 303, 304, 7, 86, 2, 2, 304, 86, 3, 2, 2, 2, 305, - 306, 7, 67, 2, 2, 306, 307, 7, 85, 2, 2, 307, 313, 7, 69, 2, 2, 308, 309, - 7, 70, 2, 2, 309, 310, 7, 71, 2, 2, 310, 311, 7, 85, 2, 2, 311, 313, 7, - 69, 2, 2, 312, 305, 3, 2, 2, 2, 312, 308, 3, 2, 2, 2, 313, 88, 3, 2, 2, - 2, 314, 315, 7, 80, 2, 2, 315, 316, 7, 81, 2, 2, 316, 317, 7, 80, 2, 2, - 317, 318, 7, 71, 2, 2, 318, 90, 3, 2, 2, 2, 319, 320, 7, 80, 2, 2, 320, - 321, 7, 87, 2, 2, 321, 322, 7, 78, 2, 2, 322, 323, 7, 78, 2, 2, 323, 92, - 3, 2, 2, 2, 324, 325, 7, 86, 2, 2, 325, 326, 7, 84, 2, 2, 326, 327, 7, - 87, 2, 2, 327, 343, 7, 71, 2, 2, 328, 329, 7, 118, 2, 2, 329, 330, 7, 116, - 2, 2, 330, 331, 7, 119, 2, 2, 331, 343, 7, 103, 2, 2, 332, 333, 7, 72, - 2, 2, 333, 334, 7, 67, 2, 2, 334, 335, 7, 78, 2, 2, 335, 336, 7, 85, 2, - 2, 336, 343, 7, 71, 2, 2, 337, 338, 7, 104, 2, 2, 338, 339, 7, 99, 2, 2, - 339, 340, 7, 110, 2, 2, 340, 341, 7, 117, 2, 2, 341, 343, 7, 103, 2, 2, - 342, 324, 3, 2, 2, 2, 342, 328, 3, 2, 2, 2, 342, 332, 3, 2, 2, 2, 342, - 337, 3, 2, 2, 2, 343, 94, 3, 2, 2, 2, 344, 345, 7, 75, 2, 2, 345, 346, - 7, 80, 2, 2, 346, 347, 7, 86, 2, 2, 347, 348, 7, 81, 2, 2, 348, 96, 3, - 2, 2, 2, 349, 350, 7, 77, 2, 2, 350, 351, 7, 71, 2, 2, 351, 352, 7, 71, - 2, 2, 352, 353, 7, 82, 2, 2, 353, 98, 3, 2, 2, 2, 354, 355, 7, 89, 2, 2, - 355, 356, 7, 75, 2, 2, 356, 357, 7, 86, 2, 2, 357, 358, 7, 74, 2, 2, 358, - 100, 3, 2, 2, 2, 359, 360, 7, 69, 2, 2, 360, 361, 7, 81, 2, 2, 361, 362, - 7, 87, 2, 2, 362, 363, 7, 80, 2, 2, 363, 364, 7, 86, 2, 2, 364, 102, 3, - 2, 2, 2, 365, 366, 7, 67, 2, 2, 366, 367, 7, 78, 2, 2, 367, 368, 7, 78, - 2, 2, 368, 104, 3, 2, 2, 2, 369, 370, 7, 67, 2, 2, 370, 371, 7, 80, 2, - 2, 371, 372, 7, 91, 2, 2, 372, 106, 3, 2, 2, 2, 373, 374, 7, 67, 2, 2, - 374, 375, 7, 73, 2, 2, 375, 376, 7, 73, 2, 2, 376, 377, 7, 84, 2, 2, 377, - 378, 7, 71, 2, 2, 378, 379, 7, 73, 2, 2, 379, 380, 7, 67, 2, 2, 380, 381, - 7, 86, 2, 2, 381, 382, 7, 71, 2, 2, 382, 108, 3, 2, 2, 2, 383, 384, 7, - 78, 2, 2, 384, 385, 7, 75, 2, 2, 385, 386, 7, 77, 2, 2, 386, 387, 7, 71, - 2, 2, 387, 110, 3, 2, 2, 2, 388, 389, 7, 80, 2, 2, 389, 390, 7, 81, 2, - 2, 390, 393, 7, 86, 2, 2, 391, 393, 7, 35, 2, 2, 392, 388, 3, 2, 2, 2, - 392, 391, 3, 2, 2, 2, 393, 112, 3, 2, 2, 2, 394, 395, 7, 75, 2, 2, 395, - 396, 7, 80, 2, 2, 396, 114, 3, 2, 2, 2, 397, 398, 7, 66, 2, 2, 398, 116, - 3, 2, 2, 2, 399, 401, 5, 131, 66, 2, 400, 399, 3, 2, 2, 2, 401, 402, 3, - 2, 2, 2, 402, 400, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 413, 3, 2, 2, - 2, 404, 408, 5, 133, 67, 2, 405, 407, 5, 117, 59, 2, 406, 405, 3, 2, 2, - 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, - 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 404, 3, 2, 2, 2, 412, 415, - 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 425, 3, 2, - 2, 2, 415, 413, 3, 2, 2, 2, 416, 420, 5, 135, 68, 2, 417, 419, 5, 117, - 59, 2, 418, 417, 3, 2, 2, 2, 419, 422, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, - 420, 421, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, - 416, 3, 2, 2, 2, 424, 427, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, - 3, 2, 2, 2, 426, 118, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 428, 431, 5, 139, - 70, 2, 429, 431, 5, 137, 69, 2, 430, 428, 3, 2, 2, 2, 430, 429, 3, 2, 2, - 2, 431, 120, 3, 2, 2, 2, 432, 434, 9, 4, 2, 2, 433, 432, 3, 2, 2, 2, 434, - 435, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 122, - 3, 2, 2, 2, 437, 438, 5, 127, 64, 2, 438, 440, 5, 15, 8, 2, 439, 441, 9, - 4, 2, 2, 440, 439, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 440, 3, 2, 2, - 2, 442, 443, 3, 2, 2, 2, 443, 445, 3, 2, 2, 2, 444, 446, 5, 129, 65, 2, - 445, 444, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 452, 3, 2, 2, 2, 447, - 449, 5, 127, 64, 2, 448, 450, 5, 129, 65, 2, 449, 448, 3, 2, 2, 2, 449, - 450, 3, 2, 2, 2, 450, 452, 3, 2, 2, 2, 451, 437, 3, 2, 2, 2, 451, 447, - 3, 2, 2, 2, 452, 124, 3, 2, 2, 2, 453, 454, 9, 5, 2, 2, 454, 126, 3, 2, - 2, 2, 455, 464, 7, 50, 2, 2, 456, 460, 9, 6, 2, 2, 457, 459, 9, 4, 2, 2, - 458, 457, 3, 2, 2, 2, 459, 462, 3, 2, 2, 2, 460, 458, 3, 2, 2, 2, 460, - 461, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 463, 455, - 3, 2, 2, 2, 463, 456, 3, 2, 2, 2, 464, 128, 3, 2, 2, 2, 465, 467, 9, 7, - 2, 2, 466, 468, 9, 8, 2, 2, 467, 466, 3, 2, 2, 2, 467, 468, 3, 2, 2, 2, - 468, 470, 3, 2, 2, 2, 469, 471, 9, 4, 2, 2, 470, 469, 3, 2, 2, 2, 471, - 472, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 130, - 3, 2, 2, 2, 474, 475, 9, 9, 2, 2, 475, 132, 3, 2, 2, 2, 476, 477, 7, 97, - 2, 2, 477, 134, 3, 2, 2, 2, 478, 479, 4, 50, 59, 2, 479, 136, 3, 2, 2, - 2, 480, 488, 7, 36, 2, 2, 481, 482, 7, 94, 2, 2, 482, 487, 11, 2, 2, 2, - 483, 484, 7, 36, 2, 2, 484, 487, 7, 36, 2, 2, 485, 487, 10, 10, 2, 2, 486, - 481, 3, 2, 2, 2, 486, 483, 3, 2, 2, 2, 486, 485, 3, 2, 2, 2, 487, 490, - 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 491, 3, 2, - 2, 2, 490, 488, 3, 2, 2, 2, 491, 492, 7, 36, 2, 2, 492, 138, 3, 2, 2, 2, - 493, 501, 7, 41, 2, 2, 494, 495, 7, 94, 2, 2, 495, 500, 11, 2, 2, 2, 496, - 497, 7, 41, 2, 2, 497, 500, 7, 41, 2, 2, 498, 500, 10, 11, 2, 2, 499, 494, - 3, 2, 2, 2, 499, 496, 3, 2, 2, 2, 499, 498, 3, 2, 2, 2, 500, 503, 3, 2, - 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 3, 2, 2, 2, - 503, 501, 3, 2, 2, 2, 504, 505, 7, 41, 2, 2, 505, 140, 3, 2, 2, 2, 30, - 2, 147, 161, 169, 234, 240, 312, 342, 392, 402, 408, 413, 420, 425, 430, - 435, 442, 445, 449, 451, 460, 463, 467, 472, 486, 488, 499, 501, 3, 2, - 3, 2, + 70, 4, 71, 9, 71, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 148, 10, 2, 12, 2, 14, + 2, 151, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 7, + 3, 162, 10, 3, 12, 3, 14, 3, 165, 11, 3, 3, 3, 3, 3, 3, 4, 6, 4, 170, 10, + 4, 13, 4, 14, 4, 171, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, + 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, + 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, + 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, + 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, + 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, + 29, 3, 29, 5, 29, 237, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 243, + 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, + 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, + 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, + 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, + 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, + 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, + 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 315, + 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, + 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, + 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 345, + 10, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, + 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, + 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, + 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, + 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 395, 10, 56, + 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 59, 6, 59, 403, 10, 59, 13, 59, 14, + 59, 404, 3, 59, 3, 59, 7, 59, 409, 10, 59, 12, 59, 14, 59, 412, 11, 59, + 7, 59, 414, 10, 59, 12, 59, 14, 59, 417, 11, 59, 3, 59, 3, 59, 7, 59, 421, + 10, 59, 12, 59, 14, 59, 424, 11, 59, 7, 59, 426, 10, 59, 12, 59, 14, 59, + 429, 11, 59, 3, 60, 3, 60, 5, 60, 433, 10, 60, 3, 61, 3, 61, 3, 61, 3, + 61, 7, 61, 439, 10, 61, 12, 61, 14, 61, 442, 11, 61, 3, 61, 3, 61, 3, 62, + 6, 62, 447, 10, 62, 13, 62, 14, 62, 448, 3, 63, 3, 63, 3, 63, 6, 63, 454, + 10, 63, 13, 63, 14, 63, 455, 3, 63, 5, 63, 459, 10, 63, 3, 63, 3, 63, 5, + 63, 463, 10, 63, 5, 63, 465, 10, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, + 7, 65, 472, 10, 65, 12, 65, 14, 65, 475, 11, 65, 5, 65, 477, 10, 65, 3, + 66, 3, 66, 5, 66, 481, 10, 66, 3, 66, 6, 66, 484, 10, 66, 13, 66, 14, 66, + 485, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, + 70, 3, 70, 3, 70, 7, 70, 500, 10, 70, 12, 70, 14, 70, 503, 11, 70, 3, 70, + 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 513, 10, 71, 12, + 71, 14, 71, 516, 11, 71, 3, 71, 3, 71, 3, 149, 2, 72, 3, 3, 5, 4, 7, 5, + 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, + 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, + 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, + 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, + 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, + 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, + 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 2, 129, 2, 131, 2, + 133, 2, 135, 2, 137, 2, 139, 2, 141, 2, 3, 2, 13, 5, 2, 12, 12, 15, 15, + 8234, 8235, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 3, 2, 98, 98, 3, 2, + 50, 59, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 51, 59, 4, 2, 71, 71, 103, + 103, 4, 2, 45, 45, 47, 47, 4, 2, 67, 92, 99, 124, 4, 2, 36, 36, 94, 94, + 4, 2, 41, 41, 94, 94, 2, 543, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, + 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, + 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, + 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, + 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, + 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, + 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, + 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, + 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, + 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, + 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, + 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, + 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, + 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, + 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, + 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, + 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 3, 143, 3, 2, + 2, 2, 5, 157, 3, 2, 2, 2, 7, 169, 3, 2, 2, 2, 9, 175, 3, 2, 2, 2, 11, 179, + 3, 2, 2, 2, 13, 181, 3, 2, 2, 2, 15, 183, 3, 2, 2, 2, 17, 185, 3, 2, 2, + 2, 19, 187, 3, 2, 2, 2, 21, 189, 3, 2, 2, 2, 23, 191, 3, 2, 2, 2, 25, 193, + 3, 2, 2, 2, 27, 195, 3, 2, 2, 2, 29, 197, 3, 2, 2, 2, 31, 199, 3, 2, 2, + 2, 33, 201, 3, 2, 2, 2, 35, 203, 3, 2, 2, 2, 37, 206, 3, 2, 2, 2, 39, 209, + 3, 2, 2, 2, 41, 212, 3, 2, 2, 2, 43, 215, 3, 2, 2, 2, 45, 217, 3, 2, 2, + 2, 47, 219, 3, 2, 2, 2, 49, 222, 3, 2, 2, 2, 51, 225, 3, 2, 2, 2, 53, 227, + 3, 2, 2, 2, 55, 229, 3, 2, 2, 2, 57, 236, 3, 2, 2, 2, 59, 242, 3, 2, 2, + 2, 61, 244, 3, 2, 2, 2, 63, 247, 3, 2, 2, 2, 65, 249, 3, 2, 2, 2, 67, 251, + 3, 2, 2, 2, 69, 254, 3, 2, 2, 2, 71, 257, 3, 2, 2, 2, 73, 261, 3, 2, 2, + 2, 75, 268, 3, 2, 2, 2, 77, 277, 3, 2, 2, 2, 79, 284, 3, 2, 2, 2, 81, 289, + 3, 2, 2, 2, 83, 295, 3, 2, 2, 2, 85, 299, 3, 2, 2, 2, 87, 314, 3, 2, 2, + 2, 89, 316, 3, 2, 2, 2, 91, 321, 3, 2, 2, 2, 93, 344, 3, 2, 2, 2, 95, 346, + 3, 2, 2, 2, 97, 351, 3, 2, 2, 2, 99, 356, 3, 2, 2, 2, 101, 361, 3, 2, 2, + 2, 103, 367, 3, 2, 2, 2, 105, 371, 3, 2, 2, 2, 107, 375, 3, 2, 2, 2, 109, + 385, 3, 2, 2, 2, 111, 394, 3, 2, 2, 2, 113, 396, 3, 2, 2, 2, 115, 399, + 3, 2, 2, 2, 117, 402, 3, 2, 2, 2, 119, 432, 3, 2, 2, 2, 121, 434, 3, 2, + 2, 2, 123, 446, 3, 2, 2, 2, 125, 464, 3, 2, 2, 2, 127, 466, 3, 2, 2, 2, + 129, 476, 3, 2, 2, 2, 131, 478, 3, 2, 2, 2, 133, 487, 3, 2, 2, 2, 135, + 489, 3, 2, 2, 2, 137, 491, 3, 2, 2, 2, 139, 493, 3, 2, 2, 2, 141, 506, + 3, 2, 2, 2, 143, 144, 7, 49, 2, 2, 144, 145, 7, 44, 2, 2, 145, 149, 3, + 2, 2, 2, 146, 148, 11, 2, 2, 2, 147, 146, 3, 2, 2, 2, 148, 151, 3, 2, 2, + 2, 149, 150, 3, 2, 2, 2, 149, 147, 3, 2, 2, 2, 150, 152, 3, 2, 2, 2, 151, + 149, 3, 2, 2, 2, 152, 153, 7, 44, 2, 2, 153, 154, 7, 49, 2, 2, 154, 155, + 3, 2, 2, 2, 155, 156, 8, 2, 2, 2, 156, 4, 3, 2, 2, 2, 157, 158, 7, 49, + 2, 2, 158, 159, 7, 49, 2, 2, 159, 163, 3, 2, 2, 2, 160, 162, 10, 2, 2, + 2, 161, 160, 3, 2, 2, 2, 162, 165, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 163, + 164, 3, 2, 2, 2, 164, 166, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 166, 167, + 8, 3, 2, 2, 167, 6, 3, 2, 2, 2, 168, 170, 9, 3, 2, 2, 169, 168, 3, 2, 2, + 2, 170, 171, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, + 173, 3, 2, 2, 2, 173, 174, 8, 4, 2, 2, 174, 8, 3, 2, 2, 2, 175, 176, 9, + 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 8, 5, 2, 2, 178, 10, 3, 2, 2, + 2, 179, 180, 7, 60, 2, 2, 180, 12, 3, 2, 2, 2, 181, 182, 7, 61, 2, 2, 182, + 14, 3, 2, 2, 2, 183, 184, 7, 48, 2, 2, 184, 16, 3, 2, 2, 2, 185, 186, 7, + 46, 2, 2, 186, 18, 3, 2, 2, 2, 187, 188, 7, 93, 2, 2, 188, 20, 3, 2, 2, + 2, 189, 190, 7, 95, 2, 2, 190, 22, 3, 2, 2, 2, 191, 192, 7, 42, 2, 2, 192, + 24, 3, 2, 2, 2, 193, 194, 7, 43, 2, 2, 194, 26, 3, 2, 2, 2, 195, 196, 7, + 125, 2, 2, 196, 28, 3, 2, 2, 2, 197, 198, 7, 127, 2, 2, 198, 30, 3, 2, + 2, 2, 199, 200, 7, 64, 2, 2, 200, 32, 3, 2, 2, 2, 201, 202, 7, 62, 2, 2, + 202, 34, 3, 2, 2, 2, 203, 204, 7, 63, 2, 2, 204, 205, 7, 63, 2, 2, 205, + 36, 3, 2, 2, 2, 206, 207, 7, 64, 2, 2, 207, 208, 7, 63, 2, 2, 208, 38, + 3, 2, 2, 2, 209, 210, 7, 62, 2, 2, 210, 211, 7, 63, 2, 2, 211, 40, 3, 2, + 2, 2, 212, 213, 7, 35, 2, 2, 213, 214, 7, 63, 2, 2, 214, 42, 3, 2, 2, 2, + 215, 216, 7, 45, 2, 2, 216, 44, 3, 2, 2, 2, 217, 218, 7, 47, 2, 2, 218, + 46, 3, 2, 2, 2, 219, 220, 7, 47, 2, 2, 220, 221, 7, 47, 2, 2, 221, 48, + 3, 2, 2, 2, 222, 223, 7, 45, 2, 2, 223, 224, 7, 45, 2, 2, 224, 50, 3, 2, + 2, 2, 225, 226, 7, 44, 2, 2, 226, 52, 3, 2, 2, 2, 227, 228, 7, 49, 2, 2, + 228, 54, 3, 2, 2, 2, 229, 230, 7, 39, 2, 2, 230, 56, 3, 2, 2, 2, 231, 232, + 7, 67, 2, 2, 232, 233, 7, 80, 2, 2, 233, 237, 7, 70, 2, 2, 234, 235, 7, + 40, 2, 2, 235, 237, 7, 40, 2, 2, 236, 231, 3, 2, 2, 2, 236, 234, 3, 2, + 2, 2, 237, 58, 3, 2, 2, 2, 238, 239, 7, 81, 2, 2, 239, 243, 7, 84, 2, 2, + 240, 241, 7, 126, 2, 2, 241, 243, 7, 126, 2, 2, 242, 238, 3, 2, 2, 2, 242, + 240, 3, 2, 2, 2, 243, 60, 3, 2, 2, 2, 244, 245, 5, 15, 8, 2, 245, 246, + 5, 15, 8, 2, 246, 62, 3, 2, 2, 2, 247, 248, 7, 63, 2, 2, 248, 64, 3, 2, + 2, 2, 249, 250, 7, 65, 2, 2, 250, 66, 3, 2, 2, 2, 251, 252, 7, 35, 2, 2, + 252, 253, 7, 128, 2, 2, 253, 68, 3, 2, 2, 2, 254, 255, 7, 63, 2, 2, 255, + 256, 7, 128, 2, 2, 256, 70, 3, 2, 2, 2, 257, 258, 7, 72, 2, 2, 258, 259, + 7, 81, 2, 2, 259, 260, 7, 84, 2, 2, 260, 72, 3, 2, 2, 2, 261, 262, 7, 84, + 2, 2, 262, 263, 7, 71, 2, 2, 263, 264, 7, 86, 2, 2, 264, 265, 7, 87, 2, + 2, 265, 266, 7, 84, 2, 2, 266, 267, 7, 80, 2, 2, 267, 74, 3, 2, 2, 2, 268, + 269, 7, 70, 2, 2, 269, 270, 7, 75, 2, 2, 270, 271, 7, 85, 2, 2, 271, 272, + 7, 86, 2, 2, 272, 273, 7, 75, 2, 2, 273, 274, 7, 80, 2, 2, 274, 275, 7, + 69, 2, 2, 275, 276, 7, 86, 2, 2, 276, 76, 3, 2, 2, 2, 277, 278, 7, 72, + 2, 2, 278, 279, 7, 75, 2, 2, 279, 280, 7, 78, 2, 2, 280, 281, 7, 86, 2, + 2, 281, 282, 7, 71, 2, 2, 282, 283, 7, 84, 2, 2, 283, 78, 3, 2, 2, 2, 284, + 285, 7, 85, 2, 2, 285, 286, 7, 81, 2, 2, 286, 287, 7, 84, 2, 2, 287, 288, + 7, 86, 2, 2, 288, 80, 3, 2, 2, 2, 289, 290, 7, 78, 2, 2, 290, 291, 7, 75, + 2, 2, 291, 292, 7, 79, 2, 2, 292, 293, 7, 75, 2, 2, 293, 294, 7, 86, 2, + 2, 294, 82, 3, 2, 2, 2, 295, 296, 7, 78, 2, 2, 296, 297, 7, 71, 2, 2, 297, + 298, 7, 86, 2, 2, 298, 84, 3, 2, 2, 2, 299, 300, 7, 69, 2, 2, 300, 301, + 7, 81, 2, 2, 301, 302, 7, 78, 2, 2, 302, 303, 7, 78, 2, 2, 303, 304, 7, + 71, 2, 2, 304, 305, 7, 69, 2, 2, 305, 306, 7, 86, 2, 2, 306, 86, 3, 2, + 2, 2, 307, 308, 7, 67, 2, 2, 308, 309, 7, 85, 2, 2, 309, 315, 7, 69, 2, + 2, 310, 311, 7, 70, 2, 2, 311, 312, 7, 71, 2, 2, 312, 313, 7, 85, 2, 2, + 313, 315, 7, 69, 2, 2, 314, 307, 3, 2, 2, 2, 314, 310, 3, 2, 2, 2, 315, + 88, 3, 2, 2, 2, 316, 317, 7, 80, 2, 2, 317, 318, 7, 81, 2, 2, 318, 319, + 7, 80, 2, 2, 319, 320, 7, 71, 2, 2, 320, 90, 3, 2, 2, 2, 321, 322, 7, 80, + 2, 2, 322, 323, 7, 87, 2, 2, 323, 324, 7, 78, 2, 2, 324, 325, 7, 78, 2, + 2, 325, 92, 3, 2, 2, 2, 326, 327, 7, 86, 2, 2, 327, 328, 7, 84, 2, 2, 328, + 329, 7, 87, 2, 2, 329, 345, 7, 71, 2, 2, 330, 331, 7, 118, 2, 2, 331, 332, + 7, 116, 2, 2, 332, 333, 7, 119, 2, 2, 333, 345, 7, 103, 2, 2, 334, 335, + 7, 72, 2, 2, 335, 336, 7, 67, 2, 2, 336, 337, 7, 78, 2, 2, 337, 338, 7, + 85, 2, 2, 338, 345, 7, 71, 2, 2, 339, 340, 7, 104, 2, 2, 340, 341, 7, 99, + 2, 2, 341, 342, 7, 110, 2, 2, 342, 343, 7, 117, 2, 2, 343, 345, 7, 103, + 2, 2, 344, 326, 3, 2, 2, 2, 344, 330, 3, 2, 2, 2, 344, 334, 3, 2, 2, 2, + 344, 339, 3, 2, 2, 2, 345, 94, 3, 2, 2, 2, 346, 347, 7, 75, 2, 2, 347, + 348, 7, 80, 2, 2, 348, 349, 7, 86, 2, 2, 349, 350, 7, 81, 2, 2, 350, 96, + 3, 2, 2, 2, 351, 352, 7, 77, 2, 2, 352, 353, 7, 71, 2, 2, 353, 354, 7, + 71, 2, 2, 354, 355, 7, 82, 2, 2, 355, 98, 3, 2, 2, 2, 356, 357, 7, 89, + 2, 2, 357, 358, 7, 75, 2, 2, 358, 359, 7, 86, 2, 2, 359, 360, 7, 74, 2, + 2, 360, 100, 3, 2, 2, 2, 361, 362, 7, 69, 2, 2, 362, 363, 7, 81, 2, 2, + 363, 364, 7, 87, 2, 2, 364, 365, 7, 80, 2, 2, 365, 366, 7, 86, 2, 2, 366, + 102, 3, 2, 2, 2, 367, 368, 7, 67, 2, 2, 368, 369, 7, 78, 2, 2, 369, 370, + 7, 78, 2, 2, 370, 104, 3, 2, 2, 2, 371, 372, 7, 67, 2, 2, 372, 373, 7, + 80, 2, 2, 373, 374, 7, 91, 2, 2, 374, 106, 3, 2, 2, 2, 375, 376, 7, 67, + 2, 2, 376, 377, 7, 73, 2, 2, 377, 378, 7, 73, 2, 2, 378, 379, 7, 84, 2, + 2, 379, 380, 7, 71, 2, 2, 380, 381, 7, 73, 2, 2, 381, 382, 7, 67, 2, 2, + 382, 383, 7, 86, 2, 2, 383, 384, 7, 71, 2, 2, 384, 108, 3, 2, 2, 2, 385, + 386, 7, 78, 2, 2, 386, 387, 7, 75, 2, 2, 387, 388, 7, 77, 2, 2, 388, 389, + 7, 71, 2, 2, 389, 110, 3, 2, 2, 2, 390, 391, 7, 80, 2, 2, 391, 392, 7, + 81, 2, 2, 392, 395, 7, 86, 2, 2, 393, 395, 7, 35, 2, 2, 394, 390, 3, 2, + 2, 2, 394, 393, 3, 2, 2, 2, 395, 112, 3, 2, 2, 2, 396, 397, 7, 75, 2, 2, + 397, 398, 7, 80, 2, 2, 398, 114, 3, 2, 2, 2, 399, 400, 7, 66, 2, 2, 400, + 116, 3, 2, 2, 2, 401, 403, 5, 133, 67, 2, 402, 401, 3, 2, 2, 2, 403, 404, + 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 415, 3, 2, + 2, 2, 406, 410, 5, 135, 68, 2, 407, 409, 5, 117, 59, 2, 408, 407, 3, 2, + 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, + 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 406, 3, 2, 2, 2, 414, + 417, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 427, + 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 418, 422, 5, 137, 69, 2, 419, 421, 5, + 117, 59, 2, 420, 419, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 420, 3, 2, + 2, 2, 422, 423, 3, 2, 2, 2, 423, 426, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, + 425, 418, 3, 2, 2, 2, 426, 429, 3, 2, 2, 2, 427, 425, 3, 2, 2, 2, 427, + 428, 3, 2, 2, 2, 428, 118, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 433, + 5, 141, 71, 2, 431, 433, 5, 139, 70, 2, 432, 430, 3, 2, 2, 2, 432, 431, + 3, 2, 2, 2, 433, 120, 3, 2, 2, 2, 434, 440, 7, 98, 2, 2, 435, 436, 7, 94, + 2, 2, 436, 439, 7, 98, 2, 2, 437, 439, 10, 4, 2, 2, 438, 435, 3, 2, 2, + 2, 438, 437, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, + 441, 3, 2, 2, 2, 441, 443, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 444, + 7, 98, 2, 2, 444, 122, 3, 2, 2, 2, 445, 447, 9, 5, 2, 2, 446, 445, 3, 2, + 2, 2, 447, 448, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, + 449, 124, 3, 2, 2, 2, 450, 451, 5, 129, 65, 2, 451, 453, 5, 15, 8, 2, 452, + 454, 9, 5, 2, 2, 453, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 453, + 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 458, 3, 2, 2, 2, 457, 459, 5, 131, + 66, 2, 458, 457, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 465, 3, 2, 2, 2, + 460, 462, 5, 129, 65, 2, 461, 463, 5, 131, 66, 2, 462, 461, 3, 2, 2, 2, + 462, 463, 3, 2, 2, 2, 463, 465, 3, 2, 2, 2, 464, 450, 3, 2, 2, 2, 464, + 460, 3, 2, 2, 2, 465, 126, 3, 2, 2, 2, 466, 467, 9, 6, 2, 2, 467, 128, + 3, 2, 2, 2, 468, 477, 7, 50, 2, 2, 469, 473, 9, 7, 2, 2, 470, 472, 9, 5, + 2, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, + 473, 474, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, + 468, 3, 2, 2, 2, 476, 469, 3, 2, 2, 2, 477, 130, 3, 2, 2, 2, 478, 480, + 9, 8, 2, 2, 479, 481, 9, 9, 2, 2, 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, + 2, 2, 481, 483, 3, 2, 2, 2, 482, 484, 9, 5, 2, 2, 483, 482, 3, 2, 2, 2, + 484, 485, 3, 2, 2, 2, 485, 483, 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, + 132, 3, 2, 2, 2, 487, 488, 9, 10, 2, 2, 488, 134, 3, 2, 2, 2, 489, 490, + 7, 97, 2, 2, 490, 136, 3, 2, 2, 2, 491, 492, 4, 50, 59, 2, 492, 138, 3, + 2, 2, 2, 493, 501, 7, 36, 2, 2, 494, 495, 7, 94, 2, 2, 495, 500, 11, 2, + 2, 2, 496, 497, 7, 36, 2, 2, 497, 500, 7, 36, 2, 2, 498, 500, 10, 11, 2, + 2, 499, 494, 3, 2, 2, 2, 499, 496, 3, 2, 2, 2, 499, 498, 3, 2, 2, 2, 500, + 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, + 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 505, 7, 36, 2, 2, 505, 140, 3, 2, + 2, 2, 506, 514, 7, 41, 2, 2, 507, 508, 7, 94, 2, 2, 508, 513, 11, 2, 2, + 2, 509, 510, 7, 41, 2, 2, 510, 513, 7, 41, 2, 2, 511, 513, 10, 12, 2, 2, + 512, 507, 3, 2, 2, 2, 512, 509, 3, 2, 2, 2, 512, 511, 3, 2, 2, 2, 513, + 516, 3, 2, 2, 2, 514, 512, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, + 3, 2, 2, 2, 516, 514, 3, 2, 2, 2, 517, 518, 7, 41, 2, 2, 518, 142, 3, 2, + 2, 2, 32, 2, 149, 163, 171, 236, 242, 314, 344, 394, 404, 410, 415, 422, + 427, 432, 438, 440, 448, 455, 458, 462, 464, 473, 476, 480, 485, 499, 501, + 512, 514, 3, 2, 3, 2, } var lexerDeserializer = antlr.NewATNDeserializer(nil) @@ -271,7 +277,7 @@ var lexerSymbolicNames = []string{ "For", "Return", "Distinct", "Filter", "Sort", "Limit", "Let", "Collect", "SortDirection", "None", "Null", "BooleanLiteral", "Into", "Keep", "With", "Count", "All", "Any", "Aggregate", "Like", "Not", "In", "Param", "Identifier", - "StringLiteral", "IntegerLiteral", "FloatLiteral", + "StringLiteral", "TemplateStringLiteral", "IntegerLiteral", "FloatLiteral", } var lexerRuleNames = []string{ @@ -283,8 +289,9 @@ var lexerRuleNames = []string{ "For", "Return", "Distinct", "Filter", "Sort", "Limit", "Let", "Collect", "SortDirection", "None", "Null", "BooleanLiteral", "Into", "Keep", "With", "Count", "All", "Any", "Aggregate", "Like", "Not", "In", "Param", "Identifier", - "StringLiteral", "IntegerLiteral", "FloatLiteral", "HexDigit", "DecimalIntegerLiteral", - "ExponentPart", "Letter", "Symbols", "Digit", "DQSring", "SQString", + "StringLiteral", "TemplateStringLiteral", "IntegerLiteral", "FloatLiteral", + "HexDigit", "DecimalIntegerLiteral", "ExponentPart", "Letter", "Symbols", + "Digit", "DQSring", "SQString", } type FqlLexer struct { @@ -322,65 +329,66 @@ func NewFqlLexer(input antlr.CharStream) *FqlLexer { // FqlLexer tokens. const ( - FqlLexerMultiLineComment = 1 - FqlLexerSingleLineComment = 2 - FqlLexerWhiteSpaces = 3 - FqlLexerLineTerminator = 4 - FqlLexerColon = 5 - FqlLexerSemiColon = 6 - FqlLexerDot = 7 - FqlLexerComma = 8 - FqlLexerOpenBracket = 9 - FqlLexerCloseBracket = 10 - FqlLexerOpenParen = 11 - FqlLexerCloseParen = 12 - FqlLexerOpenBrace = 13 - FqlLexerCloseBrace = 14 - FqlLexerGt = 15 - FqlLexerLt = 16 - FqlLexerEq = 17 - FqlLexerGte = 18 - FqlLexerLte = 19 - FqlLexerNeq = 20 - FqlLexerPlus = 21 - FqlLexerMinus = 22 - FqlLexerMinusMinus = 23 - FqlLexerPlusPlus = 24 - FqlLexerMulti = 25 - FqlLexerDiv = 26 - FqlLexerMod = 27 - FqlLexerAnd = 28 - FqlLexerOr = 29 - FqlLexerRange = 30 - FqlLexerAssign = 31 - FqlLexerQuestionMark = 32 - FqlLexerRegexNotMatch = 33 - FqlLexerRegexMatch = 34 - FqlLexerFor = 35 - FqlLexerReturn = 36 - FqlLexerDistinct = 37 - FqlLexerFilter = 38 - FqlLexerSort = 39 - FqlLexerLimit = 40 - FqlLexerLet = 41 - FqlLexerCollect = 42 - FqlLexerSortDirection = 43 - FqlLexerNone = 44 - FqlLexerNull = 45 - FqlLexerBooleanLiteral = 46 - FqlLexerInto = 47 - FqlLexerKeep = 48 - FqlLexerWith = 49 - FqlLexerCount = 50 - FqlLexerAll = 51 - FqlLexerAny = 52 - FqlLexerAggregate = 53 - FqlLexerLike = 54 - FqlLexerNot = 55 - FqlLexerIn = 56 - FqlLexerParam = 57 - FqlLexerIdentifier = 58 - FqlLexerStringLiteral = 59 - FqlLexerIntegerLiteral = 60 - FqlLexerFloatLiteral = 61 + FqlLexerMultiLineComment = 1 + FqlLexerSingleLineComment = 2 + FqlLexerWhiteSpaces = 3 + FqlLexerLineTerminator = 4 + FqlLexerColon = 5 + FqlLexerSemiColon = 6 + FqlLexerDot = 7 + FqlLexerComma = 8 + FqlLexerOpenBracket = 9 + FqlLexerCloseBracket = 10 + FqlLexerOpenParen = 11 + FqlLexerCloseParen = 12 + FqlLexerOpenBrace = 13 + FqlLexerCloseBrace = 14 + FqlLexerGt = 15 + FqlLexerLt = 16 + FqlLexerEq = 17 + FqlLexerGte = 18 + FqlLexerLte = 19 + FqlLexerNeq = 20 + FqlLexerPlus = 21 + FqlLexerMinus = 22 + FqlLexerMinusMinus = 23 + FqlLexerPlusPlus = 24 + FqlLexerMulti = 25 + FqlLexerDiv = 26 + FqlLexerMod = 27 + FqlLexerAnd = 28 + FqlLexerOr = 29 + FqlLexerRange = 30 + FqlLexerAssign = 31 + FqlLexerQuestionMark = 32 + FqlLexerRegexNotMatch = 33 + FqlLexerRegexMatch = 34 + FqlLexerFor = 35 + FqlLexerReturn = 36 + FqlLexerDistinct = 37 + FqlLexerFilter = 38 + FqlLexerSort = 39 + FqlLexerLimit = 40 + FqlLexerLet = 41 + FqlLexerCollect = 42 + FqlLexerSortDirection = 43 + FqlLexerNone = 44 + FqlLexerNull = 45 + FqlLexerBooleanLiteral = 46 + FqlLexerInto = 47 + FqlLexerKeep = 48 + FqlLexerWith = 49 + FqlLexerCount = 50 + FqlLexerAll = 51 + FqlLexerAny = 52 + FqlLexerAggregate = 53 + FqlLexerLike = 54 + FqlLexerNot = 55 + FqlLexerIn = 56 + FqlLexerParam = 57 + FqlLexerIdentifier = 58 + FqlLexerStringLiteral = 59 + FqlLexerTemplateStringLiteral = 60 + FqlLexerIntegerLiteral = 61 + FqlLexerFloatLiteral = 62 ) diff --git a/pkg/parser/fql/fql_parser.go b/pkg/parser/fql/fql_parser.go index e95242bb..bbb74bf6 100644 --- a/pkg/parser/fql/fql_parser.go +++ b/pkg/parser/fql/fql_parser.go @@ -15,7 +15,7 @@ var _ = reflect.Copy var _ = strconv.Itoa var parserATN = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 63, 550, + 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 64, 544, 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, @@ -63,203 +63,200 @@ var parserATN = []uint16{ 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 432, 10, 45, 12, 45, 14, 45, 435, 11, 45, 5, 45, 437, 10, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, - 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, - 464, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, - 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 481, 10, 46, 3, 46, - 3, 46, 5, 46, 485, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 491, 10, - 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 499, 10, 46, 3, 46, - 3, 46, 7, 46, 503, 10, 46, 12, 46, 14, 46, 506, 11, 46, 3, 47, 3, 47, 3, - 47, 5, 47, 511, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, - 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, - 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 536, 10, 47, 3, 48, 3, 48, - 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, - 53, 2, 3, 90, 54, 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, 2, 8, 3, 2, 46, 47, 4, 2, 46, 46, 53, 54, 3, 2, 17, 22, 3, 2, 30, - 31, 4, 2, 23, 24, 27, 29, 4, 2, 23, 24, 56, 57, 2, 579, 2, 106, 3, 2, 2, - 2, 4, 111, 3, 2, 2, 2, 6, 118, 3, 2, 2, 2, 8, 122, 3, 2, 2, 2, 10, 139, - 3, 2, 2, 2, 12, 141, 3, 2, 2, 2, 14, 163, 3, 2, 2, 2, 16, 165, 3, 2, 2, - 2, 18, 174, 3, 2, 2, 2, 20, 180, 3, 2, 2, 2, 22, 182, 3, 2, 2, 2, 24, 185, - 3, 2, 2, 2, 26, 191, 3, 2, 2, 2, 28, 200, 3, 2, 2, 2, 30, 253, 3, 2, 2, - 2, 32, 255, 3, 2, 2, 2, 34, 257, 3, 2, 2, 2, 36, 259, 3, 2, 2, 2, 38, 261, - 3, 2, 2, 2, 40, 263, 3, 2, 2, 2, 42, 265, 3, 2, 2, 2, 44, 267, 3, 2, 2, - 2, 46, 271, 3, 2, 2, 2, 48, 275, 3, 2, 2, 2, 50, 292, 3, 2, 2, 2, 52, 294, - 3, 2, 2, 2, 54, 297, 3, 2, 2, 2, 56, 302, 3, 2, 2, 2, 58, 310, 3, 2, 2, - 2, 60, 316, 3, 2, 2, 2, 62, 332, 3, 2, 2, 2, 64, 334, 3, 2, 2, 2, 66, 336, - 3, 2, 2, 2, 68, 338, 3, 2, 2, 2, 70, 340, 3, 2, 2, 2, 72, 342, 3, 2, 2, - 2, 74, 363, 3, 2, 2, 2, 76, 406, 3, 2, 2, 2, 78, 408, 3, 2, 2, 2, 80, 410, - 3, 2, 2, 2, 82, 414, 3, 2, 2, 2, 84, 416, 3, 2, 2, 2, 86, 424, 3, 2, 2, - 2, 88, 427, 3, 2, 2, 2, 90, 463, 3, 2, 2, 2, 92, 535, 3, 2, 2, 2, 94, 537, - 3, 2, 2, 2, 96, 539, 3, 2, 2, 2, 98, 541, 3, 2, 2, 2, 100, 543, 3, 2, 2, - 2, 102, 545, 3, 2, 2, 2, 104, 547, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, - 3, 3, 2, 2, 2, 108, 110, 5, 6, 4, 2, 109, 108, 3, 2, 2, 2, 110, 113, 3, - 2, 2, 2, 111, 109, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 114, 3, 2, 2, - 2, 113, 111, 3, 2, 2, 2, 114, 115, 5, 8, 5, 2, 115, 5, 3, 2, 2, 2, 116, - 119, 5, 86, 44, 2, 117, 119, 5, 50, 26, 2, 118, 116, 3, 2, 2, 2, 118, 117, - 3, 2, 2, 2, 119, 7, 3, 2, 2, 2, 120, 123, 5, 10, 6, 2, 121, 123, 5, 12, - 7, 2, 122, 120, 3, 2, 2, 2, 122, 121, 3, 2, 2, 2, 123, 9, 3, 2, 2, 2, 124, - 126, 7, 38, 2, 2, 125, 127, 7, 39, 2, 2, 126, 125, 3, 2, 2, 2, 126, 127, - 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 140, 5, 90, 46, 2, 129, 131, 7, - 38, 2, 2, 130, 132, 7, 39, 2, 2, 131, 130, 3, 2, 2, 2, 131, 132, 3, 2, - 2, 2, 132, 133, 3, 2, 2, 2, 133, 134, 7, 13, 2, 2, 134, 135, 5, 12, 7, - 2, 135, 136, 7, 14, 2, 2, 136, 140, 3, 2, 2, 2, 137, 138, 7, 38, 2, 2, - 138, 140, 5, 92, 47, 2, 139, 124, 3, 2, 2, 2, 139, 129, 3, 2, 2, 2, 139, - 137, 3, 2, 2, 2, 140, 11, 3, 2, 2, 2, 141, 142, 7, 37, 2, 2, 142, 145, - 5, 14, 8, 2, 143, 144, 7, 10, 2, 2, 144, 146, 5, 16, 9, 2, 145, 143, 3, - 2, 2, 2, 145, 146, 3, 2, 2, 2, 146, 147, 3, 2, 2, 2, 147, 148, 7, 58, 2, - 2, 148, 152, 5, 18, 10, 2, 149, 151, 5, 20, 11, 2, 150, 149, 3, 2, 2, 2, - 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, - 158, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 157, 5, 46, 24, 2, 156, 155, - 3, 2, 2, 2, 157, 160, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, - 2, 2, 159, 161, 3, 2, 2, 2, 160, 158, 3, 2, 2, 2, 161, 162, 5, 48, 25, - 2, 162, 13, 3, 2, 2, 2, 163, 164, 7, 60, 2, 2, 164, 15, 3, 2, 2, 2, 165, - 166, 7, 60, 2, 2, 166, 17, 3, 2, 2, 2, 167, 175, 5, 86, 44, 2, 168, 175, - 5, 58, 30, 2, 169, 175, 5, 60, 31, 2, 170, 175, 5, 54, 28, 2, 171, 175, - 5, 76, 39, 2, 172, 175, 5, 56, 29, 2, 173, 175, 5, 52, 27, 2, 174, 167, - 3, 2, 2, 2, 174, 168, 3, 2, 2, 2, 174, 169, 3, 2, 2, 2, 174, 170, 3, 2, - 2, 2, 174, 171, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, - 175, 19, 3, 2, 2, 2, 176, 181, 5, 24, 13, 2, 177, 181, 5, 26, 14, 2, 178, - 181, 5, 22, 12, 2, 179, 181, 5, 30, 16, 2, 180, 176, 3, 2, 2, 2, 180, 177, - 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 180, 179, 3, 2, 2, 2, 181, 21, 3, 2, - 2, 2, 182, 183, 7, 40, 2, 2, 183, 184, 5, 90, 46, 2, 184, 23, 3, 2, 2, - 2, 185, 186, 7, 42, 2, 2, 186, 189, 7, 62, 2, 2, 187, 188, 7, 10, 2, 2, - 188, 190, 7, 62, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, - 25, 3, 2, 2, 2, 191, 192, 7, 41, 2, 2, 192, 197, 5, 28, 15, 2, 193, 194, - 7, 10, 2, 2, 194, 196, 5, 28, 15, 2, 195, 193, 3, 2, 2, 2, 196, 199, 3, - 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 27, 3, 2, 2, - 2, 199, 197, 3, 2, 2, 2, 200, 202, 5, 90, 46, 2, 201, 203, 7, 45, 2, 2, - 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 29, 3, 2, 2, 2, 204, 205, - 7, 44, 2, 2, 205, 206, 5, 32, 17, 2, 206, 207, 7, 33, 2, 2, 207, 208, 5, - 90, 46, 2, 208, 254, 3, 2, 2, 2, 209, 210, 7, 44, 2, 2, 210, 211, 5, 32, - 17, 2, 211, 212, 7, 33, 2, 2, 212, 213, 5, 90, 46, 2, 213, 214, 7, 49, - 2, 2, 214, 215, 5, 34, 18, 2, 215, 254, 3, 2, 2, 2, 216, 217, 7, 44, 2, - 2, 217, 218, 5, 32, 17, 2, 218, 219, 7, 33, 2, 2, 219, 220, 5, 90, 46, - 2, 220, 221, 7, 49, 2, 2, 221, 222, 5, 34, 18, 2, 222, 223, 7, 50, 2, 2, - 223, 224, 5, 36, 19, 2, 224, 254, 3, 2, 2, 2, 225, 226, 7, 44, 2, 2, 226, - 227, 5, 32, 17, 2, 227, 228, 7, 33, 2, 2, 228, 229, 5, 90, 46, 2, 229, - 230, 7, 51, 2, 2, 230, 231, 7, 52, 2, 2, 231, 232, 5, 38, 20, 2, 232, 254, - 3, 2, 2, 2, 233, 234, 7, 44, 2, 2, 234, 235, 5, 32, 17, 2, 235, 236, 7, - 33, 2, 2, 236, 237, 5, 90, 46, 2, 237, 238, 7, 55, 2, 2, 238, 239, 5, 40, - 21, 2, 239, 240, 7, 33, 2, 2, 240, 241, 5, 42, 22, 2, 241, 254, 3, 2, 2, - 2, 242, 243, 7, 44, 2, 2, 243, 244, 7, 55, 2, 2, 244, 245, 5, 40, 21, 2, - 245, 246, 7, 33, 2, 2, 246, 247, 5, 42, 22, 2, 247, 254, 3, 2, 2, 2, 248, - 249, 7, 44, 2, 2, 249, 250, 7, 51, 2, 2, 250, 251, 7, 52, 2, 2, 251, 252, - 7, 49, 2, 2, 252, 254, 5, 38, 20, 2, 253, 204, 3, 2, 2, 2, 253, 209, 3, - 2, 2, 2, 253, 216, 3, 2, 2, 2, 253, 225, 3, 2, 2, 2, 253, 233, 3, 2, 2, - 2, 253, 242, 3, 2, 2, 2, 253, 248, 3, 2, 2, 2, 254, 31, 3, 2, 2, 2, 255, - 256, 7, 60, 2, 2, 256, 33, 3, 2, 2, 2, 257, 258, 7, 60, 2, 2, 258, 35, - 3, 2, 2, 2, 259, 260, 7, 60, 2, 2, 260, 37, 3, 2, 2, 2, 261, 262, 7, 60, - 2, 2, 262, 39, 3, 2, 2, 2, 263, 264, 7, 60, 2, 2, 264, 41, 3, 2, 2, 2, - 265, 266, 5, 90, 46, 2, 266, 43, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, - 45, 3, 2, 2, 2, 269, 272, 5, 50, 26, 2, 270, 272, 5, 86, 44, 2, 271, 269, - 3, 2, 2, 2, 271, 270, 3, 2, 2, 2, 272, 47, 3, 2, 2, 2, 273, 276, 5, 10, - 6, 2, 274, 276, 5, 12, 7, 2, 275, 273, 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, - 276, 49, 3, 2, 2, 2, 277, 278, 7, 43, 2, 2, 278, 279, 7, 60, 2, 2, 279, - 280, 7, 33, 2, 2, 280, 293, 5, 90, 46, 2, 281, 282, 7, 43, 2, 2, 282, 283, - 7, 60, 2, 2, 283, 284, 7, 33, 2, 2, 284, 285, 7, 13, 2, 2, 285, 286, 5, - 12, 7, 2, 286, 287, 7, 14, 2, 2, 287, 293, 3, 2, 2, 2, 288, 289, 7, 43, - 2, 2, 289, 290, 7, 60, 2, 2, 290, 291, 7, 33, 2, 2, 291, 293, 5, 92, 47, - 2, 292, 277, 3, 2, 2, 2, 292, 281, 3, 2, 2, 2, 292, 288, 3, 2, 2, 2, 293, - 51, 3, 2, 2, 2, 294, 295, 7, 59, 2, 2, 295, 296, 7, 60, 2, 2, 296, 53, - 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, 55, 3, 2, 2, 2, 299, 303, 5, 66, - 34, 2, 300, 303, 5, 54, 28, 2, 301, 303, 5, 52, 27, 2, 302, 299, 3, 2, - 2, 2, 302, 300, 3, 2, 2, 2, 302, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, - 304, 308, 7, 32, 2, 2, 305, 309, 5, 66, 34, 2, 306, 309, 5, 54, 28, 2, - 307, 309, 5, 52, 27, 2, 308, 305, 3, 2, 2, 2, 308, 306, 3, 2, 2, 2, 308, - 307, 3, 2, 2, 2, 309, 57, 3, 2, 2, 2, 310, 312, 7, 11, 2, 2, 311, 313, - 5, 72, 37, 2, 312, 311, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 3, - 2, 2, 2, 314, 315, 7, 12, 2, 2, 315, 59, 3, 2, 2, 2, 316, 325, 7, 15, 2, - 2, 317, 322, 5, 74, 38, 2, 318, 319, 7, 10, 2, 2, 319, 321, 5, 74, 38, - 2, 320, 318, 3, 2, 2, 2, 321, 324, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, - 323, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 325, 317, - 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 328, 3, 2, 2, 2, 327, 329, 7, 10, - 2, 2, 328, 327, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, - 330, 331, 7, 16, 2, 2, 331, 61, 3, 2, 2, 2, 332, 333, 7, 48, 2, 2, 333, - 63, 3, 2, 2, 2, 334, 335, 7, 61, 2, 2, 335, 65, 3, 2, 2, 2, 336, 337, 7, - 62, 2, 2, 337, 67, 3, 2, 2, 2, 338, 339, 7, 63, 2, 2, 339, 69, 3, 2, 2, - 2, 340, 341, 9, 2, 2, 2, 341, 71, 3, 2, 2, 2, 342, 351, 5, 90, 46, 2, 343, - 345, 7, 10, 2, 2, 344, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 344, - 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 350, 5, 90, - 46, 2, 349, 344, 3, 2, 2, 2, 350, 353, 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, - 351, 352, 3, 2, 2, 2, 352, 73, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 354, 355, - 5, 82, 42, 2, 355, 356, 7, 7, 2, 2, 356, 357, 5, 90, 46, 2, 357, 364, 3, - 2, 2, 2, 358, 359, 5, 80, 41, 2, 359, 360, 7, 7, 2, 2, 360, 361, 5, 90, - 46, 2, 361, 364, 3, 2, 2, 2, 362, 364, 5, 78, 40, 2, 363, 354, 3, 2, 2, - 2, 363, 358, 3, 2, 2, 2, 363, 362, 3, 2, 2, 2, 364, 75, 3, 2, 2, 2, 365, - 374, 7, 60, 2, 2, 366, 367, 7, 9, 2, 2, 367, 371, 5, 82, 42, 2, 368, 370, - 5, 80, 41, 2, 369, 368, 3, 2, 2, 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, - 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, - 2, 374, 366, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 376, - 377, 3, 2, 2, 2, 377, 407, 3, 2, 2, 2, 378, 379, 7, 60, 2, 2, 379, 390, - 5, 80, 41, 2, 380, 381, 7, 9, 2, 2, 381, 385, 5, 82, 42, 2, 382, 384, 5, - 80, 41, 2, 383, 382, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, - 2, 2, 385, 386, 3, 2, 2, 2, 386, 389, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, - 388, 380, 3, 2, 2, 2, 389, 392, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, - 391, 3, 2, 2, 2, 391, 403, 3, 2, 2, 2, 392, 390, 3, 2, 2, 2, 393, 398, - 5, 80, 41, 2, 394, 395, 7, 9, 2, 2, 395, 397, 5, 82, 42, 2, 396, 394, 3, - 2, 2, 2, 397, 400, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, - 2, 399, 402, 3, 2, 2, 2, 400, 398, 3, 2, 2, 2, 401, 393, 3, 2, 2, 2, 402, - 405, 3, 2, 2, 2, 403, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 407, - 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 406, 365, 3, 2, 2, 2, 406, 378, 3, 2, - 2, 2, 407, 77, 3, 2, 2, 2, 408, 409, 5, 54, 28, 2, 409, 79, 3, 2, 2, 2, - 410, 411, 7, 11, 2, 2, 411, 412, 5, 90, 46, 2, 412, 413, 7, 12, 2, 2, 413, - 81, 3, 2, 2, 2, 414, 415, 7, 60, 2, 2, 415, 83, 3, 2, 2, 2, 416, 421, 5, - 90, 46, 2, 417, 418, 7, 10, 2, 2, 418, 420, 5, 90, 46, 2, 419, 417, 3, - 2, 2, 2, 420, 423, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, - 2, 422, 85, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 424, 425, 7, 60, 2, 2, 425, - 426, 5, 88, 45, 2, 426, 87, 3, 2, 2, 2, 427, 436, 7, 13, 2, 2, 428, 433, - 5, 90, 46, 2, 429, 430, 7, 10, 2, 2, 430, 432, 5, 90, 46, 2, 431, 429, - 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, - 2, 2, 434, 437, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 428, 3, 2, 2, 2, - 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 7, 14, 2, 2, 439, - 89, 3, 2, 2, 2, 440, 441, 8, 46, 1, 2, 441, 464, 5, 86, 44, 2, 442, 443, - 7, 13, 2, 2, 443, 444, 5, 84, 43, 2, 444, 445, 7, 14, 2, 2, 445, 464, 3, - 2, 2, 2, 446, 447, 7, 23, 2, 2, 447, 464, 5, 90, 46, 19, 448, 449, 7, 24, - 2, 2, 449, 464, 5, 90, 46, 18, 450, 451, 7, 57, 2, 2, 451, 464, 5, 90, - 46, 15, 452, 464, 5, 56, 29, 2, 453, 464, 5, 64, 33, 2, 454, 464, 5, 66, - 34, 2, 455, 464, 5, 68, 35, 2, 456, 464, 5, 62, 32, 2, 457, 464, 5, 58, - 30, 2, 458, 464, 5, 60, 31, 2, 459, 464, 5, 54, 28, 2, 460, 464, 5, 76, - 39, 2, 461, 464, 5, 70, 36, 2, 462, 464, 5, 52, 27, 2, 463, 440, 3, 2, - 2, 2, 463, 442, 3, 2, 2, 2, 463, 446, 3, 2, 2, 2, 463, 448, 3, 2, 2, 2, - 463, 450, 3, 2, 2, 2, 463, 452, 3, 2, 2, 2, 463, 453, 3, 2, 2, 2, 463, - 454, 3, 2, 2, 2, 463, 455, 3, 2, 2, 2, 463, 456, 3, 2, 2, 2, 463, 457, - 3, 2, 2, 2, 463, 458, 3, 2, 2, 2, 463, 459, 3, 2, 2, 2, 463, 460, 3, 2, - 2, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 504, 3, 2, 2, 2, - 465, 466, 12, 24, 2, 2, 466, 467, 5, 98, 50, 2, 467, 468, 5, 90, 46, 25, - 468, 503, 3, 2, 2, 2, 469, 470, 12, 23, 2, 2, 470, 471, 5, 100, 51, 2, - 471, 472, 5, 90, 46, 24, 472, 503, 3, 2, 2, 2, 473, 474, 12, 22, 2, 2, - 474, 475, 5, 102, 52, 2, 475, 476, 5, 90, 46, 23, 476, 503, 3, 2, 2, 2, - 477, 478, 12, 17, 2, 2, 478, 480, 5, 94, 48, 2, 479, 481, 7, 57, 2, 2, - 480, 479, 3, 2, 2, 2, 480, 481, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, - 485, 5, 96, 49, 2, 483, 485, 5, 98, 50, 2, 484, 482, 3, 2, 2, 2, 484, 483, - 3, 2, 2, 2, 485, 486, 3, 2, 2, 2, 486, 487, 5, 90, 46, 18, 487, 503, 3, - 2, 2, 2, 488, 490, 12, 16, 2, 2, 489, 491, 7, 57, 2, 2, 490, 489, 3, 2, - 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 493, 5, 96, 49, - 2, 493, 494, 5, 90, 46, 17, 494, 503, 3, 2, 2, 2, 495, 496, 12, 14, 2, - 2, 496, 498, 7, 34, 2, 2, 497, 499, 5, 90, 46, 2, 498, 497, 3, 2, 2, 2, - 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 501, 7, 7, 2, 2, 501, - 503, 5, 90, 46, 15, 502, 465, 3, 2, 2, 2, 502, 469, 3, 2, 2, 2, 502, 473, - 3, 2, 2, 2, 502, 477, 3, 2, 2, 2, 502, 488, 3, 2, 2, 2, 502, 495, 3, 2, - 2, 2, 503, 506, 3, 2, 2, 2, 504, 502, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, - 505, 91, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 507, 508, 5, 90, 46, 2, 508, - 510, 7, 34, 2, 2, 509, 511, 5, 90, 46, 2, 510, 509, 3, 2, 2, 2, 510, 511, - 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 7, 7, 2, 2, 513, 514, 7, 13, - 2, 2, 514, 515, 5, 12, 7, 2, 515, 516, 7, 14, 2, 2, 516, 536, 3, 2, 2, - 2, 517, 518, 5, 90, 46, 2, 518, 519, 7, 34, 2, 2, 519, 520, 7, 13, 2, 2, - 520, 521, 5, 12, 7, 2, 521, 522, 7, 14, 2, 2, 522, 523, 7, 7, 2, 2, 523, - 524, 5, 90, 46, 2, 524, 536, 3, 2, 2, 2, 525, 526, 5, 90, 46, 2, 526, 527, - 7, 34, 2, 2, 527, 528, 7, 13, 2, 2, 528, 529, 5, 12, 7, 2, 529, 530, 7, - 14, 2, 2, 530, 531, 7, 7, 2, 2, 531, 532, 7, 13, 2, 2, 532, 533, 5, 12, - 7, 2, 533, 534, 7, 14, 2, 2, 534, 536, 3, 2, 2, 2, 535, 507, 3, 2, 2, 2, - 535, 517, 3, 2, 2, 2, 535, 525, 3, 2, 2, 2, 536, 93, 3, 2, 2, 2, 537, 538, - 9, 3, 2, 2, 538, 95, 3, 2, 2, 2, 539, 540, 7, 58, 2, 2, 540, 97, 3, 2, - 2, 2, 541, 542, 9, 4, 2, 2, 542, 99, 3, 2, 2, 2, 543, 544, 9, 5, 2, 2, - 544, 101, 3, 2, 2, 2, 545, 546, 9, 6, 2, 2, 546, 103, 3, 2, 2, 2, 547, - 548, 9, 7, 2, 2, 548, 105, 3, 2, 2, 2, 48, 111, 118, 122, 126, 131, 139, - 145, 152, 158, 174, 180, 189, 197, 202, 253, 271, 275, 292, 302, 308, 312, - 322, 325, 328, 346, 351, 363, 371, 376, 385, 390, 398, 403, 406, 421, 433, - 436, 463, 480, 484, 490, 498, 502, 504, 510, 535, + 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 461, 10, 46, 3, 46, + 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, + 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 479, 10, 46, 3, 46, 3, 46, 3, 46, + 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 490, 10, 46, 3, 46, 3, + 46, 7, 46, 494, 10, 46, 12, 46, 14, 46, 497, 11, 46, 3, 47, 3, 47, 3, 47, + 5, 47, 502, 10, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, + 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, + 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 527, 10, 47, 3, 48, 3, 48, 3, + 49, 3, 49, 3, 49, 5, 49, 534, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, + 3, 52, 3, 53, 3, 53, 3, 53, 2, 3, 90, 54, 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, 2, 9, 3, 2, 61, 62, 3, 2, 46, 47, 4, 2, + 46, 46, 53, 54, 3, 2, 17, 22, 3, 2, 30, 31, 4, 2, 23, 24, 27, 29, 4, 2, + 23, 24, 56, 57, 2, 570, 2, 106, 3, 2, 2, 2, 4, 111, 3, 2, 2, 2, 6, 118, + 3, 2, 2, 2, 8, 122, 3, 2, 2, 2, 10, 139, 3, 2, 2, 2, 12, 141, 3, 2, 2, + 2, 14, 163, 3, 2, 2, 2, 16, 165, 3, 2, 2, 2, 18, 174, 3, 2, 2, 2, 20, 180, + 3, 2, 2, 2, 22, 182, 3, 2, 2, 2, 24, 185, 3, 2, 2, 2, 26, 191, 3, 2, 2, + 2, 28, 200, 3, 2, 2, 2, 30, 253, 3, 2, 2, 2, 32, 255, 3, 2, 2, 2, 34, 257, + 3, 2, 2, 2, 36, 259, 3, 2, 2, 2, 38, 261, 3, 2, 2, 2, 40, 263, 3, 2, 2, + 2, 42, 265, 3, 2, 2, 2, 44, 267, 3, 2, 2, 2, 46, 271, 3, 2, 2, 2, 48, 275, + 3, 2, 2, 2, 50, 292, 3, 2, 2, 2, 52, 294, 3, 2, 2, 2, 54, 297, 3, 2, 2, + 2, 56, 302, 3, 2, 2, 2, 58, 310, 3, 2, 2, 2, 60, 316, 3, 2, 2, 2, 62, 332, + 3, 2, 2, 2, 64, 334, 3, 2, 2, 2, 66, 336, 3, 2, 2, 2, 68, 338, 3, 2, 2, + 2, 70, 340, 3, 2, 2, 2, 72, 342, 3, 2, 2, 2, 74, 363, 3, 2, 2, 2, 76, 406, + 3, 2, 2, 2, 78, 408, 3, 2, 2, 2, 80, 410, 3, 2, 2, 2, 82, 414, 3, 2, 2, + 2, 84, 416, 3, 2, 2, 2, 86, 424, 3, 2, 2, 2, 88, 427, 3, 2, 2, 2, 90, 460, + 3, 2, 2, 2, 92, 526, 3, 2, 2, 2, 94, 528, 3, 2, 2, 2, 96, 533, 3, 2, 2, + 2, 98, 535, 3, 2, 2, 2, 100, 537, 3, 2, 2, 2, 102, 539, 3, 2, 2, 2, 104, + 541, 3, 2, 2, 2, 106, 107, 5, 4, 3, 2, 107, 3, 3, 2, 2, 2, 108, 110, 5, + 6, 4, 2, 109, 108, 3, 2, 2, 2, 110, 113, 3, 2, 2, 2, 111, 109, 3, 2, 2, + 2, 111, 112, 3, 2, 2, 2, 112, 114, 3, 2, 2, 2, 113, 111, 3, 2, 2, 2, 114, + 115, 5, 8, 5, 2, 115, 5, 3, 2, 2, 2, 116, 119, 5, 86, 44, 2, 117, 119, + 5, 50, 26, 2, 118, 116, 3, 2, 2, 2, 118, 117, 3, 2, 2, 2, 119, 7, 3, 2, + 2, 2, 120, 123, 5, 10, 6, 2, 121, 123, 5, 12, 7, 2, 122, 120, 3, 2, 2, + 2, 122, 121, 3, 2, 2, 2, 123, 9, 3, 2, 2, 2, 124, 126, 7, 38, 2, 2, 125, + 127, 7, 39, 2, 2, 126, 125, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, + 3, 2, 2, 2, 128, 140, 5, 90, 46, 2, 129, 131, 7, 38, 2, 2, 130, 132, 7, + 39, 2, 2, 131, 130, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 133, 3, 2, 2, + 2, 133, 134, 7, 13, 2, 2, 134, 135, 5, 12, 7, 2, 135, 136, 7, 14, 2, 2, + 136, 140, 3, 2, 2, 2, 137, 138, 7, 38, 2, 2, 138, 140, 5, 92, 47, 2, 139, + 124, 3, 2, 2, 2, 139, 129, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 11, 3, + 2, 2, 2, 141, 142, 7, 37, 2, 2, 142, 145, 5, 14, 8, 2, 143, 144, 7, 10, + 2, 2, 144, 146, 5, 16, 9, 2, 145, 143, 3, 2, 2, 2, 145, 146, 3, 2, 2, 2, + 146, 147, 3, 2, 2, 2, 147, 148, 7, 58, 2, 2, 148, 152, 5, 18, 10, 2, 149, + 151, 5, 20, 11, 2, 150, 149, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, + 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 158, 3, 2, 2, 2, 154, 152, 3, 2, + 2, 2, 155, 157, 5, 46, 24, 2, 156, 155, 3, 2, 2, 2, 157, 160, 3, 2, 2, + 2, 158, 156, 3, 2, 2, 2, 158, 159, 3, 2, 2, 2, 159, 161, 3, 2, 2, 2, 160, + 158, 3, 2, 2, 2, 161, 162, 5, 48, 25, 2, 162, 13, 3, 2, 2, 2, 163, 164, + 7, 60, 2, 2, 164, 15, 3, 2, 2, 2, 165, 166, 7, 60, 2, 2, 166, 17, 3, 2, + 2, 2, 167, 175, 5, 86, 44, 2, 168, 175, 5, 58, 30, 2, 169, 175, 5, 60, + 31, 2, 170, 175, 5, 54, 28, 2, 171, 175, 5, 76, 39, 2, 172, 175, 5, 56, + 29, 2, 173, 175, 5, 52, 27, 2, 174, 167, 3, 2, 2, 2, 174, 168, 3, 2, 2, + 2, 174, 169, 3, 2, 2, 2, 174, 170, 3, 2, 2, 2, 174, 171, 3, 2, 2, 2, 174, + 172, 3, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 19, 3, 2, 2, 2, 176, 181, 5, + 24, 13, 2, 177, 181, 5, 26, 14, 2, 178, 181, 5, 22, 12, 2, 179, 181, 5, + 30, 16, 2, 180, 176, 3, 2, 2, 2, 180, 177, 3, 2, 2, 2, 180, 178, 3, 2, + 2, 2, 180, 179, 3, 2, 2, 2, 181, 21, 3, 2, 2, 2, 182, 183, 7, 40, 2, 2, + 183, 184, 5, 90, 46, 2, 184, 23, 3, 2, 2, 2, 185, 186, 7, 42, 2, 2, 186, + 189, 7, 63, 2, 2, 187, 188, 7, 10, 2, 2, 188, 190, 7, 63, 2, 2, 189, 187, + 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 25, 3, 2, 2, 2, 191, 192, 7, 41, + 2, 2, 192, 197, 5, 28, 15, 2, 193, 194, 7, 10, 2, 2, 194, 196, 5, 28, 15, + 2, 195, 193, 3, 2, 2, 2, 196, 199, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 197, + 198, 3, 2, 2, 2, 198, 27, 3, 2, 2, 2, 199, 197, 3, 2, 2, 2, 200, 202, 5, + 90, 46, 2, 201, 203, 7, 45, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, + 2, 2, 203, 29, 3, 2, 2, 2, 204, 205, 7, 44, 2, 2, 205, 206, 5, 32, 17, + 2, 206, 207, 7, 33, 2, 2, 207, 208, 5, 90, 46, 2, 208, 254, 3, 2, 2, 2, + 209, 210, 7, 44, 2, 2, 210, 211, 5, 32, 17, 2, 211, 212, 7, 33, 2, 2, 212, + 213, 5, 90, 46, 2, 213, 214, 7, 49, 2, 2, 214, 215, 5, 34, 18, 2, 215, + 254, 3, 2, 2, 2, 216, 217, 7, 44, 2, 2, 217, 218, 5, 32, 17, 2, 218, 219, + 7, 33, 2, 2, 219, 220, 5, 90, 46, 2, 220, 221, 7, 49, 2, 2, 221, 222, 5, + 34, 18, 2, 222, 223, 7, 50, 2, 2, 223, 224, 5, 36, 19, 2, 224, 254, 3, + 2, 2, 2, 225, 226, 7, 44, 2, 2, 226, 227, 5, 32, 17, 2, 227, 228, 7, 33, + 2, 2, 228, 229, 5, 90, 46, 2, 229, 230, 7, 51, 2, 2, 230, 231, 7, 52, 2, + 2, 231, 232, 5, 38, 20, 2, 232, 254, 3, 2, 2, 2, 233, 234, 7, 44, 2, 2, + 234, 235, 5, 32, 17, 2, 235, 236, 7, 33, 2, 2, 236, 237, 5, 90, 46, 2, + 237, 238, 7, 55, 2, 2, 238, 239, 5, 40, 21, 2, 239, 240, 7, 33, 2, 2, 240, + 241, 5, 42, 22, 2, 241, 254, 3, 2, 2, 2, 242, 243, 7, 44, 2, 2, 243, 244, + 7, 55, 2, 2, 244, 245, 5, 40, 21, 2, 245, 246, 7, 33, 2, 2, 246, 247, 5, + 42, 22, 2, 247, 254, 3, 2, 2, 2, 248, 249, 7, 44, 2, 2, 249, 250, 7, 51, + 2, 2, 250, 251, 7, 52, 2, 2, 251, 252, 7, 49, 2, 2, 252, 254, 5, 38, 20, + 2, 253, 204, 3, 2, 2, 2, 253, 209, 3, 2, 2, 2, 253, 216, 3, 2, 2, 2, 253, + 225, 3, 2, 2, 2, 253, 233, 3, 2, 2, 2, 253, 242, 3, 2, 2, 2, 253, 248, + 3, 2, 2, 2, 254, 31, 3, 2, 2, 2, 255, 256, 7, 60, 2, 2, 256, 33, 3, 2, + 2, 2, 257, 258, 7, 60, 2, 2, 258, 35, 3, 2, 2, 2, 259, 260, 7, 60, 2, 2, + 260, 37, 3, 2, 2, 2, 261, 262, 7, 60, 2, 2, 262, 39, 3, 2, 2, 2, 263, 264, + 7, 60, 2, 2, 264, 41, 3, 2, 2, 2, 265, 266, 5, 90, 46, 2, 266, 43, 3, 2, + 2, 2, 267, 268, 3, 2, 2, 2, 268, 45, 3, 2, 2, 2, 269, 272, 5, 50, 26, 2, + 270, 272, 5, 86, 44, 2, 271, 269, 3, 2, 2, 2, 271, 270, 3, 2, 2, 2, 272, + 47, 3, 2, 2, 2, 273, 276, 5, 10, 6, 2, 274, 276, 5, 12, 7, 2, 275, 273, + 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, 276, 49, 3, 2, 2, 2, 277, 278, 7, 43, + 2, 2, 278, 279, 7, 60, 2, 2, 279, 280, 7, 33, 2, 2, 280, 293, 5, 90, 46, + 2, 281, 282, 7, 43, 2, 2, 282, 283, 7, 60, 2, 2, 283, 284, 7, 33, 2, 2, + 284, 285, 7, 13, 2, 2, 285, 286, 5, 12, 7, 2, 286, 287, 7, 14, 2, 2, 287, + 293, 3, 2, 2, 2, 288, 289, 7, 43, 2, 2, 289, 290, 7, 60, 2, 2, 290, 291, + 7, 33, 2, 2, 291, 293, 5, 92, 47, 2, 292, 277, 3, 2, 2, 2, 292, 281, 3, + 2, 2, 2, 292, 288, 3, 2, 2, 2, 293, 51, 3, 2, 2, 2, 294, 295, 7, 59, 2, + 2, 295, 296, 7, 60, 2, 2, 296, 53, 3, 2, 2, 2, 297, 298, 7, 60, 2, 2, 298, + 55, 3, 2, 2, 2, 299, 303, 5, 66, 34, 2, 300, 303, 5, 54, 28, 2, 301, 303, + 5, 52, 27, 2, 302, 299, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 301, 3, + 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 308, 7, 32, 2, 2, 305, 309, 5, 66, + 34, 2, 306, 309, 5, 54, 28, 2, 307, 309, 5, 52, 27, 2, 308, 305, 3, 2, + 2, 2, 308, 306, 3, 2, 2, 2, 308, 307, 3, 2, 2, 2, 309, 57, 3, 2, 2, 2, + 310, 312, 7, 11, 2, 2, 311, 313, 5, 72, 37, 2, 312, 311, 3, 2, 2, 2, 312, + 313, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 7, 12, 2, 2, 315, 59, + 3, 2, 2, 2, 316, 325, 7, 15, 2, 2, 317, 322, 5, 74, 38, 2, 318, 319, 7, + 10, 2, 2, 319, 321, 5, 74, 38, 2, 320, 318, 3, 2, 2, 2, 321, 324, 3, 2, + 2, 2, 322, 320, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 326, 3, 2, 2, 2, + 324, 322, 3, 2, 2, 2, 325, 317, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, + 328, 3, 2, 2, 2, 327, 329, 7, 10, 2, 2, 328, 327, 3, 2, 2, 2, 328, 329, + 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 7, 16, 2, 2, 331, 61, 3, 2, + 2, 2, 332, 333, 7, 48, 2, 2, 333, 63, 3, 2, 2, 2, 334, 335, 9, 2, 2, 2, + 335, 65, 3, 2, 2, 2, 336, 337, 7, 63, 2, 2, 337, 67, 3, 2, 2, 2, 338, 339, + 7, 64, 2, 2, 339, 69, 3, 2, 2, 2, 340, 341, 9, 3, 2, 2, 341, 71, 3, 2, + 2, 2, 342, 351, 5, 90, 46, 2, 343, 345, 7, 10, 2, 2, 344, 343, 3, 2, 2, + 2, 345, 346, 3, 2, 2, 2, 346, 344, 3, 2, 2, 2, 346, 347, 3, 2, 2, 2, 347, + 348, 3, 2, 2, 2, 348, 350, 5, 90, 46, 2, 349, 344, 3, 2, 2, 2, 350, 353, + 3, 2, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 73, 3, 2, + 2, 2, 353, 351, 3, 2, 2, 2, 354, 355, 5, 82, 42, 2, 355, 356, 7, 7, 2, + 2, 356, 357, 5, 90, 46, 2, 357, 364, 3, 2, 2, 2, 358, 359, 5, 80, 41, 2, + 359, 360, 7, 7, 2, 2, 360, 361, 5, 90, 46, 2, 361, 364, 3, 2, 2, 2, 362, + 364, 5, 78, 40, 2, 363, 354, 3, 2, 2, 2, 363, 358, 3, 2, 2, 2, 363, 362, + 3, 2, 2, 2, 364, 75, 3, 2, 2, 2, 365, 374, 7, 60, 2, 2, 366, 367, 7, 9, + 2, 2, 367, 371, 5, 82, 42, 2, 368, 370, 5, 80, 41, 2, 369, 368, 3, 2, 2, + 2, 370, 373, 3, 2, 2, 2, 371, 369, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, + 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 374, 366, 3, 2, 2, 2, 375, 376, + 3, 2, 2, 2, 376, 374, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 407, 3, 2, + 2, 2, 378, 379, 7, 60, 2, 2, 379, 390, 5, 80, 41, 2, 380, 381, 7, 9, 2, + 2, 381, 385, 5, 82, 42, 2, 382, 384, 5, 80, 41, 2, 383, 382, 3, 2, 2, 2, + 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, + 389, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 380, 3, 2, 2, 2, 389, 392, + 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 403, 3, 2, + 2, 2, 392, 390, 3, 2, 2, 2, 393, 398, 5, 80, 41, 2, 394, 395, 7, 9, 2, + 2, 395, 397, 5, 82, 42, 2, 396, 394, 3, 2, 2, 2, 397, 400, 3, 2, 2, 2, + 398, 396, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 402, 3, 2, 2, 2, 400, + 398, 3, 2, 2, 2, 401, 393, 3, 2, 2, 2, 402, 405, 3, 2, 2, 2, 403, 401, + 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 407, 3, 2, 2, 2, 405, 403, 3, 2, + 2, 2, 406, 365, 3, 2, 2, 2, 406, 378, 3, 2, 2, 2, 407, 77, 3, 2, 2, 2, + 408, 409, 5, 54, 28, 2, 409, 79, 3, 2, 2, 2, 410, 411, 7, 11, 2, 2, 411, + 412, 5, 90, 46, 2, 412, 413, 7, 12, 2, 2, 413, 81, 3, 2, 2, 2, 414, 415, + 7, 60, 2, 2, 415, 83, 3, 2, 2, 2, 416, 421, 5, 90, 46, 2, 417, 418, 7, + 10, 2, 2, 418, 420, 5, 90, 46, 2, 419, 417, 3, 2, 2, 2, 420, 423, 3, 2, + 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 85, 3, 2, 2, 2, + 423, 421, 3, 2, 2, 2, 424, 425, 7, 60, 2, 2, 425, 426, 5, 88, 45, 2, 426, + 87, 3, 2, 2, 2, 427, 436, 7, 13, 2, 2, 428, 433, 5, 90, 46, 2, 429, 430, + 7, 10, 2, 2, 430, 432, 5, 90, 46, 2, 431, 429, 3, 2, 2, 2, 432, 435, 3, + 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 437, 3, 2, 2, + 2, 435, 433, 3, 2, 2, 2, 436, 428, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, + 438, 3, 2, 2, 2, 438, 439, 7, 14, 2, 2, 439, 89, 3, 2, 2, 2, 440, 441, + 8, 46, 1, 2, 441, 442, 5, 104, 53, 2, 442, 443, 5, 90, 46, 22, 443, 461, + 3, 2, 2, 2, 444, 461, 5, 86, 44, 2, 445, 446, 7, 13, 2, 2, 446, 447, 5, + 84, 43, 2, 447, 448, 7, 14, 2, 2, 448, 461, 3, 2, 2, 2, 449, 461, 5, 56, + 29, 2, 450, 461, 5, 64, 33, 2, 451, 461, 5, 66, 34, 2, 452, 461, 5, 68, + 35, 2, 453, 461, 5, 62, 32, 2, 454, 461, 5, 58, 30, 2, 455, 461, 5, 60, + 31, 2, 456, 461, 5, 54, 28, 2, 457, 461, 5, 76, 39, 2, 458, 461, 5, 70, + 36, 2, 459, 461, 5, 52, 27, 2, 460, 440, 3, 2, 2, 2, 460, 444, 3, 2, 2, + 2, 460, 445, 3, 2, 2, 2, 460, 449, 3, 2, 2, 2, 460, 450, 3, 2, 2, 2, 460, + 451, 3, 2, 2, 2, 460, 452, 3, 2, 2, 2, 460, 453, 3, 2, 2, 2, 460, 454, + 3, 2, 2, 2, 460, 455, 3, 2, 2, 2, 460, 456, 3, 2, 2, 2, 460, 457, 3, 2, + 2, 2, 460, 458, 3, 2, 2, 2, 460, 459, 3, 2, 2, 2, 461, 495, 3, 2, 2, 2, + 462, 463, 12, 21, 2, 2, 463, 464, 5, 98, 50, 2, 464, 465, 5, 90, 46, 22, + 465, 494, 3, 2, 2, 2, 466, 467, 12, 20, 2, 2, 467, 468, 5, 100, 51, 2, + 468, 469, 5, 90, 46, 21, 469, 494, 3, 2, 2, 2, 470, 471, 12, 19, 2, 2, + 471, 472, 5, 102, 52, 2, 472, 473, 5, 90, 46, 20, 473, 494, 3, 2, 2, 2, + 474, 475, 12, 16, 2, 2, 475, 478, 5, 94, 48, 2, 476, 479, 5, 96, 49, 2, + 477, 479, 5, 98, 50, 2, 478, 476, 3, 2, 2, 2, 478, 477, 3, 2, 2, 2, 479, + 480, 3, 2, 2, 2, 480, 481, 5, 90, 46, 17, 481, 494, 3, 2, 2, 2, 482, 483, + 12, 15, 2, 2, 483, 484, 5, 96, 49, 2, 484, 485, 5, 90, 46, 16, 485, 494, + 3, 2, 2, 2, 486, 487, 12, 14, 2, 2, 487, 489, 7, 34, 2, 2, 488, 490, 5, + 90, 46, 2, 489, 488, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 3, 2, + 2, 2, 491, 492, 7, 7, 2, 2, 492, 494, 5, 90, 46, 15, 493, 462, 3, 2, 2, + 2, 493, 466, 3, 2, 2, 2, 493, 470, 3, 2, 2, 2, 493, 474, 3, 2, 2, 2, 493, + 482, 3, 2, 2, 2, 493, 486, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, + 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 91, 3, 2, 2, 2, 497, 495, 3, 2, + 2, 2, 498, 499, 5, 90, 46, 2, 499, 501, 7, 34, 2, 2, 500, 502, 5, 90, 46, + 2, 501, 500, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, + 504, 7, 7, 2, 2, 504, 505, 7, 13, 2, 2, 505, 506, 5, 12, 7, 2, 506, 507, + 7, 14, 2, 2, 507, 527, 3, 2, 2, 2, 508, 509, 5, 90, 46, 2, 509, 510, 7, + 34, 2, 2, 510, 511, 7, 13, 2, 2, 511, 512, 5, 12, 7, 2, 512, 513, 7, 14, + 2, 2, 513, 514, 7, 7, 2, 2, 514, 515, 5, 90, 46, 2, 515, 527, 3, 2, 2, + 2, 516, 517, 5, 90, 46, 2, 517, 518, 7, 34, 2, 2, 518, 519, 7, 13, 2, 2, + 519, 520, 5, 12, 7, 2, 520, 521, 7, 14, 2, 2, 521, 522, 7, 7, 2, 2, 522, + 523, 7, 13, 2, 2, 523, 524, 5, 12, 7, 2, 524, 525, 7, 14, 2, 2, 525, 527, + 3, 2, 2, 2, 526, 498, 3, 2, 2, 2, 526, 508, 3, 2, 2, 2, 526, 516, 3, 2, + 2, 2, 527, 93, 3, 2, 2, 2, 528, 529, 9, 4, 2, 2, 529, 95, 3, 2, 2, 2, 530, + 534, 7, 58, 2, 2, 531, 532, 7, 57, 2, 2, 532, 534, 7, 58, 2, 2, 533, 530, + 3, 2, 2, 2, 533, 531, 3, 2, 2, 2, 534, 97, 3, 2, 2, 2, 535, 536, 9, 5, + 2, 2, 536, 99, 3, 2, 2, 2, 537, 538, 9, 6, 2, 2, 538, 101, 3, 2, 2, 2, + 539, 540, 9, 7, 2, 2, 540, 103, 3, 2, 2, 2, 541, 542, 9, 8, 2, 2, 542, + 105, 3, 2, 2, 2, 47, 111, 118, 122, 126, 131, 139, 145, 152, 158, 174, + 180, 189, 197, 202, 253, 271, 275, 292, 302, 308, 312, 322, 325, 328, 346, + 351, 363, 371, 376, 385, 390, 398, 403, 406, 421, 433, 436, 460, 478, 489, + 493, 495, 501, 526, 533, } var deserializer = antlr.NewATNDeserializer(nil) var deserializedATN = deserializer.DeserializeFromUInt16(parserATN) @@ -281,7 +278,7 @@ var symbolicNames = []string{ "For", "Return", "Distinct", "Filter", "Sort", "Limit", "Let", "Collect", "SortDirection", "None", "Null", "BooleanLiteral", "Into", "Keep", "With", "Count", "All", "Any", "Aggregate", "Like", "Not", "In", "Param", "Identifier", - "StringLiteral", "IntegerLiteral", "FloatLiteral", + "StringLiteral", "TemplateStringLiteral", "IntegerLiteral", "FloatLiteral", } var ruleNames = []string{ @@ -327,68 +324,69 @@ func NewFqlParser(input antlr.TokenStream) *FqlParser { // FqlParser tokens. const ( - FqlParserEOF = antlr.TokenEOF - FqlParserMultiLineComment = 1 - FqlParserSingleLineComment = 2 - FqlParserWhiteSpaces = 3 - FqlParserLineTerminator = 4 - FqlParserColon = 5 - FqlParserSemiColon = 6 - FqlParserDot = 7 - FqlParserComma = 8 - FqlParserOpenBracket = 9 - FqlParserCloseBracket = 10 - FqlParserOpenParen = 11 - FqlParserCloseParen = 12 - FqlParserOpenBrace = 13 - FqlParserCloseBrace = 14 - FqlParserGt = 15 - FqlParserLt = 16 - FqlParserEq = 17 - FqlParserGte = 18 - FqlParserLte = 19 - FqlParserNeq = 20 - FqlParserPlus = 21 - FqlParserMinus = 22 - FqlParserMinusMinus = 23 - FqlParserPlusPlus = 24 - FqlParserMulti = 25 - FqlParserDiv = 26 - FqlParserMod = 27 - FqlParserAnd = 28 - FqlParserOr = 29 - FqlParserRange = 30 - FqlParserAssign = 31 - FqlParserQuestionMark = 32 - FqlParserRegexNotMatch = 33 - FqlParserRegexMatch = 34 - FqlParserFor = 35 - FqlParserReturn = 36 - FqlParserDistinct = 37 - FqlParserFilter = 38 - FqlParserSort = 39 - FqlParserLimit = 40 - FqlParserLet = 41 - FqlParserCollect = 42 - FqlParserSortDirection = 43 - FqlParserNone = 44 - FqlParserNull = 45 - FqlParserBooleanLiteral = 46 - FqlParserInto = 47 - FqlParserKeep = 48 - FqlParserWith = 49 - FqlParserCount = 50 - FqlParserAll = 51 - FqlParserAny = 52 - FqlParserAggregate = 53 - FqlParserLike = 54 - FqlParserNot = 55 - FqlParserIn = 56 - FqlParserParam = 57 - FqlParserIdentifier = 58 - FqlParserStringLiteral = 59 - FqlParserIntegerLiteral = 60 - FqlParserFloatLiteral = 61 + FqlParserEOF = antlr.TokenEOF + FqlParserMultiLineComment = 1 + FqlParserSingleLineComment = 2 + FqlParserWhiteSpaces = 3 + FqlParserLineTerminator = 4 + FqlParserColon = 5 + FqlParserSemiColon = 6 + FqlParserDot = 7 + FqlParserComma = 8 + FqlParserOpenBracket = 9 + FqlParserCloseBracket = 10 + FqlParserOpenParen = 11 + FqlParserCloseParen = 12 + FqlParserOpenBrace = 13 + FqlParserCloseBrace = 14 + FqlParserGt = 15 + FqlParserLt = 16 + FqlParserEq = 17 + FqlParserGte = 18 + FqlParserLte = 19 + FqlParserNeq = 20 + FqlParserPlus = 21 + FqlParserMinus = 22 + FqlParserMinusMinus = 23 + FqlParserPlusPlus = 24 + FqlParserMulti = 25 + FqlParserDiv = 26 + FqlParserMod = 27 + FqlParserAnd = 28 + FqlParserOr = 29 + FqlParserRange = 30 + FqlParserAssign = 31 + FqlParserQuestionMark = 32 + FqlParserRegexNotMatch = 33 + FqlParserRegexMatch = 34 + FqlParserFor = 35 + FqlParserReturn = 36 + FqlParserDistinct = 37 + FqlParserFilter = 38 + FqlParserSort = 39 + FqlParserLimit = 40 + FqlParserLet = 41 + FqlParserCollect = 42 + FqlParserSortDirection = 43 + FqlParserNone = 44 + FqlParserNull = 45 + FqlParserBooleanLiteral = 46 + FqlParserInto = 47 + FqlParserKeep = 48 + FqlParserWith = 49 + FqlParserCount = 50 + FqlParserAll = 51 + FqlParserAny = 52 + FqlParserAggregate = 53 + FqlParserLike = 54 + FqlParserNot = 55 + FqlParserIn = 56 + FqlParserParam = 57 + FqlParserIdentifier = 58 + FqlParserStringLiteral = 59 + FqlParserTemplateStringLiteral = 60 + FqlParserIntegerLiteral = 61 + FqlParserFloatLiteral = 62 ) // FqlParser rules. @@ -4654,7 +4652,7 @@ func (p *FqlParser) ArrayLiteral() (localctx IArrayLiteralContext) { p.GetErrorHandler().Sync(p) _la = p.GetTokenStream().LA(1) - if (((_la)&-(0x1f+1)) == 0 && ((1<